1: 要件の説明
最近、仕事で 7,000 個を超える IP アドレス (マスクありとマスクなし) をマージして、マージによって IP エントリの数を削減できるかどうかを確認する必要があります。これには、たとえば次のような IP とマスクの計算が含まれます。
192.168.1.0/25
192.168.1.128/29
192.168.1.136/30
192.168.1.140/32
192.168.1.141/32
192.168.1.142/31
192.168.1.144/28 192。168.1.160 /27
192.168.1.192/29
192.168.1.200/30 192.168.1.204/31 192.168.1.206/32 192.168.1.207/32 192.168.1.208/28 192.168.1.224/27
上記の IP については、まず展開して、その IP アドレス範囲を直感的に確認できます。
192.168.1.0-192.168.1.127
192.168.1.128-192.168.1.135 192.168.1.136-192.168.1.139
192.168.1.140
192.168.1.141
192.168.1.1 42-192.168.1.143
192.168.1.144-192.168.1.159 192.168.1.160-192.168.1.191 192.168。 1.192-192.168.1.199 192.168.1.200-192.168.1.203 192.168.1.204-192.168.1.205 192.168.1.206 192.168.1.207 192.168.1.208-192 .168.1.223 192.168.1.224-192.168.1.255
ここにアドレスを展開する方法を挿入します。展開するには IPy モジュールを使用します。
import os
import IPy
from ip_info import IPList
for ip in IPList:
ipIns = IPy.IP(ip)
print(ipIns.strFullsize(3))
最初にすべてのアドレスをリストに読み込み、次にリストを走査し、strFullsize メソッドを使用してそれを展開します (ここでは詳しく紹介しません)。興味のある学生は自分でコードのデバッグに進むことができます
上記のアドレスから、すべてのアドレスの組み合わせは 192.168.1.0 ~ 192.168.1.255 であることがわかります。192.168.1.0/24 を直接使用して、上記のすべてのエントリを表すことができます。エントリ数が少ない場合は手計算で結合できますが、ipエントリが数万件ある場合は手計算は現実的ではありません。
github には IP マージおよび分解ツール cidr-merger があり、これは私たちのニーズを非常によく満たします。
リリースバージョンには Linux バージョンと Windows バージョンがあり、必要に応じて対応するバージョンをダウンロードできます。ここではWindowsで使用しています。
2: ツールの使用
このツールを試してみましょう
1. ツールの使用方法のヘルプを表示する
2. IPセグメントがマスク形式に分解される
3. IPセグメントのマージ
順序を間違えて重複した IP を追加して、ツールが正しく処理できるかどうかを確認します。
192.168.1.136/30
192.168.1.140/32
192.168.1.0/25
192.168.1.128/29
192.168.1.140/32
このツールが次のことを処理できることがわかります。
次に、一番上の要件に戻り、IP を ip.txt にコピーし、ツールで実行して確認します。
1 つにマージされていることがわかります。-r パラメーターを使用して IP 範囲の形式で出力することも、-s パラメーターを使用してマスクの形式で出力することもできます。さらに結果を入力すると、出力結果は次のようになります。リダイレクト シンボルはファイルに出力され、-o パラメータも渡すことができるため、後続のプログラム処理に便利です。
4. 公式サイトの例
上記のパラメータを見ると、このツールには他にも多くの方法があることがわかりますので、ここでは 1 つずつ例を示しませんが、一部のパートナーは github にアクセスできない可能性があるため、公式の使用例を投稿します。ウェブサイトはこちら。
$ echo '1.0.0.1-223.255.255.254' | cidr-merger > 1.0.0.1 1.0.0.2/31 1.0.0.4/30 1.0.0.8/29 ...... 1.128.0.0/9 2.0.0.0/7 4.0.0.0/6 8.0.0.0/5 16.0。 0.0/4 32.0.0.0/3 64.0.0.0/2 128.0.0.0/2 192.0.0.0/4 208.0.0.0/5 216.0.0.0/6 220.0.0.0/7 222.0.0.0/8 223.0.0.0/9 .. .... 223.255.255.240/29 223.255.255.248/30 223.255.255.252/31 223.255.255.254 $ echo '1.1.1.0' > a; \ echo '1.1.1.1' > b; \ echo '1.1.1.2/31' > c; \ エコー '1.1.1.3-1.1.1.7' > d; \ cidr-merger -o マージ abcd; \ 猫のマージ; \ rm abcd merge > 1.1.1.0/29 $ wget -O- "https://ftp.apnic.net/stats/apnic/`TZ=UTC date +%Y`/delegated-apnic-`TZ=UTC+24日付 +%Y%m%d`.gz" | \ gzip -d | awk -F\| '!/^\s*(#.*)?$/&&/CN\|ipv4/{print $4 "/" 32-log($5)/log(2)}' | \ cidr-merger -eo/etc/chinadns_chnroute.txt # ルーターの IP を更新 $ # ^ e: 入力が空の場合はエラーを意味します $ echo 'fe80::/10' | cidr-merger -r > fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff $ echo '1.1.1.0' > a; エコー '1.1.1.1' | cidr-merger - a; rm a $ # ^ -: 標準入力 > 1.1.1 を意味します。
-r と -s の出力の比較
$ エコー '1.1.1.1/32' | cidr-merger > 1.1.1.1 $ echo '1.1.1.1/32' | cidr-merger -s > 1.1.1.1/32 $ echo '1.1.1.1/32' | cidr-merger -r > 1.1.1.1 $ echo '1.1.1.1/32' | cidr-merger -rs > 1.1.1.1-1.1.1.1
Null ポリシーの比較
$ cidr-merger -o txt /dev/null # `txt` という名前の空のファイルが作成されます。 $ cidr-merger -ko txt /dev/null # ファイルは作成されず、このプログラムはコード 0 で終了します $ # ^ `cat /dev/null | と同じです cidr-merger --skip-empty --output txt` $ cidr-merger -eo txt /dev/null # ファイルは作成されず、このプログラムはゼロ以外のコードで終了します $ # ^ `cat /dev/null | と同じです cidr-merger --error-if-empty --output txt` $ # インターネットからファイルをダウンロードしてファイルに書き込む場合、オプション `-e` が役立つ可能性があります $ # 出力を次のようなファイルにリダイレクトしても違いはありません次のように $ cat /dev/null | cidr-merger -e > txt # ファイル `txt` は作成されますが、このプログラムはゼロ以外のコードで終了します
小規模パートナーの便宜を図るため、CSDN にアップロードされています: https://mp.csdn.net/mp_download/manage/download/UpDetailed
将来的には、時間があれば、視覚化を通じてこのツールの機能を示す視覚化ツールを設計したいと考えています。