解析 nmap 输出以供 ncrack 使用

parse nmap output for ncrack to use

我想使用 NMAP 检测所有主机 运行正在使用 Telnet 和 SSH,即使它们没有使用默认端口。然后我想将 NMAP 的输出发送到一个文件,该文件定义了供 NCRACK 使用的非标准服务。
我 运行 使用 -sV 开关的 NMAP 来检测版本并得到类似的东西:

Nmap scan report for 192.168.1.1
Host is up (0.0019s latency).
Not shown: 996 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     Dropbear sshd 2015.67 (protocol 2.0)
23/tcp open  telnet?

Nmap scan report for 192.168.1.133
Host is up (0.0048s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE VERSION
2323/tcp open  telnet  Linux telnetd
4444/tcp open  ssh     (protocol 2.0)

我需要操纵此输出来创建这样的文件:

ssh://192.168.1.1:22
ssh://192.168.1.133:4444
telnet://192.168.1.1:23
telnet://192.168.1.133:2323

我知道使用 NMAP XML 输出和 xmllint 会有所帮助,但之后我就卡住了。

在此先感谢您的帮助。

nmap -sv | awk '/Nmap scan/ { ip= } /ssh/ { split(,arg,"/");print "ssh://"ip":"arg[1] } /telnet/ { split(,arg,"/");print "telnet://"ip":"arg[1] }'

检查 "Nmap scan" 的模式匹配,然后将 ip 地址存储在变量 ip 中。然后检查 ssh 或 telnet 的模式匹配,将第一个 space 分隔的数据分割成数组 arg。打印 arg 的第一个元素以及 ip 地址和 telnet 或 ssh。

输出:

 ssh://192.168.1.1:22
 telnet://192.168.1.1:23
 telnet://192.168.1.133:2323
 ssh://192.168.1.133:4444

您做的工作太多了:直接Ncrack can already parse Nmap's XML format,根据-sV检测到的服务名称处理每个打开的端口。

nmap -oX scan.xml -sV 192.168.1.0/24
ncrack -iX scan.xml