12

重複の可能性:
PythonのネットワークにIPが存在するかどうかを確認するにはどうすればよいですか?

PythonでサブネットをIPアドレスに一致させる簡単な方法は何ですか?IPアドレスがサブネットにある場合はそれを選択できますか?

前もって感謝します。

4

2 に答える 2

25

Python 3.3以降では、ipaddressモジュールを使用できます。

>>> import ipaddress
>>> ipaddress.ip_address('192.0.43.10') in ipaddress.ip_network('192.0.0.0/16')
True

Pythonのインストールが3.3より古い場合は、このバックポートを使用できます。


この方法で多くの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
于 2012-03-15T09:44:54.070 に答える
2

特定のIPについて、プレフィックスの長いリストからプレフィックスを検索する場合は、最長プレフィックス一致を実装できます。最初にプレフィックスのリストからプレフィックスツリーを構築し、その後、ツリーをトラバースして、プレフィックスに一致する最も遠いリーフを探します。

怖いように聞こえますが、それほど悪くはありません:)

于 2012-03-15T10:08:59.830 に答える