使用 Python 验证 IP 地址

liftword1周前 (06-23)技术文章4

要使用 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 地址。

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

相关文章

避免踩坑:教你用Python优雅的获取本机IP方法!(含实际案例)

今天为大家带来的内容是:避免踩坑:教你用Python优雅的获取本机IP方法!(含实际案例)见过很多获取服务器本地IP的代码,个人觉得都不是很好,例如以下这些:不推荐:靠猜测去获取本地IP方法嗨喽:正在...

使用Python获取IP地址等位置信息

我们在编程时,有时需要获取IP地址等位置信息,比如当你想向网站的用户发送登录信息时。在本文中,我们将了解如何使用Python获取IP地址。为了获取IP地址,我们需要使用Python中的requests...

python 如何判断字符串为IP地址

要判断一个字符串是否为IP地址,可以使用Python内置的ipaddress模块。该模块提供了一些类来处理IP地址和网络。使用ipaddress.IPv4Address和ipaddress.IPv6A...

用python实现域名资产监控

应用场景域名资产监控,通过输入一个主域名,找到该域名对应的ip地址所在的服务器的端口开闭情况。通过定期做这样的监控,有助于让自己知道自己的资产的整体暴露面情况。所需要具备的前缀技能python的简单使...

一款功能强大的 IP 查询工具

Fav-upFav-up 是一款功能强大的IP查询工具,该工具可以通过Shodan和Favicon(网站图标)来帮助研究人员查询目标服务或设备的真实IP地址。工具安装首先,该工具需要本地设备安装并部署...