$ 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
's会更容易--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
此 shell 片段生成一个 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