Grep nmap 输出

Grep the nmap output

我已经将我的 nmap 结果输出到一个名为 test.txt 的文件中,它看起来像这样:

Nmap scan report for 192.168.1.5
Host is up (0.13s latency).
PORT    STATE  SERVICE VERSION
23/tcp   open  telnet  Linux telnetd
--
Nmap scan report for 192.168.1.7
Host is up (0.13s latency).
PORT    STATE SERVICE    VERSION
80/tcp  open  http       Popper
--
Nmap scan report for 192.168.1.20
Host is up (0.13s latency).
PORT    STATE SERVICE VERSION
110/tcp open  pop3    Dove

我想使用 grep 和管道从我的终端中的文件输出结果,以格式显示结果:IP 地址后跟打开的端口,如下所示:

192.168.10.2
80
223
53
192.168.10.7
80
223

我会执行以下操作:

  1. 获取正则表达式以匹配 nmap 输出的 ip 和端口。您可以利用两者的位置,即端口位于行的开头 (^) 并以“/”字符结尾,而 ip 是行中的最后一项 ($).
  2. 使用 grep -o 查找任何正则表达式(查看正则表达式 (|) 上的 OR 运算符)。这会将输出减少到仅匹配项。

你可能想要:

cat test.txt | sed 's/Nmap scan report for //' | sed '/Host is/d' | sed '/Not shown/d' | sed '/All/d' | sed '/PORT /d' | cut -f1 -d"/" | sed '/^$/d' | sed '/--/d'

对于nmap -F 192.168.0.1/24 > test.txt

cat test.txt | tail -n+3 | sed '/Nmap done/d' | awk 'NR>1{print l}{l=[=11=]}' | sed 's/Nmap scan report for //' | sed '/Host is/d' | sed '/Not shown/d' | sed '/All/d' | sed '/PORT /d' | cut -f1 -d"/" | sed '/^$/d'

笑话。 没有意义...使用 nmap 和 XML 输出 -oX
阅读:https://nmap.org/book/output-formats-xml-output.html