从 nmap 返回的结果中返回多个正则表达式匹配组

从 nmap 返回的结果中返回多个正则表达式匹配组

我有一个 nmap 脚本,可以在 IP 列表上运行开放中继测试。最初,如果发现主机具有命令中指定端口的开放端口,我必须仅返回主机名和 IP,但这似乎不准确,因为开放端口并不意味着 NSE 测试是成功的。所以,我想在一行中返回主机名和 IP + NSE 结果。

我使用的命令是:

nmap --script smtp-open-relay.nse --open -p 25,2525,587,465,2526 -iL ./short_servers_list.txt

该命令的示例输出为:

*从 Nmap 6.40 开始(http://nmap.org) 于 2017-08-08 07:25 PDT

Nmap 扫描报告foo01.bar.com (10.10.10.1)

主机已启动(0.0020 秒延迟)。

未显示:3 个封闭端口

港口国服务

25/tcp 打开smtp

|_smtp-open-relay:服务器是开放中继(5/16 测试)

2526/tcp 开放未知

Nmap 扫描报告foo02.bar.com (10.10.10.2)

主机已启动(0.082 秒延迟)。

未显示:4 个封闭端口

港口国服务

25/tcp 打开smtp

|_smtp-open-relay:SMTP EHLO nmap.scanme.org:接收数据失败:连接已关闭

Nmap 完成:2.16 秒内扫描 10 个 IP 地址(最多 6 个主机)*

我需要输出以下内容:

foo01.bar.com (10.10.10.1) smtp-open-relay:服务器是开放中继(5/16 测试)

foo02.bar.com (10.10.10.2) smtp-open-relay: SMTP EHLO nmap.scanme.org: 接收失败

我如何使用常见的 bash 工具/命令(grep 或 sed 等)来做到这一点?

答案1

awk

nmap --script smtp-open-relay.nse --open -p 25,2525,587,465,2526 -iL ./short_servers_list.txt \
| awk '/^ *Nmap scan report/{ sub(/^ *Nmap scan report for */, "", $0); printf "%s ",$0 }
       /_smtp-open-relay/{ sub(/^ *\|_/, "", $0); print $0 }'

相关内容