IP アドレス (たとえば 192.168.0.1) が与えられた場合、それがネットワーク (たとえば 192.168.0.0/24) 内にあるかどうかを Python で確認するにはどうすればよいでしょうか?
Python には IP アドレスを操作するための一般的なツールがありますか? ホスト検索、IP アドレスから int、ネットマスク付きネットワーク アドレスから int などでしょうか? できれば 2.5 の標準 Python ライブラリにあるといいのですが。
ベストアンサー1
使用IPアドレス(3.3以降の標準ライブラリ、PyPi 2.6/2.7用):
>>> import ipaddress
>>> ipaddress.ip_address('192.168.0.1') in ipaddress.ip_network('192.168.0.0/24')
True
評価したい場合多くIPアドレスをこのように設定する場合は、ネットマスクを事前に計算しておくと良いでしょう。
n = ipaddress.ip_network('192.0.0.0/16')
netw = int(n.network_address)
mask = int(n.netmask)
次に、各アドレスについて、次のいずれかの方法でバイナリ表現を計算します。
a = int(ipaddress.ip_address('192.0.43.10'))
a = struct.unpack('!I', socket.inet_pton(socket.AF_INET, '192.0.43.10'))[0]
a = struct.unpack('!I', socket.inet_aton('192.0.43.10'))[0] # IPv4 only
最後に、次の点を簡単に確認できます。
in_network = (a & mask) == netw