python - 理解从 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
,为什么会有类似的东西(
和|
?为什么第一个字符打印为$
而不是十六进制数字?
解决方案
\x1bfgM
实际上是 4 个字节:\x1b
、f
和. 可以转换为 ASCII 字符(az、AZ、0-9、标点符号等)的字节字符串中的所有字符都按原样打印,而不使用前缀。例如:g
M
\x
>>> b'\x24\x28\x7c'
b'$(|'
推荐阅读
- python - 根据不同的扩展模式过滤文件名
- javascript - 桌面上的 Outlook getAccessTokenAsync 错误代码:13003
- vba - 使用 Excel VBA 复制 MS Word 书签范围并粘贴到 Excel
- date - 如何从给定日期定义日期格式
- spring-cloud-dataflow - spring-cloud 数据流外壳没有响应
- sql - 月份序列和完整月份名称 - SQL Server
- sql - 在 Db2 命令行处理器 CLP 中使用 SQL LIKE 谓词
- gradle - gradle本地jar依赖不起作用
- html - 下拉菜单问题(位置)
- sql - SQL 查询左外连接到当前查询