以点分四位表示法给出IP地址,例如:
192.192.45.1
并且掩模长度通常为例如8,16,24,但可以是任何东西,即17。
有人可以提供python中的代码来计算子网掩码吗?我最好 可以将结果作为32位整数得到,这样很容易哈希,然后在需要打印时重新解释为点分四。我看到python有一个socket库,它基本上是unix socket api的包装器。我也看到它有函数inet_ntoa(), 但它返回某种数据包结构。我对Python结构库并不十分熟悉,所以我希望其他人会有一些想法。谢谢!
答案 0 :(得分:13)
最简单的方法是使用谷歌的ipaddr模块。我假设下面是25位掩码,但正如你所说,它可能是任何东西
>>> import ipaddr
>>> mask = ipaddr.IPv4Network('192.192.45.1/25')
>>> mask.netmask
IPv4Address('255.255.255.128')
>>>
该模块在处理IPv4和IPv6地址方面非常有效......其中包含一些其他功能的示例......
>>> ## Subnet number?
>>> mask.network
IPv4Address('192.192.45.0')
>>>
>>> ## RFC 1918 space?
>>> mask.is_private
False
>>>
>> ## The subnet broadcast address
>>> mask.broadcast
IPv4Address('192.192.45.127')
>>> mask.iterhosts()
<generator object iterhosts at 0xb72b3f2c>
答案 1 :(得分:7)
您可以像这样计算掩码的32位值
(1<<32) - (1<<32>>mask_length)
例如
>>> import socket, struct
>>> mask_length = 24
>>> mask = (1<<32) - (1<<32>>mask_length)
>>> socket.inet_ntoa(struct.pack(">L", mask))
'255.255.255.0'