Python 什么是;KeyError:';(插入IP)和#x27&引用;什么意思?
我正在使用暴力Python书籍,有一个错误阻止了我通过第一个nmap构建(第40-41页)。在虚拟机上使用Ubuntu 14.04。我正在终端中输入'python nmapScan.py-h10.50.60.125-p211720'Python 什么是;KeyError:';(插入IP)和#x27&引用;什么意思?,python,linux,ubuntu,Python,Linux,Ubuntu,我正在使用暴力Python书籍,有一个错误阻止了我通过第一个nmap构建(第40-41页)。在虚拟机上使用Ubuntu 14.04。我正在终端中输入'python nmapScan.py-h10.50.60.125-p211720' import nmap import optparse def nmapScan(tgtHost,tgtPort): nmScan = nmap.PortScanner() nmScan.scan(tgtHost,tgtPort) stat
import nmap
import optparse
def nmapScan(tgtHost,tgtPort):
nmScan = nmap.PortScanner()
nmScan.scan(tgtHost,tgtPort)
state=nmScan[tgtHost]['tcp'][int(tgtPort)]['state']
print "[*] " + tgtHost + " tcp/"+tgtPort +" "+state
def main():
parser = optparse.OptionParser('usage %prog '+\
'-H <target host> -p <target port>')
parser.add_option('-H', dest='tgtHost', type='string',\
help='specify target host')
parser.add_option('-p', dest='tgtPort', type='string',\
help='specify target port[s] separated by comma')
(options, args) = parser.parse_args()
tgtHost = options.tgtHost
tgtPorts = str(options.tgtPort).split(',')
if (tgtHost == None) | (tgtPorts[0] == None):
print parser.usage
exit(0)
for tgtPort in tgtPorts:
nmapScan(tgtHost, tgtPort)
if __name__ == '__main__':
main()
导入nmap
导入optpass
def nmapScan(tgtHost、tgtPort):
nmScan=nmap.PortScanner()
nmScan.scan(tgtHost,tgtPort)
state=nmScan[tgtHost]['tcp'][int(tgtPort)]['state']
打印“[*]”+tgtHost+“tcp/”+tgtPort+“”+状态
def main():
parser=optparse.OptionParser('usage%prog'+\
“-H-p”)
parser.add_选项('-H',dest='tgtHost',type='string'\
help='指定目标主机')
parser.add_选项('-p',dest='tgtPort',type='string'\
help='指定以逗号分隔的目标端口')
(options,args)=parser.parse_args()
tgtHost=options.tgtHost
tgtPort=str(options.tgtPort).split(','))
如果(tgtHost==None)|(tgtPorts[0]==None):
打印语法分析器.用法
出口(0)
对于tgtPorts中的tgtPorts:
nmapScan(tgtHost、tgtPort)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
以下是错误:
File "nmapScan.py", line 24, in <module>
main()
File "nmapScan.py", line 21, in main
nmapScan(tgtHost, tgtPort)
File "nmapScan.py", line 7, in nmapScan
state = nmScan[tgtHost]['tcp'][int(tgtPort)]['state']
File "build/bdist.linux-x86_64/egg/nmap/nmap.py", line 567, in __getitem__
KeyError:'10.50.60.125'
文件“nmapScan.py”,第24行,在
main()
文件“nmapScan.py”,第21行,主
nmapScan(tgtHost、tgtPort)
文件“nmapScan.py”,第7行,在nmapScan中
state=nmScan[tgtHost]['tcp'][int(tgtPort)]['state']
文件“build/bdist.linux-x86_64/egg/nmap/nmap.py”,第567行,在u getitem中__
KeyError:'10.50.60.125'
无法访问此主机10.50.60.125
ping 10.50.60.125
PING 10.50.60.125 (10.50.60.125): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
尝试使用一些可访问的主机,如:
127.0.0.1
nmap中的KeyError
表示无法访问ip
。您应该验证ip是否已启动
如果您不能始终确定主机是否会启动,则需要一个尝试/except
:
try:
state = nmScan[tgtHost]['tcp'][int(tgtPort)]['state']
except KeyError as e:
print(e)
return
这是因为nmap没有扫描端口信息, 你可以跟我核对一下
nmScan = nmap.PortScanner()
data = nmScan.scan(tgtHost,tgtPort)
print(data.get(tgtHost))
您会发现输出值为空
从cod的来源,我们可以知道:
nmScan[tgtHost]
等于data.get(tgtHost)[tgtHost]
更好的方法是使用
data.get(tgtHost)[tgtHost]
或data.get(tgtHost).get(tgtHost,{})
抱歉,但对我来说效果很好。尝试添加一些调试打印语句,例如print nmap.all\u hosts()
。某些nmap信息位于。您是否真的在询问KeyError
的含义?如果是,请参阅。如果您的意思是“为什么python nmap中的PortScanner对象不包含我尝试扫描的主机”,请更新问题。非常感谢大家。这本书的例子已经过时了