繁体   English   中英

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

[英]How do I change PCap.Net packet data?

我有一个(生产)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

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

而不是就地更改数据包,您应该仅基于旧数据包创建一个新数据包。

您可以在要保留在旧数据包中的每个图层上使用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层的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM