使用 Scapy 读取原始字节?

Reading Raw Bytes using Scapy?

我有一个正在构建 DNS 转发器的项目。

我正在使用 UDP 服务器套接字来侦听端口 53 上的 DNS 请求(客户端正在使用 dig 命令),我必须将收到的原始 DNS 请求转发给 scapy 以对其进行解析。我知道 scapy 用于 forge/send/manipulate 数据包。

原始请求看起来像这样 -

b'\xd6t\x01\x00\x01\x00\x00\x00\x00\x00\x01\x03www\x08facebook\x03com\x00\x00\x01\x00\x01\x00\x00)\x10\x00\x00\x00\x00\x00\x00\x00'

scapy 中是否有一个 method/function 用于导入原始 DNS 请求以获取标志,正在询问什么记录?

只需使用您的字节字符串初始化 DNS 负载:

from scapy.all import DNS
p = DNS(b'\xd6t\x01\x00\x01\x00\x00\x00\x00\x00\x01\x03www\x08facebook\x03com\x00\x00\x01\x00\x01\x00\x00)\x10\x00\x00\x00\x00\x00\x00\x00')

然后您可以访问它的字段:

print(p.id)
print(p.opcode)
...

[编辑] 并打印其所有内容:

p.show()