首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法打印附加详细信息(tag_name & region),同时减去2组()

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

Stack Overflow用户
提问于 2016-07-07 08:09:19
回答 1查看 23关注 0票数 0

我有两个pickel文件,其中包含IPaddress和端口,aws_tags和区域信息与他们联系在一起。这基本上是一个端口扫描器,它有一个方法,打印时发现一个新的IP地址。这是通过用NEW_pickel_scan减去OLD_pickel_scan来完成的,如下所示:

代码语言:javascript
运行
复制
self.prev_hosts = set()
self.curr_hosts = set()

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

这很好,并打印了新的IP添加到pickel报告。

现在,我还需要添加IP地址的相关标记和区域。我已经在地图上获得了所需的数据:

代码语言:javascript
运行
复制
 mapping = {i[0]:[i[1],i[2]] for i in data}

I是IP,i1是标记,i2是区域。

所以我试着用这个映射打印标签。

例如,还有另一个方法,当找到非法端口时,它会打印

代码语言:javascript
运行
复制
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()吗?

我试过:

代码语言:javascript
运行
复制
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'

另外,如果我做了这样的事情:

代码语言:javascript
运行
复制
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]])

这些指纹:

代码语言:javascript
运行
复制
AttributeError: 'set' object has no attribute 'address'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-07 08:14:23

代码语言:javascript
运行
复制
 result_new_hosts =  self.curr_hosts - self.prev_hosts
 print mapping[result_new_hosts]

result_new_hosts是一个set,正如错误说的那样,集合是不可保存的,因此不能在字典中存储或查找。

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

代码语言:javascript
运行
复制
result_new_hosts =  self.curr_hosts - self.prev_hosts
for result in result_new_hosts:    
    print mapping[result]

更新,以防您想返回包含(ip, (tag, region))的元组列表

代码语言:javascript
运行
复制
def new_hosts(self, mapping):
    result_new_hosts =  self.curr_hosts - self.prev_hosts
    return [(result, mapping[result]) for result in result_new_hosts]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38240495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档