0

你好,我有 python 嗅探器

def receiveData(s):
    data = ''
    try:
        data = s.recvfrom(65565)
        #k = data.rstrip()
    except timeout:
        data = ''
    except:
        print "An Error Occurred."
        sys.exc_info()
    return data[0]

 data = receiveData(s)

s 是套接字。我正在获取数据,但它包含符号请帮助我如何将其转换为纯文本

我是 Python 的新手,如果这是一个非常愚蠢的问题,抱歉:)

这是数据示例E\x00\x00)\x1a*@\x00\x80\x06L\xfd\xc0\xa8\x01\x84\xad\xc2#\xb9M\xb8\x00P\xed\xb3\x19\xd9\xedY\xc1\xfbP\x10\x01\x04\x16=\x00\x00\x00'

4

2 回答 2

1

您不能真正将其转换为“纯文本”。NUL(ASCII 0,显示为\x00)等字符无法显示,因此 python 以十六进制表示形式显示它们。

大多数嗅探/十六进制转储工具所做的是将不可打印的字符替换为例如点。你可以这样做:

import string
printable = set(string.printable)
print ''.join(x if x in printable else '.' for x in data)

例子:

>>> data = 'E\x00\x00)\x1a*@\x00\x80\x06L\xfd\xc0\xa8\x01\x84\xad\xc2#\xb9M\xb8\x00P\xed\xb3\x19\xd9\xedY\xc1\xfbP\x10\x01\x04\x16=\x00\x00\x00'
>>> print ''.join(x if x in printable else '.' for x in data)
E..).*@...L.......#.M..P.....Y..P....=...
于 2012-12-14T12:45:24.757 回答
0

转换为“纯文本”取决于您的数据的含义。

  • 你有压缩文本吗?然后解压它。

  • 你有编码数字吗?然后对其进行解码并显示数字。

在不知道数据语义的情况下,没有人可以告诉你。

当然,您可以只显示原始数据print data.encode("hex"),但我不确定这是否是您想要的。

于 2012-12-14T13:00:31.413 回答