Python nmap:TypeError:列表索引必须是整数或片,而不是str

Python nmap:TypeError:列表索引必须是整数或片,而不是str,python,python-3.x,Python,Python 3.x,我试图使用nmap模块获取目标系统端口id,但获取列表索引时出错 import nmap nm_scan = nmap.PortScanner() nm_scanner = nm_scan.scan('192.168.0.1', '80', arguments='-O') print("Portid: " + nm_scanner['scan']['192.168.0.1']['portused']['portid']) 打印(“主机是:”+ nm_扫描仪['scan']['192.168.0

我试图使用nmap模块获取目标系统端口id,但获取列表索引时出错

import nmap
nm_scan = nmap.PortScanner()
nm_scanner = nm_scan.scan('192.168.0.1', '80', arguments='-O')
print("Portid: " + nm_scanner['scan']['192.168.0.1']['portused']['portid'])
打印(“主机是:”+ nm_扫描仪['scan']['192.168.0.1']['portused']['portid']) TypeError:列表索引必须是整数或片,而不是str


您正在使用nm_扫描仪的字符串索引,而不是数字。nm_scanner是字典还是列表?你可以通过说下面的话来知道

类型(纳米扫描仪)
如果它是一个列表,那么您必须使用数字作为索引(在方括号中)。您可以使用字符串作为字典。
通过打印nm_扫描仪并粘贴到此处,您可以为我们提供更多帮助。

从输出中可以看到,有多个端口,因此您必须使用:

nm_scanner['scan']['192.168.0.1']['portused'][0]['portid']
对于第一个,或使用以下命令遍历所有对象:

for port in nm_scanner['scan']['192.168.0.1']['portused']:
    print(port['portid'])

当你
打印(nm_扫描器)
时你会得到什么?@Selcuk类似这样的东西{'portused':[{'state':'open','proto':'tcp','portid':'80'}如果您发布实际结果而不是假设输出,我们可以帮助您。@Selcuk我添加了nm的输出_scanner@DhruvikMevada有两个portid,你需要哪一个?虽然技术上正确,但这篇文章并没有回答这个问题。
for port in nm_scanner['scan']['192.168.0.1']['portused']:
    print(port['portid'])