四时宝库

程序员的知识宝库

使用 Python 验证 IP 地址 python检测ip能否ping

要使用 Python 验证 IP 地址,可以使用 ipaddress 模块的 ip_address() 函数,适用于 IPv4 和 IPv6 地址。还可以使用自定义函数或正则表达式来验证 IP 地址。

使用 ipaddress 模块验证 IP 地址

验证字符串中的数字是否是有效 IP 地址的最简单方法是使用 ipaddress 模块。

使用 ipaddress 模块前请先 pip 安装。

pip install ipaddress

我们打开 Python shell,使用 ipaddress.ip_address() 函数。

>>> import ipaddress
>>> ipaddress.ip_address("192.168.1.1")
IPv4Address('192.168.1.1')

ip_address() 函数返回 IPv4Address 类型的对象,这意味着字符串中包含有效的 IP 地址。

>>> import ipaddress
>>> ipaddress.ip_address("192.168.1.300")
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
  File "D:\thonny\lib\ipaddress.py", line 54, in ip_address
ValueError: '192.168.1.300' does not appear to be an IPv4 or IPv6 address

如果字符串中包含无效的 IP 地址,ip_address() 函数会返回 ValueError 异常。

我们可以自定义一个简单的函数来判断 IP 地址是否有效。

import ipaddress 
def check_ip(address):
    try:
        ip = ipaddress.ip_address(address)
        print(f"IP 地址有效:{ip}")
    except ValueError:
        print(f"IP 地址无效:{address}")

check_ip("172.18.1.1")
check_ip("192.168.100.100")
check_ip("192.168.1.300")
# 输出:
IP 地址有效:172.18.1.1
IP 地址有效:192.168.100.100
IP 地址无效:192.168.1.300

isinstance() 函数来判断一个对象是否是一个已知的类型。

自定义函数验证 IP 地址

自定义函数,通过拆分 IP 地址,并将 IP 地址的每个部分存储到中。使用 len() 函数验证 IP 字符串是否由 4 个数字组成。对于 IP 中的每组数字,验证该数字是否为整数,检查数字是否介于 0 和 255 之间。

def check_ip(address):
    ip_list = address.split(".")
    if len(ip_list) != 4:
        print(f"IP 地址无效:{address}")
        return False

    for i in ip_list:
        if not isinstance(int(i), int):
            print(f"IP 地址无效:{address}")
            return False

        if int(i) < 0 or int(i) > 255:
            print(f"IP 地址无效:{address}")
            return False
 
    print(f"IP 地址有效:{address}")
    return True
check_ip("172.18.1.1")
check_ip("192.168.100.100")
check_ip("192.168.1.300")
# 输出:
IP 地址有效:172.18.1.1
IP 地址有效:192.168.100.100
IP 地址无效:192.168.1.300

使用正则表达式验证 IP 地址

可以使用正则表达式验证 IP 地址,以下是使用的匹配模式:

^:表示要匹配的字符串的开头。

$:表示字符串的末尾。

\d{1,3}:包含 1 到 3 位数字的整数。

.:匹配单个点。

完整的 IP 正则匹配规则:

^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$

import re 
def check_ip(address):
    match = re.match(r"^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})#34;, address)
    if bool(match) is False:
        print(f"IP 地址无效:{address}")
        return False
    return True

以上代码只能验证 IP 数字格式,需要结合前面代码,验证每个部分的值是否介于 0 和 255 之间。

import re 
def check_ip(address):
    match = re.match(r"^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})#34;, address)
    if bool(match) is False:
        print(f"IP 地址无效:{address}")
        return False
    ip_list = address.split(".")
    for i in ip_list:
        if int(i) < 0 or int(i) > 255:
            print(f"IP 地址无效:{address}")
            return False
    print(f"IP 地址有效:{address}")
    return True
              
check_ip("172.18.1.1")
check_ip("192.168.100.100")
check_ip("192.168.1.300")
# 输出:
IP 地址有效:172.18.1.1
IP 地址有效:192.168.100.100
IP 地址无效:192.168.1.300

检查 IP 的类型是 IPv4 还是 IPv6

检查 IP 是 IPv4 还是 IPv6 类型的简单方法是使用 ipaddress 模块。ipaddress.ip_address() 函数会创建一个对象,使用 isinstance() 函数来验证所创建对象的类型。

import ipaddress
def check_ip(address):
    try:
        ip = ipaddress.ip_address(address)

        if isinstance(ip, ipaddress.IPv4Address):
            print(f"{address} 是 IPv4 地址。")
        elif isinstance(ip, ipaddress.IPv6Address):
            print(f"{address} 是 IPv6 地址。")
    except ValueError:
        print(f"{address} 不是有效 IP 地址。")
check_ip("172.18.1.1")
check_ip("192.168.100.100")
check_ip("192.168.1.300")
check_ip("CDCD:910A:2222:5498:8475:1111:3900:2020")
# 输出:
172.18.1.1 是 IPv4 地址。
192.168.100.100 是 IPv4 地址。
192.168.1.300 不是有效 IP 地址。
CDCD:910A:2222:5498:8475:1111:3900:2020 是 IPv6 地址。

?

文章创作不易,如果您喜欢这篇文章,请关注、点赞并分享给朋友。如有意见和建议,请在评论中反馈!

?

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接