使用python nmap模块扫描之前扫描生成的主机

3 投票
1 回答
16796 浏览
提问于 2025-04-18 13:33

我一直在用Python命令行玩这个模块,想弄明白它是怎么工作的,同时也在思考我想写的脚本该怎么运作。我想先做一个简单的主机发现扫描,比如用-n -sP -PE,然后用all_hosts()这个函数生成实际端口扫描的主机列表。所以如果我这样做...

import nmap
nm = nmap.PortScanner()

nm.scan(hosts='XXX.XXX.XXX.X/24', arguments='-n -sP -PE')

那么nm.all_hosts()就能给我想要的结果,列出所有扫描到的活跃主机的简短列表。现在,我遇到的问题是怎么把这个列表传递到下一个扫描中。如果你只是这样做

hostlist = nm.all_hosts()
nm.scan(hosts=hostlist etc)

它就会抱怨说不能把列表用作主机参数。嗯,这个我能理解。所以我试着把它做成用逗号分隔的格式,这样它们就会显示成aaa.aaa.aaa.aaa, bbb.bbb.bbb.bbb等等,我这样做...

hostlist = ""
for item in nm.all_hosts():
    hostlist = item + ", " + hostlist

然后,直接输出主机列表,它看起来正是我想要的样子,但如果你试着把它放进主机参数里,它就会说“无法解析'alltheipslisted' 警告:没有指定目标,所以没有扫描到主机。”

有没有人有什么好主意可以解决这个问题?也许把IP地址输出到文件里,然后再从文件中读取?不过如果字符串不行的话,我觉得我可能会遇到同样的问题...

1 个回答

3

如果你去掉逗号,它就能正常工作了。多个主机之间只用空格分开。

使用示例:

import nmap
nm = nmap.PortScanner()

hostlist = ' '.join(nm.all_hosts())
nm.scan(hosts=hostlist, arguments='-n -sP -PE')

撰写回答