【问题标题】:How to get packet.tcp.payload and packet.http.data as string?如何获取 packet.tcp.payload 和 packet.http.data 作为字符串?
【发布时间】:2021-02-06 04:08:37
【问题描述】:

这些属性的返回值是十六进制格式,由':'分隔 例如:70:79:f6:2e:类似这样的东西。 当我尝试将其解码为纯字符串(人类可读)时,它不起作用。正在使用什么编码?我尝试了各种不同的方法,如 codecs.decode()、binascii.unhexlify()、bytes.fromhex() 以及不同的编码 ASCII 和 UTF-8。没有任何效果,任何帮助表示赞赏。我正在使用 python 3.6

【问题讨论】:

    标签: python-3.x pyshark


    【解决方案1】:

    感谢您的提问!我相信您想要以两个十六进制位置的块读取有效负载。您尝试的函数无法解析开箱即用的 : 分隔符。像用: 分隔符分割字符串,将它们的值转换为人类可读的字符,然后将“列表”加入字符串这样的方法应该可以解决问题。

    hex_string = '70:79:f6:2e'
    
    hex_split = hex_string.split(':')
    hex_as_chars = map(lambda hex: chr(int(hex, 16)), hex_split)
    
    human_readable = ''.join(hex_as_chars)
    print(human_readable)
    

    这是你的想法吗?

    【讨论】:

    • 感谢您的回答,我在删除 ':' 后尝试了这些功能,但它确实有效,但不知道为什么我看到一些像以前一样不可读的字符。现在的问题是,这些数据包是预期的还是一些错误?我正在使用 pyshark 来读取这些数据包。
    • 另外,如果这是可以接受的行为,我怎样才能在打印前摆脱它们?
    • 根据another user 的输出,这似乎是有效载荷的可接受行为。 packet.http.data 长什么样子?
    • packet.http.data 也提供十六进制数据,但解码后看起来很好,packet.tcp.payload 也很好,除了最后几行充满了奇怪的字符
    • 好的,谢谢你告诉我。您是否介意在原始帖子中包含一个奇怪字符的示例以及它们与有效负载有何不同?
    猜你喜欢
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 2012-02-09
    • 1970-01-01
    • 2022-07-25
    • 1970-01-01
    • 2012-11-08
    相关资源
    最近更新 更多