如何“grep -v”私有/广播 IPv4 地址?

如何“grep -v”私有/广播 IPv4 地址?
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's-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 地址,而是关于如何过滤掉属于专用网络范围10.0.0.0/8172.16.0.0/12和 的IP 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。

(来自nmap7.40手册,大约-iR

答案3

我有同样的问题。这是我刚刚花了半个小时准备的这个问题的 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 地址。

相关内容