2016-07-07 15 views
0

Ich habe 2 Pickel-Dateien, die die IP-Adresse zusammen mit den Ports, AWS_Tags und Region Informationen enthalten. Dies ist im Prinzip ein Port-Scanner, der eine Methode hat, die druckt, wenn eine neue IP-Adresse gefunden wird. Dies wird durch Subtraktion der NEW_pickel_scan mit OLD_pickel_scan geschieht wie folgt:Drucken von zusätzlichen Details (Tag_Name & Region) beim Subtrahieren von 2 Sets()

self.prev_hosts = set() 
self.curr_hosts = set() 

def new_hosts(self) 
    result_new_hosts = self.curr_hosts - self.prev_hosts 

das funktioniert gut und druckt die neue IP im pickel Bericht hinzugefügt.

Jetzt muss ich auch das zugehörige Tag und die Region dieser IP-Adresse hinzufügen. Ich habe die benötigten Daten bereits bei einer Abbildung:

mapping = {i[0]:[i[1],i[2]] for i in data} 

i [0] IP ist, i [1] ist Tag und i [2] ist die Region

so dass ich den Tag zu drucken versuche Verwenden Sie diese Zuordnung.

Gerade zum Beispiel ich eine andere Methode haben, die gedruckt wird, wenn ein illegle Port gefunden

def dump_raw(self,mapping): 
    nmap_report = self.report 
    for host in nmap_report.hosts: 
      #print 
      if len(host.hostnames): 
       tmp_host = host.hostnames.pop() 
      else: 
       tmp_host = host.address 
      print("Nmap scan report for {0} ({1})".format(tmp_host,host.address)) 
      print("Host is {0}.".format(host.status)) 

      #val = config.get('ports', 'scan_range') 
      #val_known = config.get('ports','known') 

      #safe_port = range(*map(int, val.split(','))) 
      #known_ports = map(int, val_known.split(',')) 

      print(" PORT  STATE   SERVICE") 

      for serv in host.services: 
       if serv.state == "open": 
       ## print ('Illegal Port open :'+str(serv.port) +'/'+str(serv.protocol)+' '+str(serv.service)+', on host=> '+str(host)) 
        print ('Illegal Port open :'+str(serv.port) +'/'+str(serv.protocol)+' '+str(serv.service)+', on host=> '+str(host) + ' Tag =' + (mapping[host.address.strip()][0]) + ' Region =' + str(mapping[host.address.strip()][1])) 

Dies ist, wie i-Mapping verwendet, kann mir jemand für die helfen?

Ich habe versucht:

def new_hosts(self,mapping): 
     """Return a list of new hosts added in latest scan""" 
     result_new_hosts = self.curr_hosts - self.prev_hosts 
     print mapping[result_new_hosts] 

heißt es: TypeError: unhashable type: 'set'

auch wenn ich so etwas wie:

def new_hosts(self,mapping): 
     """Return a list of new hosts added in latest scan""" 
     result_new_hosts = self.curr_hosts - self.prev_hosts 
     print mapping[result_new_hosts] 
     nmap_report = self.report 
     for host in nmap_report.hosts: 
      for serv in host.services: 
       print result_new_hosts,mapping[result_new_hosts.address.strip()[0]],mapping[result_new_hosts.address.strip()[1]] 
      return (result_new_hosts,mapping[result_new_hosts.address.strip()[0]],mapping[result_new_hosts.address.strip()[1]]) 

Dies druckt:

AttributeError: 'set' object has no attribute 'address' 

Antwort

1
result_new_hosts = self.curr_hosts - self.prev_hosts 
print mapping[result_new_hosts] 

result_new_hosts ist ein set, und wie der Fehler sagt, Sätze sind nicht hashbar daher kann nicht gespeichert oder in einem Wörterbuch nachgeschlagen werden.

Stattdessen sollten Sie jedes einzelne Element in der Menge suchen:

result_new_hosts = self.curr_hosts - self.prev_hosts 
for result in result_new_hosts:  
    print mapping[result] 

UPDATE Falls Sie eine Liste von Tupeln zurückgeben möchten, (ip, (tag, region)) enthalten:

def new_hosts(self, mapping): 
    result_new_hosts = self.curr_hosts - self.prev_hosts 
    return [(result, mapping[result]) for result in result_new_hosts] 
+0

in Ordnung, aber mein Problem bleibt, ich muss den zugeordneten zugeordneten TAG und REGION Namen auch ausdrucken, das ist mein voller Code: http://pastebin.com/xbZL0pjg, bitte werfen Sie einen Blick – Kittystone

+0

@ Kittystone Haben Sie versucht, diesen Code ausgeführt? Es sollte genau das tun, was Sie wollen (vorausgesetzt, dass die Werte im 'mapping' Wörterbuch tatsächlich das Tupel' (tag, region) sind). – DeepSpace

+0

ok, während, wenn Sie nur den Fluss von meinem Code sehen können coz everthing funktioniert gut und Zuordnung hat Tags und Region zugeordnet – Kittystone