python中如何从字典值中获取特定条目

2024-06-01 03:13:34 发布

您现在位置:Python中文网/ 问答频道 /正文

在这里,这是我的字典的价值,但我只想得到像443和80的产品和版本的细节。 有没有什么方法或命令可以帮助我们得到他的信息? 以下是我的字典值:

   {'nmap': {'scanstats': {'timestr': 'Fri Apr 17 05:08:18 2015', 'uphosts': '1', 'downhosts': '0', 'totalhosts': '1', 'elapsed': '14.91'}, 'scaninfo': {'tcp': {'services': '80,443', 'method': 'connect'}}, 'command_line': 'nmap -oX - -p 80,443 -sV xxxx'}, 'scan': {'x.x.x.x': {'status': {'state': 'up', 'reason': 'syn-ack'}, 'hostname': 'xxxx', 'vendor': {}, 'addresses': {'ipv4': '0x.x.x'}, 'tcp': {'443': {'product': 'Apache Tomcat/Coyote JSP engine', 'name': 'http', 'extrainfo': '', 'reason': 'syn-ack', 'cpe': '', 'state': 'open', 'version': '1.1', 'conf': '10'}, '80': {'product': 'Apache Tomcat/Coyote JSP engine', 'name': 'http', 'extrainfo': '', 'reason': 'syn-ack', 'cpe': '', 'state': 'open', 'version': '1.1', 'conf': '0'}}}}}

所以。我执行了这个命令

      scan=[v for k,v in x.iteritems() if 'scan' in k]

结果如下:

    [{
    'x.x.x.x': {
        'status': {
            'state': 'up',
            'reason': 'syn-ack'
        },
        'hostname': 'xxxx',
        'vendor': {},
        'addresses': {
            'ipv4': 'x.x.x.x'
        },
        'tcp': {
            '443': {
                'product': 'Apache Tomcat/Coyote JSP engine',
                'name': 'http',
                'extrainfo': '',
                'reason': 'syn-ack',
                'cpe': '',
                'state': 'open',
                'version': '1.1',
                'conf': '10'
            },
            '80': {
                'product': '',
                'name': 'http',
                'extrainfo': '',
                'reason': 'conn-refused',
                'cpe': '',
                'state': 'closed',
                'version': '',
                'conf': '3'
            }
        }
    }
}]

Tags: namehttpscanversionapacheconfproducttcp
3条回答

您可以使用方法itemsiteritems在Python 2中)来提取端口号和相关信息:

In [4]: for port, info in data[0]['x.x.x.x']['tcp'].items():
   ...:     print(port, info['product'], info['version'])
   ...:   
443 Apache Tomcat/Coyote JSP engine 1.1
80  

您可以尝试以下操作:

>>> data = [{'x.x.x.x': {'status': {'state': 'up', 'reason': 'syn-ack'}, 'hostname': 'xxxx', 'vendor': {}, 'addresses': {'ipv4': 'x.x.x.x'}, 'tcp': {'443': {'product': 'Apache Tomcat/Coyote JSP engine', 'name': 'http', 'extrainfo': '', 'reason': 'syn-ack', 'cpe': '', 'state': 'open', 'version': '1.1', 'conf': '10'}, '80': {'product': '', 'name': 'http', 'extrainfo': '', 'reason': 'conn-refused', 'cpe': '', 'state': 'closed', 'version': '', 'conf': '3'}}}}]
>>> for i in data[0]['x.x.x.x']['tcp']:
...     print i, data[0]['x.x.x.x']['tcp'][i]['product'], data[0]['x.x.x.x']['tcp'][i]['version']
... 
443 Apache Tomcat/Coyote JSP engine 1.1
80  
>>> 

您可以随时使用d.keys()查看字典中的键来遍历它。你知道吗

    d = your dictionary

    d['x.x.x.x']['tcp']['443']['product']
    Out[109]: 'Apache Tomcat/Coyote JSP engine'

    d['x.x.x.x']['tcp']['443']['version']
    Out[110]: '1.1'

    d['x.x.x.x']['tcp']['80']['product']
    Out[109]: ''

    d['x.x.x.x']['tcp']['80']['version']
    Out[110]: ''

相关问题 更多 >