在python中检查ip地址是否属于A、B和C类

问题描述 投票:0回答:2

如何在Python中确定IP地址的类别。我正在使用 python 的 ipaddress 模块。 以下是类定义

Class   Private Networks    Subnet Mask Address Range
A   10.0.0.0    255.0.0.0   10.0.0.0 - 10.255.255.255
B   172.16.0.0 - 172.31.0.0 255.240.0.0 172.16.0.0 - 172.31.255.255
C   192.168.0.0 255.255.0.0 192.168.0.0 - 192.168.255.255

给定一个IP,我如何检查它是否属于A、B或C类

python ip
2个回答
6
投票

IPv4

使用

ipaddress.IPv4Address
ipaddress.IPv4Network
类型。

from ipaddress import IPv4Address, IPv4Network

classA = IPv4Network(("10.0.0.0", "255.0.0.0"))  # or IPv4Network("10.0.0.0/8")
classB = IPv4Network(("172.16.0.0", "255.240.0.0"))  # or IPv4Network("172.16.0.0/12")
classC = IPv4Network(("192.168.0.0", "255.255.0.0"))  # or IPv4Network("192.168.0.0/16")

我给了你元组形式,因为你有网络地址和掩码,但如果你更喜欢 /X (CIDR 标准)后缀,它也接受它。其实还有一些额外的方法。

要使用它,您只需检查某个

IPv4Address
是否是
in
IPv4Network
,就好像您正在检查在
list
中找到的元素一样:

ip1 = IPv4Address("10.0.2.8")
ip2 = IPv4Address("172.18.76.25")
ip3 = IPv4Address("192.168.45.62")

ip1 in classA  # True
ip2 in classA  # False
ip3 in classA  # False

ip1 in classB  # False
ip2 in classB  # True
ip3 in classB  # False

ip1 in classC  # False
ip2 in classC  # False
ip3 in classC  # True

IPv6

在创建对象时使用

ipaddress.IPv6Address
ipaddress.IPv6Network
类型并更正 IPv6 ip 字符串。

通用

如果需要同时支持 IPv4 和 IPv6,可以使用

ipaddress.ip_address
ipaddress.ip_network
便利工厂函数,模块将根据字符串格式创建适当的 IPv4 或 IPv6 类。


来源:https://docs.python.org/3/library/ipaddress.html


0
投票
{code}

a='195.168.10.20' b=int(a[0:3]) 如果 b 在范围 (1,127) 内: print(a,'-->','A 类') elif b 在范围(128,191)中: print(a,'-->','B 类') elif b 在范围(192,223)中: print(a,'-->','C 类') elif b 在范围 (224,239) 内: print(a,'-->','D 类') elif b 在范围 (240,255) 内: print(a,'-->','E 类') 别的: print(a,'-->','IP 无效') {代码}

输出: 195.168.10.20 --> C 类 OUTPUT

© www.soinside.com 2019 - 2024. All rights reserved.