【发布时间】:2021-10-18 15:24:07
【问题描述】:
我曾经使用简单的 dtls 参数作为过滤器将数据包过滤到 Wireshark 中。 (Data Transport Layer Security 是一些 UDP TLS 协议)
现在,我想使用 C# 和使用 WinPcap 过滤器的 PcapDOTNet 包装器来做同样的事情。
可悲的是,我找不到任何等效的地方,并且 C# 应用程序中无法识别 dtls,因此不再抓取任何数据包。 (由于无法识别字符串,它会使解释器崩溃)
using (PacketCommunicator communicator = selectedDevice.Open(65536, PacketDeviceOpenAttributes.None, 1000))
{
using (BerkeleyPacketFilter filter = communicator.CreateFilter("dtls") {
communicator.SetFilter(filter);
communicator.ReceivePackets(1, packetHandler);
}
}
请问有没有类似的?
编辑:看起来dtls 只是一个显示过滤器,而不是一个捕获过滤器。我只能使用udp port xx(xx 是端口)来捕获过滤器,但由于使用的端口总是随机的,所以我不能。因此,如果您有另一种过滤解决方法,我将很高兴!我更喜欢只捕获所需的数据包,而不是捕获所有内容然后过滤数据......
Wireshark : DTLS
我只想捕获两个数据包。包含Server Hello Done 消息的那一个或包含handshake message 的那一个(带有Record Layer 的那一个):
编辑 2:好的,我很快就能找到我需要的东西,但我需要你的帮助。
This answer from here 必须是解决方案。 tcp[((tcp[12] & 0xf0) >> 2)] = 0x16 正在寻找握手 22,但 dtls 是 udp 而不是 tcp,因此 12 偏移量可能不同。谁能帮我弄清楚将其调整为 dtls 而不是 tcp tls 的正确公式是什么?
我试图在wireshark上使用它,但过滤器无效,我真的不知道为什么。如果至少你可以让它在wireshark中发挥作用,我可以尝试不同的价值自己并得到最终答案。 udp[((udp[12] & 0xf0) >> 2)] = 0x16 不是 wireshark 上的有效过滤器。
【问题讨论】:
-
只是一些额外的细节:除了 CCS 之外的所有其他消息,这里都是握手消息。纪元 0 的那些没有加密,因此可以被解析。 epoch 1 中的那个是加密的,没有额外的数据,无法解析。无论如何,我不确定,为什么您认为服务器打招呼完成和客户端完成(即加密的握手消息)是最重要的。
标签: c# wireshark winpcap dtls pcapdotnet