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/8
、172.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。
(来自nmap
7.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 地址。