time nmap -n -iR 0 -sL | cut -d " " -f 5 | egrep -v "^10.*|^172.[16\-32].*|^192.168.*|^[224\-255].*" > RANDOM-IPS.txt
したがって、重要な部分は次のとおりです。
egrep -v "^10.*|^172.[16\-32].*|^192.168.*|^[224\-255].*"
尋ねる:これは良い正規表現ですか? /その後、すべての2^32 IPv4アドレスを作成し、プライベート/ブロードキャスト範囲を「grep -v」します。 /またはインターネットで利用可能なIPv4アドレスを生成するより良い方法はありますか?
答え1
単一のコマンドに正規表現を入力すると、通常は少し面倒です。これより良いのは、grep
次の利点を活用できることです。-f
オプション:
-f FILE, --file=FILE Obtain patterns from FILE, one per line. The empty file contains zero patterns, and therefore matches nothing. (-f is specified by POSIX.)
したがって、各行に特定のIP系列/範囲に一致する正規表現を含むファイルを作成します。その後、-f
このオプションを一緒に使用します-v
。
答え2
この回答は、任意のIPv4アドレスを生成するのではなく、プライベートネットワークの範囲に属するIPをフィルタリングする方法です10.0.0.0/8
。172.16.0.0/12
192.168.0.0/16
使用grepcidr
:
$ nmap -n -iR 0 -sL | cut -d " " -f 5 | grepcidr -v 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
しかし、参考にしてください。
特定の個人、マルチキャスト、または割り当てられていないアドレス範囲内のIPなど、不要なIPを自動的にスキップします。
(nmap
7.40マニュアルで約-iR
。)
答え3
私も同じ問題があります。 30分間準備した質問に対するPOSIXスタイルの回答は次のとおりです。
grep -Ev '10\.[0-9]+\.[0-9]+\.[0-9]+' | grep -Ev '172\.1[6-9]\.[0-9]+\.[0-9]+|172\.2[0-9]\.[0-9]+\.[0-9]+|172\.3[0-1]\.[0-9]+\.[0-9]+' | grep -Ev '192\.168\.[0-9]+\.[0-9]+'
これは、プライベートRFC1918アドレス空間の有効なIPアドレスのみを出力する必要があります。