如何更改 PCap.Net 数据包数据?

How do I change PCap.Net packet data?

我有一个(生产)WireShark 捕获文件,我需要通过我的(调试)网络'replay'。我可以读取和解释数据包,但在发送数据包之前我需要调整一些细节,例如源 IP 地址和端口。

但是,问题是 PcapDotNet.Packets.Packet 中的所有数据都是只读的。它只有二传手。 因此,例如设置以太网。IpV4.Source 将不起作用。

IpV4Address.TryParse("192.168.1.10", out var newAddress); // for demo sake.
packet.Ethernet.IpV4.Source = newAddress; // Won't work

是否有一种简单的方法可以避免从头开始构建新数据包,或者这是创建略有不同的数据包的唯一方法?

与其就地更改数据包,不如在旧数据包的基础上创建一个新数据包。

您可以在每个要保留旧数据包的图层上使用 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 层的东西,以防您有它们。