我想以以下格式获取Nmap输出(如果可能,使用单行命令):
2001:4860:4860::8888:53
2001:4860:4860::8888:443
2001:4860:4860::8888:853
2001:4860:4860::8844:53
2001:4860:4860::8844:443
这是原始输出:
Nmap 7.80 scan initiated Thu Dec 3 17:04:38 2020 as: nmap -6 -p- -iL out.txt
Host: 2001:4860:4860::8888 (dns.google) Status: Up
Host: 2001:4860:4860::8888 (dns.google) Ports: 53/open/tcp//domain///, 443/open/tcp//https///, 853/open/tcp//domain-s///
Host: 2001:4860:4860::8844 (dns.google) Status: Up
Host: 2001:4860:4860::8844 (dns.google) Ports: 53/open/tcp//domain///, 443/open/tcp//https///
Nmap done at Thu Dec 3 17:05:31 2020 -- 2 IP addresses (2 hosts up) scanned in 52.90 seconds
nmap ... | awk '/^Host/ && /Ports/ { for (i=1;i<=NF;i++) { if (match($i,/open/)) { split($i,map,"/"); printf "%s:%s\n",$2,map[1] } } }'
在输出中搜索以Host开头并且还包含Port的行。循环浏览每个以空格分隔的字段,并使用match函数检查该字段中的打开状态。如果存在匹配项,请使用split函数将字段拆分为一个数组映射,并使用数组的第一个索引作为端口。打印第二个定界字段以及端口。