PythonでIPがネットワーク内にあるかどうかを確認するにはどうすればよいですか? 質問する

PythonでIPがネットワーク内にあるかどうかを確認するにはどうすればよいですか? 質問する

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

おすすめ記事