Python Nmap解析器
我正在使用位于()的用于python的nmap解析器。它提供了一个示例代码段,我在.py脚本中使用它来执行例行检查,从而自动化一些任务。然而,我在“第25行”上得到一个错误。有人能帮帮我吗Python Nmap解析器,python,nmap,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('-------------
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#
root@server:~/python/python#python MyApp.py
----------------------------------------------------
主机:127.0.0.1(本地主机)
州:上
----------
协议:地址
回溯(最近一次呼叫最后一次):
文件“MyApp.py”,第25行,在
打印('端口:%s\t状态:%s'(端口,nm[主机][协议][端口][状态])
TypeError:字符串索引必须是整数
root@damnation:~/python/python#
第25行是从底部算起的最后一行。”端口:%s\t状态:%s'(端口,nm[主机][协议][端口]”
任何建议都很好。谢谢。我发现在lport参数中指定proto可以使for bundled循环正确地看到dict中的字符串。下面是允许python nmap解析器正确工作的正确脚本。显然for bundle只适合TCP,但是另一个参数带有for bundle足以满足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('----------------------------------------------------')
import nmap#import nmap.py模块
nm=nmap.PortScanner()
主机='127.0.0.1'
nm.scan(主机“1-1024”)
nm.命令行()
nm.scaninfo()
对于nm中的主机。所有_主机():
打印(“-------------------------------------------------------------”)
打印('主机:%s(%s)'(主机,nm[Host].hostname())
打印('状态:%s'%nm[host].State())
打印(“-------------------------------------------------------------”)
对于nm[host]中的proto。所有_协议():
打印('------------')
打印('协议:%s'%proto)
lport=nm[host]['tcp'].keys()#Port是一个整数,因此可以使用str(Port)将其转换为第25行中的字符串,或者将print语句的格式更改为“%d”表示整数。Thnx,我尝试了您的两个建议,但仍然会遇到相同的问题。如果我完全删除“state”,则会得到此输出--->Port:80 state:{'product':u'lighttpd','state':u'open','version':u'1.4.28','name':u'http','conf':u'10','extrainfo':'','reason':u'syn-ack','cpe':''}如何print('port:'+port+'\tstate:'+nm[host][proto][port][state'])
?打印出来的是什么?我猜你的state对象不是字符串。嘿,hd1,它返回以下内容“文件“MyApp.py”,第22行,打印中('port:'+port+'\t状态:'+nm[host][proto][port][state'])类型错误:字符串索引必须是整数。相同错误。