2016-07-07 2 views
0

IPアドレスとポート、aws_tags、および地域情報と一緒にIPアドレスを保持する2つのpickelファイルがあります。これは、基本的に新しいIPアドレスが見つかったときに印刷する方法を持つポートスキャナです。これが正常に動作し、新しいIPがpickelレポートに追加印刷し2つのセット()を減算しながら追加の詳細(tag_name&region)を印刷できません

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

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

:これは、次のようにOLD_pickel_scanでNEW_pickel_scanを減算することによって行われます。

これで、関連するタグとそのIPアドレスの地域も追加する必要があります。私は[0] IPである

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

、私は[1]タグと私である[2]私は、タグを印刷しようとしています地域

です:私はマッピングで、既に必要なデータを持っていますこのマッピングを使用します。

私はillegleポートが

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])) 

これは私がマッピングを使用する方法ですが発見された際に印刷し、別の方法を持っているだけで、たとえば、誰かがのために私を助けることができますか?

私が試した:

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] 

をそれは言う:TypeError: unhashable type: 'set'

をも私が好きな何かをする場合:

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]]) 

これは、出力します。

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

答えて

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

result_new_hostssetであり、エラーが示すように、セットはハッシュできないため、辞書に格納または参照することはできません。

代わりに、あなたはセット内の個々の要素を検索する必要がありますあなたが(ip, (tag, region))が含まれているタプルのリストを返したい場合はUPDATE

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

を:

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

大丈夫、私の問題は残っています。関連するマップタグと地域名も印刷する必要があります。これは私のフルコードです:http://pastebin.com/xbZL0pjg、見てください – Kittystone

+0

@Kittystoneこのコードを実行しようとしましたか? 'mapping'ディクショナリの値が実際にタプル'(tag、region) 'であることを考えれば、あなたが望むものを正確に行うはずです。 – DeepSpace

+0

これでいいですが、私のコードの流れを見ることができれば、それ以外はうまく動作し、マッピングにはタグと地域が関連付けられています – Kittystone

関連する問題