Warm tip: This article is reproduced from serverfault.com, please click

Clean Nmap output [IP:Port]

发布于 2020-12-03 18:10:38

I would like to obtain the Nmap output in the following format (if possible, with a one-line command):

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

Here is the original output:

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
Questioner
mikelakers
Viewed
0
Raman Sailopal 2020-12-04 03:13:13
nmap ... | awk '/^Host/ && /Ports/ { for (i=1;i<=NF;i++) { if (match($i,/open/)) { split($i,map,"/"); printf "%s:%s\n",$2,map[1] } } }'

Search the output for lines starting with Host and also containing Port. Loop through each space delimited field and check for open in the field using the match function. If there is a match, split the field into an array map using the split function and use the first index of the array as the port. Print the second delimited field along with the port.