如何更改 PCap.Net 数据包数据?
Posted
技术标签:
【中文标题】如何更改 PCap.Net 数据包数据?【英文标题】:How do I change PCap.Net packet data? 【发布时间】:2018-05-19 15:33:55 【问题描述】:我有一个(生产)WireShark 捕获文件,我需要通过我的(调试)网络“重播”。我可以读取和解释数据包,但在发送数据包之前我需要调整一些细节,例如源 IP 地址和端口。
然而,问题在于 PcapDotNet.Packets.Packet 中的所有数据都是只读的。它只有二传手。 因此,例如设置 Ethernet.IpV4.Source 将不起作用。
IpV4Address.TryParse("192.168.1.10", out var newAddress); // for demo sake.
packet.Ethernet.IpV4.Source = newAddress; // Won't work
是否有一种简单的方法可以避免从头开始构建新数据包,或者这是创建略有不同的数据包的唯一方法?
【问题讨论】:
也许你可以通过反射来做到,但这取决于它是如何存储的。 【参考方案1】:您应该只在旧数据包的基础上创建一个新数据包,而不是就地更改数据包。
您可以在要保留旧数据包的每一层上使用ExtractLayer()
,然后在必要时更改层属性。
在这种情况下,你可以这样做:
IpV4Layer ipV4Layer = packet.Ethernet.IpV4.ExtractLayer();
ipV4Layer.Source = newAddress;
Packet newPacket = PacketBuild.Build(DateTime.Now, packet.Ethernet.ExtractLayer(), ipV4Layer, packet.Ethernet.IpV4.Payload.ExtractLayer());
您可能还想重置 IPv4 校验和,因此您应该这样做:
ipV4Layer.HeaderChecksum = null;
如果你有它们,你可能需要类似于 IPv4 层之上的 UDP 或 TCP 层。
【讨论】:
以上是关于如何更改 PCap.Net 数据包数据?的主要内容,如果未能解决你的问题,请参考以下文章
为啥使用 PCap.NET 发送的数据包没有填写 TCP 选项?
.net 数据包捕获:pcap.net 与 Sharppcap