Python Nmap解析器

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('-------------

我正在使用位于()的用于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# 
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'])类型错误:字符串索引必须是整数。相同错误。