Python 我的IP检查器正在检查IP在技术上是否有效,我想检查它是否';s在线

Python 我的IP检查器正在检查IP在技术上是否有效,我想检查它是否';s在线,python,python-3.x,validation,ip,Python,Python 3.x,Validation,Ip,当它无效时,它会给出预期的输出,例如当数字超过255时,当输入包含字母表的字母时等等。。但是,假设我输入10.111.111.111作为我的IP。它打印“有效”,即使您现在尝试访问该IP也会失败 如何检查IP是否在线,而不是它是否在数字上有效?您无法通过简单的查看来知道IP是否可以访问。您需要尝试连接或ping它。后一种方法非常简单,尽管不是100%准确(并非所有IP都响应ping) 快速方法: import socket def is_valid_ipv4_address(address):

当它无效时,它会给出预期的输出,例如当数字超过255时,当输入包含字母表的字母时等等。。但是,假设我输入10.111.111.111作为我的IP。它打印“有效”,即使您现在尝试访问该IP也会失败


如何检查IP是否在线,而不是它是否在数字上有效?

您无法通过简单的查看来知道IP是否可以访问。您需要尝试连接或ping它。后一种方法非常简单,尽管不是100%准确(并非所有IP都响应ping)

快速方法:

import socket

def is_valid_ipv4_address(address):
    try:
        socket.inet_pton(socket.AF_INET, address)
    except AttributeError:  # no inet_pton here, sorry
        try:
            socket.inet_pton()
        except socket.error:
            return False
        return address.count('.') == 3
    except socket.error:  # not a valid address
        return False

    return True

def is_valid_ipv6_address(address):
    try:
        socket.inet_pton(socket.AF_INET6, address)
    except AttributeError:  # no inet_pton here, sorry
        try:
            socket.inet_pton()
        except socket.error:
            return False
        return address.count('.') == 3
    except socket.error:  # not a valid address
        return False

    return True

def checkStatus():
    websiteToCheck = input("Enter IP: ").replace(" ", "")
    if is_valid_ipv4_address(websiteToCheck) or is_valid_ipv6_address(websiteToCheck):
        print("Valid")
    elif len(websiteToCheck) == 0:
        print("Please input something")
    else:
        print("Invalid")

checkStatus()

定义“在线”。它是否需要提供一个可公开访问的服务器/端口才能算作“在线”…?如果是,哪个?@deceze运行该程序的人应该能够将该IP输入到他们的浏览器中,并拥有除404 Load之外的其他内容。404已经表示正在运行的HTTP服务器非常“在线”。那么您希望IP运行HTTP服务器?或者提供2xx响应的HTTP服务器?顺便说一句,IPv6地址的
address.count('.')==3
@deceze我不知道2xx响应是什么,但我的想法是IP应该给你一个不是404的网页,能够响应ping并不意味着所讨论的IP地址实际上是在端口80上运行web服务器。@tripleee:是的,但它确实回答了“如何检查IP是否在线”的问题,不是吗?web服务器部分是后来出现的。不幸的是,这似乎是一个重复出现的问题,这些初学者的问题没有得到很好的说明。不管怎样,这两个问题都有好的答案。@tripleee:那很不幸,但我还是会尽力提供有用的答案。
import os
response = os.system("ping -c 1 " + address)

#check the response...
if response == 0:
  return True
else:
  return False