Python Nmap解析器

尘土飞扬的博肖夫

我正在使用位于(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行是从底部开始的倒数第二行。'端口:%s \ tstate:%s'%(端口,nm [host] [proto] [port]'。

任何建议都很好。谢谢你 。

尘土飞扬的博肖夫

我发现在lport参数中指定proto可使for bundled循环正确查看dict中的字符串。以下是允许python-nmap解析器正常运行的正确脚本。显然,for捆绑包仅适用于TCP,但是for捆绑包的另一个参数足以满足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('----------------------------------------------------')

我还不是Python专家,还得到了朋友的一些帮助(Tx AdriaanDL :))。但是,它确实可以解决nmap.py开发人员在其网站上遇到的此示例所遇到的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章