在Python程序中使用nmap库

时间:2016-05-20 12:12:36

标签: python nmap port-scanning

我有一个简单的Python程序,它使用nmap库进行端口扫描。

from optparse import OptionParser
import nmap  
from threading import * 

screenLock=Semaphore(value=1)

def nmapScan(thost,tport):
    x=nmap.PortScanner()
    x.scan(thost,tport)
    state=x[thost]['tcp'][int(tport)]['state']
    print "[*]" + thost + "tcp/"+tport+" "+state


def main():
    parser=OptionParser('usage %prog -H <target host> -p <target port>')
    parser.add_option('-H',dest='thost',type='string',help='specify target host')
    parser.add_option('-p',dest='tports',type='string',help='specify target port[s] seperated by comma')
    (options,args)=parser.parse_args()
    thost=options.thost
    tports=options.tports
    tports=tports.split(',')
    if (thost==None)|(tports==None):
        print parser.usage
        exit(0)
    for i in tports:
        nmapScan(thost,i)

main()

当我运行程序时,我收到以下错误。

akshayrajmacbookpro$ python nmapScanner.py -H 192.168.1.60 -p 80,443
Traceback (most recent call last):
  File "nmapScanner.py", line 28, in <module>
main()
File "nmapScanner.py", line 26, in main
nmapScan(thost,i)
File "nmapScanner.py", line 10, in nmapScan
state=x[thost]['tcp'][int(tport)]['state']
File "build/bdist.macosx-10.11-intel/egg/nmap/nmap.py", line 555, in __getitem__
KeyError: '192.168.1.60'

我尝试在命令行中使用url而不是ip。但我得到了同样的错误。作为Python的新手,我无法理解并解决这个问题。

2 个答案:

答案 0 :(得分:1)

x(nmap.PortScanner的实例)不包含这些键。为了能够迭代扫描结果,您可以这样做:

for host, result in x._scan_result['scan'].items():
    print "[*]" + thost + "tcp/" + tport + " " + result['status']['state']

如果您查看python-nmap的文档或源代码以查看其他有用信息是否可用,那将是最好的,例如正在侦听该端口的服务名称和版本。

此处有更多信息:https://bitbucket.org/xael/python-nmap/src/f368486a2cf12ce2bf3d5978614586e89c49c417/nmap/nmap.py?at=default&fileviewer=file-view-default#nmap.py-381

答案 1 :(得分:0)

主机在扫描结果中不存在&#34;键&#34;对于构成扫描数据抛出的数据的一部分的字典。在我看来,这可能是错误的原因。感谢