我正在尝试将nmap
输出作为一个表或至少是直列。我使用这个命令:
$ sudo nmap -sn 192.168.103.0/24 \
| awk '/Nmap scan report for/{printf $5;}/MAC Address:/{print ","substr($0, index($0,$3)) }' \
| sort -t . -k 4,4n
然而,我想让它向我展示:
ip mac address hostname
没有()
的ip或主机名,但我无法做到这一点。
发布于 2020-05-10 21:53:54
如果您拥有出色的xmlstarlet
,您可以解析来自nmap
的XML输出,并生成几乎任何您想要的表。
nmap -sn -oX - 192.168.1.0/24 |
xmlstarlet sel -t \
-m '/nmaprun/host[status/@state="up"]' \
-v 'address[@addrtype="ipv4"]/@addr' -o 示例XML输出如下所示
...
...
示例处理输出,只显示响应nmap ping请求的四个设备192.168.1.6 01:55:1E:C3:68:A3 host6.roaima.co.uk
192.168.1.8 92:66:9B:20:F1:17
192.168.1.15 53:77:5E:EA:FD:03 client15.roaima.co.uk
192.168.1.31 C4:88:FB:6C:64:AExmlstarlet工具使用XPath来选择XML和属性,要么匹配它们(-m),要么提取值(-v)。\t' \
-v 'address[@addrtype="mac"]/@addr' -o 示例XML输出如下所示A3示例处理输出,只显示响应D4 ping请求的四个设备A5D6工具使用XPath来选择XML和属性,要么匹配它们(D7),要么提取值(D8)。\t' \
-v 'hostnames/hostname[1]/@name' -n示例XML输出如下所示A3示例处理输出,只显示响应D4 ping请求的四个设备A5D6工具使用XPath来选择XML和属性,要么匹配它们(D7),要么提取值(D8)。
发布于 2020-05-10 22:16:45
如果您真的想使用awk
,这个脚本可能会有所帮助。
nmap -sn 192.168.1.0/24 |
awk '
function out() { if (state=="up") { printf "%s\t%s\t%s\n",ip,mac,name; ip=""; mac=""; name=""; state="" } }
/Nmap scan report/ { out(); name=$5; ip = substr($6,2,length($6)-2); if (ip=="") { ip=name; name="" } }
/Host is/ { state=$3 }
/MAC Address/ { mac=$3 }
END { out() }
'
如果你想要的话,可以把它卷成一行。
示例输出,仅显示响应nmap
ping请求的四个设备
192.168.1.6 01:55:1E:C3:68:A3 host6.roaima.co.uk
192.168.1.8 92:66:9B:20:F1:17
192.168.1.15 53:77:5E:EA:FD:03 client15.roaima.co.uk
192.168.1.31 C4:88:FB:6C:64:AE
https://unix.stackexchange.com/questions/585775
复制相似问题