无法打印其他详细信息(tag_name& region),同时减去2组()

时间:2016-07-07 08:09:19

标签: python pickle nmap port-scanning

我有2个pickel文件,其中包含IPaddress以及与之关联的ports,aws_tags和region信息。这基本上是一个端口扫描器,它有一个在找到新IP地址时打印的方法。这是通过用OLD_pickel_scan减去NEW_pickel_scan完成的,如下所示:

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

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

这很好用并打印在pickel报告中添加的新IP。

现在我需要添加该IP地址的关联标签和区域。我已经在映射中获得了所需的数据:

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

i [0]是IP,i [1]是Tag,i [2]是区域

所以我尝试使用此映射打印标记。

仅举例来说,我有另一种方法可以在找到非法端口时进行打印

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

这是我使用映射的方式,有人可以帮助我new_hosts()吗?

我试过了:

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 个答案:

答案 0 :(得分:1)

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

result_new_hostsset,正如错误所述,集合不可删除,因此无法在字典中存储或查找。

相反,您应该搜索集合中的每个元素:

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

更新如果您想要返回包含(ip, (tag, region))的元组列表:

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