2017-06-14 1 views
0

Ich versuche, bestimmte Werte aus meinem Wörterbuch zu analysieren. Da ich vorher mit Wörterbüchern gearbeitet habe, war ich mir sicher, dass Sie eine ganze Reihe von Ergebnissen mit Ganzzahlen durchlaufen können.KeyError: 0 beim Iterieren von Json durch Python-nmap

Unten ist ein bearbeitetes Beispiel meines nmap Scan (mit gefälschten IPs). Ich versuche, auf die ipv4 Werte zuzugreifen.

{'165.19.100.145': {'addresses': {'ipv4': '165.19.100.145'}}, '165.19.100.200': {'addresses': {'ipv4': '165.19.100.200'}}} 

Ich versuche wie so durch das Wörterbuch iterieren:

#!/usr/bin/env python3 
import nmap 
import json 
nm = nmap.PortScanner() 
results = nm.scan(hosts='165.19.100.0/24', arguments='-sP') 

results_json = json.dumps(results['scan'], indent=4, sort_keys=True, ensure_ascii=False) 
json_data = json.loads(results_json) 

scan_len = len(json_data) 

for x in range(0, scan_len): 
    ip_address = json_data[x]['addresses']['ipv4'] 
    print(ip_address) 

Wenn ich dieses Skript ausführen, erhalte ich eine KeyError: 0. Ich habe keine Ahnung, warum ich diesen Fehler bekommen könnte. Würde sich die 0 nicht auf die erste 165.19.100.145 beziehen? Was mache ich hier falsch?

Antwort

0

Weil Sie nicht über eine Liste, sondern über ein Wörterbuch iterieren. Es gibt keine Indizes in einem Wörterbuch afaik. eher tun:

for key, value in json_data.iteritems(): 
    print json_data[key]['addresses']['ipv4'] 
+0

Für python3 ersetzen Sie einfach 'iteritems()' 'mit Artikel()' und Klammern um den Druck, aber das funktioniert perfekt. Vielen Dank! – jagdpanzer

+0

Warum über Schlüssel und Wert iterieren und dann nicht "Wert" verwenden, sondern Schlüssel nur zum Abrufen des Werts verwenden Wenn Sie den Schlüssel nicht benötigen, durchlaufen Sie einfach die Werte. Das ist 'json_data.itervalues ​​()' in Python 2 und 'json_data.values ​​()' in Python 3. – BlackJack