我一直在直接从 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”警告:未指定目标,因此 0已扫描主机。
有没有人对如何着手有任何好的想法?也许转储 IP 然后从文件中提取它们?如果字符串不起作用,我似乎会遇到同样的问题......
请您参考如下方法:
如果您删除逗号,它将起作用。列出多个主机,它们之间只有一个空格。
使用示例:
import nmap
nm = nmap.PortScanner()
hostlist = ' '.join(nm.all_hosts())
nm.scan(hosts=hostlist, arguments='-n -sP -PE')
