Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么是;KeyError:';(插入IP)和#x27&引用;什么意思?_Python_Linux_Ubuntu - Fatal编程技术网

Python 什么是;KeyError:';(插入IP)和#x27&引用;什么意思?

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

我正在使用暴力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)
    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对象不包含我尝试扫描的主机”,请更新问题。非常感谢大家。这本书的例子已经过时了