次のIPアドレスのリストがあります。
10.10.0.0
10.10.0.1
10.10.0.2
...
10.10.0.255
172.171.0.5
...
172.171.0.67
これらのリストを取得し、そのIPアドレスの最小CIDR表現を計算するためのツールはありますか?
たとえば、上記の例では、次のような出力を取得したいと思います。
10.10.0.0/24
172.171.0.5/32
172.171.0.6/31
172.171.0.8/29
172.171.0.16/28
172.171.0.32/27
172.171.0.64/30
編集:明確にするために、「最小CIDR表現」は、私の入力ファイルのすべてのIPアドレスを含む最小のCIDR IPアドレスのセットです。
ベストアンサー1
組み込みPythonモジュールの使用IPアドレス@ABが提案しましたコメントこれを提案する郵便はがき。
誰でもアドレス範囲の要約(開始と終了がある)または住所を折る(リスト含む)を使用できます。
この場合、後者はより便利です。
import sys
import ipaddress
data = open(sys.argv[1],'r').read().splitlines()
ips = [ipaddress.IPv4Address(line) for line in data]
print('\n'.join([ip.with_prefixlen for ip in ipaddress.collapse_addresses(ips)]))
使用法および出力:
$ python3 cidr.py file
10.10.0.0/24
172.171.0.5/32
172.171.0.6/31
172.171.0.8/29
172.171.0.16/28
172.171.0.32/27
172.171.0.64/30