了解 scapy 的简单字节输出
Undrstanding simple bytes output from scapy
我正在尝试打印来自 IP 192.168.1.198
的具有有效负载的数据包的有效负载:
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
,为什么会有 (
和 |
之类的东西?为什么第一个字符打印为 $
而不是十六进制数?
\x1bfgM
实际上是4个字节:\x1b
、f
、g
和M
。字节字符串中所有可以转换为 ASCII 字符的字符(a-z、A-Z、0-9、标点符号等)都按原样打印,而不是使用 \x
字首。例如:
>>> b'\x24\x28\x7c'
b'$(|'
我正在尝试打印来自 IP 192.168.1.198
的具有有效负载的数据包的有效负载:
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
,为什么会有 (
和 |
之类的东西?为什么第一个字符打印为 $
而不是十六进制数?
\x1bfgM
实际上是4个字节:\x1b
、f
、g
和M
。字节字符串中所有可以转换为 ASCII 字符的字符(a-z、A-Z、0-9、标点符号等)都按原样打印,而不是使用 \x
字首。例如:
>>> b'\x24\x28\x7c'
b'$(|'