使用 ipaddress 模块判断给定 IP 地址是公网还是私网的 Python 程序


在计算机网络中,IP 地址用于唯一标识连接到网络的设备。IP 地址可以分为公网和私网。

公网 IP 地址分配给直接连接到互联网的设备。它们是全局可路由的,可以从互联网上的任何地方访问。

私网 IP 地址则用于私有网络,例如局域网 (LAN) 或家庭网络。这些 IP 地址无法直接从互联网访问。私网 IP 地址由互联网工程任务组 (IETF) 指定的某些保留地址范围定义。这允许私有网络中的多个设备使用相同的 IP 地址范围而不会发生冲突。

要以编程方式确定 IP 地址是公网还是私网,我们可以在 Python 中使用ipaddress 模块。此模块提供了用于处理 IP 地址的类和函数。

通过从给定的 IP 地址创建 ipaddress 对象,我们可以使用 is_private 属性检查它是否属于保留的私网 IP 地址范围。如果 IP 地址在私网范围内,则将其视为私网 IP 地址。否则,将其视为公网 IP 地址。

在本文中,我们将讨论如何使用 ipaddress 模块来判断给定的 IP 地址是公网还是私网。

方法

以下是使用 Python 中的 ipaddress 模块确定给定 IP 地址是公网还是私网的步骤 -

  • 导入 ipaddress 模块

  • 创建一个函数,该函数以 IP 地址作为输入参数。

  • 创建 ipaddress 对象:在函数内部,尝试使用提供的 IP 地址创建一个 ipaddress 对象。这可以通过调用 ipaddress.ip_address(ip) 来实现。

  • 检查 IP 地址是否为私网:使用 ipaddress 对象的 is_private 属性来确定 IP 地址是否属于保留的私网 IP 地址范围。如果 is_private 为 True,则 IP 地址为私网。否则,它为公网。

  • 处理异常:为了处理提供无效 IP 地址的情况,请将 ipaddress 对象的创建包装在 try-except 块中。如果引发了 ValueError,则捕获异常并相应地处理它。返回“无效 IP”消息以指示提供的 IP 地址无效。

  • 返回结果。

示例

在此示例中,我们将使用 ipaddress.ip_address 函数来判断给定的 IP 地址是公网还是私网。

import ipaddress

def check_ip_address(ip):
    return ipaddress.ip_address(ip).is_private

ip_address = '192.168.0.1'
is_private = check_ip_address(ip_address)
print("{} is Private IP:".format(ip_address), is_private)

输出

192.168.0.1 is Private IP: True

示例

在此示例中,如果提供的 IP 地址无效且无法用于创建 ipaddress 对象,则会引发 ValueError。

为了处理这种情况,我们在代码中包含了一个 try-except 块。如果在尝试创建 ip_obj 时引发了 ValueError,则程序会捕获异常并返回“无效 IP”以指示提供的 IP 地址无效。

import ipaddress

def check_ip_address(ip):
    try:
        ip_obj = ipaddress.ip_address(ip)
        if ip_obj.is_private:
            return "Private IP"
        else:
            return "Public IP"
    except ValueError:
        return "Invalid IP"

# Define ip_address
ip_address = ['127.0.0.1', '10.98.76.6', '17.5.7.8', '192.168.0.1', "8.8.8.8", "10.0.0.1", '172.16.0.0']
for ip in ip_address:
    result = check_ip_address(ip)
    print("IP Address:", ip)
    print("Result:", result)
    print()

输出

IP Address: 127.0.0.1
Result: Private IP

IP Address: 10.98.76.6
Result: Private IP

IP Address: 17.5.7.8
Result: Public IP

IP Address: 192.168.0.1
Result: Private IP

IP Address: 8.8.8.8
Result: Public IP

IP Address: 10.0.0.1
Result: Private IP

IP Address: 172.16.0.0
Result: Private IP

更新于: 2023 年 8 月 29 日

1K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.