如何生成随机IP地址

如何生成随机IP地址
$ 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

相关内容