在 Python 程序中使用 nmap 库
Using nmap library in Python program
我有一个简单的 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 的新手,我无法理解和解决这个问题。
x
(nmap.PortScanner 的实例)不包含这些键。为了能够迭代扫描结果,您可以这样做:
for host, result in x._scan_result['scan'].items():
print "[*]" + thost + "tcp/" + tport + " " + result['status']['state']
最好查看 python-nmap 的文档或源代码,看看还有哪些有用的信息,例如在该端口上侦听的服务名称和版本。
扫描结果中不存在作为扫描数据抛出的数据的一部分的字典的"Key"主机。在我看来,这可能是错误的原因。谢谢
我有一个简单的 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 的新手,我无法理解和解决这个问题。
x
(nmap.PortScanner 的实例)不包含这些键。为了能够迭代扫描结果,您可以这样做:
for host, result in x._scan_result['scan'].items():
print "[*]" + thost + "tcp/" + tport + " " + result['status']['state']
最好查看 python-nmap 的文档或源代码,看看还有哪些有用的信息,例如在该端口上侦听的服务名称和版本。
扫描结果中不存在作为扫描数据抛出的数据的一部分的字典的"Key"主机。在我看来,这可能是错误的原因。谢谢