networking - Wireshark 认为 scapy 数据包的原始数据是 DNS(格式错误的数据包)
问题描述
我正在尝试使用原始数据向网络中的所有设备发送一个带有 scapy 的 udp 数据包:(hello everyone
)
数据包如下所示:
packet = Ether(dst="ff:ff:ff:ff:ff:ff") / IP(dst="255.255.255.0") / UDP(sport=8118) / "hello everyone"
packet.show()
###[ Ethernet ]###
dst = ff:ff:ff:ff:ff:ff
src = (my mac address)
type = IPv4
###[ IP ]###
version = 4
ihl = None
tos = 0x0
len = None
id = 1
flags =
frag = 0
ttl = 64
proto = udp
chksum = None
src = 192.168.0.105
dst = 255.255.255.0
\options \
###[ UDP ]###
sport = 8118
dport = domain
len = None
chksum = None
###[ Raw ]###
load = 'hello everyone'
当我发送数据包 ( sendp(packet)
) 时,wireshark 说这是一个格式错误的 DNS 数据包:
问题是什么?
解决方案
我相信您会混淆 Wireshark,因为您没有指定目标端口。如果您不指定dport
for UDP
,则默认为 53:
class UDP(Packet):
name = "UDP"
fields_desc = [ShortEnumField("sport", 53, UDP_SERVICES),
ShortEnumField("dport", 53, UDP_SERVICES),
ShortField("len", None),
XShortField("chksum", None), ]
两个端口实际上都可以。但是 53 是用于 DNS 的,因此 Wireshark 试图根据端口号将您的有效负载解释为 DNS。
指定两者sport
并dport
确保您的数据包不会被误解为 DNS 数据包。
推荐阅读
- ubuntu - 为什么 grub 不能立即启动进入 Ubuntu?
- javascript - 角甘特图中截面的宽度
- logging - 一个附加程序中的多个过滤器
- django - 如何解决 __init__() 需要 1 个位置参数,但给出了 2 个
- javascript - 是否可以使用 Robot Framework 验证 Bootstrap 的约束验证文本?
- r - 如何获取 R 文件并将文件中的所有变量存储在列表中
- javascript - Javascript-将文本框中的内容转换为键值对
- .net-core - .Net Core自带exe如何设置版本号和产品信息
- date - Google 表格过滤器 - 根据日期(例如 2019 年 8 月)将行拉到另一个选项卡上
- android - 使用 openfire 在 android 中的 VoIP 和 SIP 客户端应用程序