5

点線のクワッド表記のIPアドレスを指定すると、たとえば次のようになります
。192.192.45.1
マスクの長さは通常8、16、24ですが、17などの任意の値にすることができます。

誰かがサブネットマスクを計算するためにPythonでコードを提供できますか?できれば、結果を32ビット整数として取得できるので、ハッシュして、印刷に必要なときに点線のクワッドとして再解釈するのが簡単です。Pythonには、基本的にUNIXソケットAPIのラッパーであるソケットライブラリがあることがわかります。また、関数inet_ntoa()があることもわかりましたが、ある種のパケット構造体を返します。私はPython構造体ライブラリにあまり精通していないので、他の誰かがいくつかのアイデアを持っていることを望んでいました。ありがとう!

4

2 に答える 2

14

最も簡単な方法は、googleのipaddrモジュールを使用することです。以下は25ビットのマスクを想定していますが、あなたが言うように、それは何でもかまいません

Python2の場合

>>> # Use ipaddr in python 2.x
>>> import ipaddr
>>> mask = ipaddr.IPv4Network('192.192.45.1/25')
>>> mask.netmask
IPv4Address('255.255.255.128')
>>>

Python3の場合...

>>> # Use ipaddress in python 3.x
>>> import ipaddress
>>> mask = ipaddress.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>
于 2012-05-09T01:04:21.293 に答える
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'
于 2012-05-09T01:29:53.130 に答える