我一直在尝试让python-nmap将ip地址列表作为输入并输出已启动的主机列表。但是,这会产生一个空列表。
def scan(registered_hosts, port):
hosts_up = []
nmScan = nm.scan(' '.join(registered_hosts))
for host in nm.all_hosts():
if nm[host]['tcp'][port]['state'] == 'open':
hosts_up.append({
'host': host,
'url': 'http://%s:%s' % (host, str(port)),
'hostname': nm[host].hostname()
})
return hosts_up
函数的输入是ip的列表(即['192.168.0.1', '192.168.0.2']
,在我用空格加入之后,我将它作为参数传递给nm.scan()
函数。我至少知道其中一个列出的地址已启动,但该命令返回一个空列表。有什么想法在这里发生了什么?
答案 0 :(得分:1)
您的代码存在一些问题:
因此,固定代码应为:
def scan(registered_hosts, port):
hosts_up = []
nm = nmap.PortScanner()
for host in registered_hosts:
scan_result = nm.scan(hosts=host, ports=port)
if scan_result['scan'].get(host, {}).get('tcp', {}).get(int(port), {}).get('state', '') == 'open':
hosts_up.append({
'host': host,
'url': 'http://%s:%s' % (host, str(port)),
'hostname': nm[host].hostname()
})
return hosts_up
可悲的是,如果对一个序列不感兴趣,这个lib似乎与多个ips完全同步。因此,如果您正在寻找异步解决方案,您应该自己构建一个:(
请带上一点点代码:它没有经过测试。