我正在使用位于(http://xael.org/norman/python/python-nmap/)的python的nmap解析器。它提供了我在.py脚本中使用的示例代码片段,以便执行例行检查,自动执行某些任务。但是我在“第25行”上收到错误。有人可以帮帮我吗..?
import nmap
nm = nmap.PortScanner()
nm.scan('127.0.0.1', '22-2223')
nm.command_line()
nm.scaninfo()
for host in nm.all_hosts():
print('----------------------------------------------------')
print('Host : %s (%s)' % (host, nm[host].
print('State : %s' % nm[host].state())
for proto in nm[host].all_protocols():
print('----------')
print('Protocol : %s' % proto)
lport = nm[host][proto].keys()
lport.sort()
for port in lport:
print ('port : %s\tstate : %s' % (port, nm[host][proto][port]['state']))
print('----------------------------------------------------')
错误下面:
root@server:~/python/python# python MyApp.py
----------------------------------------------------
Host : 127.0.0.1 (localhost)
State : up
----------
Protocol : addresses
Traceback (most recent call last):
File "MyApp.py", line 25, in <module>
print ('port : %s\tstate : %s' % (port, nm[host][proto][port]['state']))
TypeError: string indices must be integers
root@damnation:~/python/python#
第25行,是从底部开始的第二个打印行。 'port:%s \ tstate:%s'%(port,nm [host] [proto] [port]'。
任何建议都会很棒。谢谢 。
答案 0 :(得分:1)
我发现在lport param中指定proto使得for bundle循环能够正确地看到dict中的字符串。下面是允许python-nmap解析器正常工作的正确脚本。显然,for bundle只适用于TCP,但是另一个用于bundle的params就足以满足UDP要求。
import nmap # import nmap.py module
nm = nmap.PortScanner()
host = '127.0.0.1'
nm.scan(host, '1-1024')
nm.command_line()
nm.scaninfo()
for host in nm.all_hosts():
print('----------------------------------------------------')
print('Host : %s (%s)' % (host, nm[host].hostname()))
print('State : %s' % nm[host].state())
print('----------------------------------------------------')
for proto in nm[host].all_protocols():
print('----------')
print('Protocol : %s' % proto)
lport = nm[host]['tcp'].keys() #<------ This 'proto' was changed from the [proto] to the ['tcp'].
lport.sort()
for port in lport:
print('----------------------------------------------------')
print('port : %s\tstate : %s' % (port, nm[host][proto][port]['state']))
print('----------------------------------------------------')
我不是蟒蛇专家(还)并得到了朋友的帮助(Tx AdriaanDL :))。然而,它确实解决了我在这个样本中遇到的问题,nmap.py开发人员在他们的网站上有这个问题。