首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字典值转换为字符串

将字典值转换为字符串
EN

Stack Overflow用户
提问于 2017-03-15 18:24:39
回答 1查看 2.1K关注 0票数 0

我正在处理来自Nmap脚本引擎的输出,我在字符串转换方面遇到了问题。

nmap的结果将它放在字典中,我将其转换为字符串:

代码语言:javascript
复制
nm = nmap.PortScanner()
sslNmapOutput = nm.scan(hosts='192.168.2.50', arguments='--script ssl-enum-ciphers -p443')

sslOutput = ', '.join("%s=%s" % (key,val) for (key,val) in sslNmapOutput.iteritems())

resultString = re.search("warnings:(.*)SHA1\n", sslOutput)
resultString = result.group(1)
print sslOutput.strip()

这将打印以下内容:

代码语言:javascript
复制
nmap={'scanstats': {'uphosts': '1', 'timestr': 'Wed Mar 15 17:59:42 2017', 'downhosts': '0', 'totalhosts': '1', 'elapsed': '18.85'}, 'scaninfo': {'tcp': {'services': '443', 'method': 'syn'}}, 'command_line': 'nmap -oX - --script ssl-enum-ciphers -p443
192.168.2.50'}, scan={'192.168.2.50': {'status': {'state': 'up', 'reason': 'reset'}, 'hostnames': [{'type': '', 'name': ''}], 'vendor': {}, 'addresses': {'ipv4': '192.168.2.50'}, 'tcp': {443: {'product': '', 'state': 'open', 'version': '', 'name': 'https', 'conf': '3', 'script': {'ssl-enum-ciphers': '\n  SSLv3: \n    ciphers: \n      TLS_ECDHE_RSA_WITH_RC4_128_SHA (secp256r1) - C\n      TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C\n      TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A\n      TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A\n      TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A\n      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A\n      TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A\n      TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A\n      TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (secp256r1) - C\n      TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (dh 2048) - C\n      TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C\n    compressors: \n      NULL\n    cipher preference: server\n    warnings: \n      64-bit block cipher 3DES vulnerable to SWEET32 attack\n      Broken cipher RC4 is deprecated by RFC 7465\n      CBC-mode cipher in SSLv3 (CVE-2014-3566)\n      Weak certificate signature: SHA1\n }, 'extrainfo': '', 'reason': 'syn-ack', 'cpe': ''}}}}

我想得到warnings: SHA1\n**.之间的所有信息但是,当我打印正则表达式的结果时,我会得到以下结果:**

代码语言:javascript
复制
\n      64-bit block cipher 3DES vulnerable to SWEET32 attack\n      Broken cipher RC4 is deprecated by RFC 7465\n      CBC-mode cipher in SSLv3 (CVE-2014-3566)\n      Weak certificate signature:

我想要的是打印这个值,因为它将以正确的空格和换行符出现,如下所示:

代码语言:javascript
复制
test =  "\n      64-bit block cipher 3DES vulnerable to SWEET32 attack\n      Broken cipher RC4 is deprecated by RFC 7465\n      CBC-mode cipher in SSLv3 (CVE-2014-3566)\n      Weak certificate signature: "
print test.strip()

输出:

代码语言:javascript
复制
64-bit block cipher 3DES vulnerable to SWEET32 attack
Broken cipher RC4 is deprecated by RFC 7465
CBC-mode cipher in SSLv3 (CVE-2014-3566)
Weak certificate signature:
EN

回答 1

Stack Overflow用户

发布于 2017-03-15 19:02:27

下面是一个关于发生了什么的演示:

代码语言:javascript
复制
>>> s = 'a\nb'
>>> print s
a
b
>>> print {'key': s}
{'key': 'a\nb'}

sslNmapOutput是一个字典,其值位于树的深处,包含实际的换行符。在本身为字典的即时值上调用str (通过%s)将创建一个字符串表示,其中内部值中的换行符被两个字符\n替换。不要将正则表达式应用于sslOutput。而是将其应用于sslNmapOutput中包含的原始字符串,在本例中,该字符串可用如下所示:

代码语言:javascript
复制
sslNmapOutput['scan']['192.168.2.50']['tcp'][443]['script']['ssl-enum-ciphers']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42817802

复制
相关文章

相似问题

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