【问题标题】:Python get packet data TCPPython 获取数据包数据 TCP
【发布时间】:2012-12-02 11:17:18
【问题描述】:

你好,我有 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'

【问题讨论】:

  • 您应该这样做data = ('',),以免打扰data[0]

标签: python windows tcp packet


【解决方案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....=...

【讨论】:

    【解决方案2】:

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

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

    • 您有编码数字吗?然后解码并显示数字。

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

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

    【讨论】:

      猜你喜欢
      • 2011-11-01
      • 2015-12-21
      • 2013-11-25
      • 2013-07-28
      • 1970-01-01
      • 2012-02-09
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多