nmap只能显示打开特定端口的主机吗?


18

可以nmap列出局域网中同时打开SSH和HTTP的所有主机吗?为此,我可以运行以下命令:

nmap 192.168.1.1-254 -p22,80 --open

但是,此列表列出了所有列表端口都打开的主机,而我希望所有端口都打开的主机。另外,输出非常详细:

# nmap 192.168.1.1-254 -p22,80 --open

Starting Nmap 6.47 ( http://nmap.org ) at 2015-12-31 10:14 EST
Nmap scan report for Wireless_Broadband_Router.home (192.168.1.1)
Host is up (0.0016s latency).
Not shown: 1 closed port
PORT   STATE SERVICE
80/tcp open  http

Nmap scan report for new-host-2.home (192.168.1.16)
Host is up (0.013s latency).
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 254 IP addresses (7 hosts up) scanned in 3.78 seconds

我正在寻找的是简单的输出:

192.168.1.16

因为上述主机是所有端口都打开的唯一主机。

我当然可以对输出进行后处理,但是我不想依赖于nmap的输出格式,如果可以的话,我宁愿让nmap来做。


如果只想测试一个端口,则'nmap -p 22 | grep -B3打开”是一种简单的方法。
卢西亚诺·安德列斯·马蒂尼

Answers:


10

在Nmap中没有办法做到这一点,但是您对不希望“依赖于nmap的输出格式”的评论让我指出Nmap具有两种稳定的输出格式供机器可读解析。较旧的是Grepable输出(-oG,它可以很好地用于perl,awk和grep的处理,但是缺少一些更高级的输出(例如NSE脚本输出,端口原因,traceroute等)。更加完整的格式是XML输出(-oX,但对于您的目的而言可能会显得有些过时。

您可以将这些输出保存到带有-oG-oX或的文件中-oA(两种格式加上“常规”文本输出),也可以将其中一个直接发送到stdout:nmap 192.168.1.1-254-p22,80 --open -oG - | awk '/22\/open.*80\/open/{print $2}'


1
太完美了,正是我所寻找的-oG -
布莱恩

2

还考虑一下这种awk单线:

nmap -Pn -oG -p22,80,443,445 - 100.100.100.100 | awk '/open/{ s = ""; for (i = 5; i <= NF-4; i++) s = s substr($i,1,length($i)-4) "\n"; print $2 " " $3 "\n" s}'

它将打印所有具有所有指定打开端口的主机,如下所示:

 100.100.100.100 (some-domain.com)
 22/open/tcp//ssh
 80/open/tcp//http
 443/open/tcp//microsoft-ds
 445/open/tcp//https-alt

测试之后,您必须添加-p。命令行中的“-”在-oG之后
韦恩(Wayne)

1

尝试以下命令:

nmap --open -p 22,80 192.168.1.1-254 -oG - | grep "/open" | awk '{ print $2 }'

这将扫描您范围内的端口,并以可抓取的格式通过管道输出以寻找打开的端口,然后打印符合任何条件的IP地址。


欢迎来到U&L!请注意,大约3年前接受的答案具有一个更简单的版本,其中使用awk进行grep 打印。
杰夫·谢勒

1
我认为我的更好,因为除了端口选项之外,您不必为更多端口添加额外的数据。他要求您也通过每个端口更新awk,这是不必要的冗长。
马歇尔·哈伦贝克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.