
$ nmap -n -iR 0 -sL > RANDOM-IPS-TMP.txt
$ grep -o "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" RANDOM-IPS-TMP.txt |
egrep -v "10.*|172.[16-32].*|192.168.*|[224-255].*" > RANDOM-IPS.txt
egrep: Invalid range end
$
プライベートIPアドレス範囲とマルチキャストIPアドレス範囲外のランダムIPアドレスを生成する方法は?
答え1
正規表現の構文を間違って理解しました。 [16-32]
「16、17、...、または32と一致する」という意味ではありません。これは、「1、2、または6-3の範囲の文字と一致する」を意味します(有効な範囲ではないため、エラーが発生します)。
整数の範囲に一致する正規表現を作成できますが、複雑でエラーが発生しやすいです。あなたの場合は、nmap
'を使用する方が簡単です。--exclude
オプション不要な範囲を除外してください。これは、話す範囲を説明するより簡単な方法であるCIDR表記を理解しています。
nmap -n -iR 0 --exclude 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,224-255.-.-.- -sL >RANDOM-IPS.txt
ループバックブロック(127.0.0.0/8)については言及していませんが、おそらくこのブロックも除外する必要があります。
答え2
このシェルフラグメントはIPアドレスを生成します。
ip_address=$(dd if=/dev/urandom bs=4 count=1 2>/dev/null |
od -An -tu1 |
sed -e 's/^ *//' -e 's/ */./g')
満足できない場合は、もう一度やり直してください。
while
set $(dd if=/dev/urandom bs=4 count=1 2>/dev/null | od -An -tu1)
[ $1 -lt 224 ] &&
[ $1 -ne 10 ] &&
{ [ $1 -ne 192 ] || [ $2 -ne 168 ]; } &&
{ [ $1 -ne 172 ] || [ $2 -lt 16 ] || [ $2 -gt 31 ]; }
do :; done
ip_address=$1.$2.$3.$4