首页 > 解决方案 > 理解从 scapy 输出的简单字节

问题描述

我正在尝试从192.168.1.198具有有效负载的 IP 打印数据包的有效负载:

from scapy.all import *

packets = rdpcap('capture1_bug.pcapng')

payloads = []
for packet in packets:
    if IP in packet:
        ip_src=packet[IP].src
        ip_dst=packet[IP].dst
        if ip_src=="192.168.1.198" and packet[TCP].payload:
            payload = packet[TCP].payload
            payloads.append(payload)
        
print(payloads[7])

我得到

b'$\x00\x00&\x80`\x00\x00\x00\x00\x1bf\x00\x00\x1bfgM\x00*\x9d\xa8\x1e\x00\x89\xf9f\xe0  (\x00\x00\x03\x00\x08\x00\x00\x03\x00| '

我无法理解这个输出。为什么有些字节是0x00(2位数字)而有些是\x1bfgM,为什么会有类似的东西(|?为什么第一个字符打印为$而不是十六进制数字?

标签: pythonnetworkingwiresharkscapy

解决方案


\x1bfgM实际上是 4 个字节:\x1bf和. 可以转换为 ASCII 字符(az、AZ、0-9、标点符号等)的字节字符串中的所有字符都按原样打印,而不使用前缀。例如:gM\x

>>> b'\x24\x28\x7c'
b'$(|'

推荐阅读