簡體   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