从Python中获取IP地址和掩码长度的IP掩码

时间:2012-05-09 01:00:24

标签: python sockets networking ip-address subnet

以点分四位表示法给出IP地址,例如:
192.192.45.1
并且掩模长度通常为例如8,16,24,但可以是任何东西,即17。

有人可以提供python中的代码来计算子网掩码吗?我最好 可以将结果作为32位整数得到,这样很容易哈希,然后在需要打印时重新解释为点分四。我看到python有一个socket库,它基本上是unix socket api的包装器。我也看到它有函数inet_ntoa(), 但它返回某种数据包结构。我对Python结构库并不十分熟悉,所以我希望其他人会有一些想法。谢谢!

2 个答案:

答案 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'