繁体   English   中英

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

[英]Get IP Mask from IP Address and Mask Length in Python

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

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

最简单的方法是使用谷歌的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>

您可以像这样计算掩码的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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM