我正在使用 PcapDot.Net 项目的 DLL,并尝试拆分 TCP 和 UDP 数据包数据。
例如,如果我的有效载荷长度是 20 字节,我想将其分成 2 块 10 字节。
当然以太网层、IPv4层和传输层保持不变,我只修复了这个校验和。
因此,这适用于 UDP,如果我的数据包的有效负载在播放新的 2 个数据包后为 100 个字节,我可以在它们上看到 2 个数据包,每个数据包的有效负载长度为 50 个字节。
在这种情况下,我的问题是 TCP,如果在播放新的 2 个数据包后我的有效负载为 100 个字节,我可以看到 2 个数据包,但在这种情况下没有任何有效负载,Wireshark 注意到除第一个数据包外的每个数据包都被视为 TCP 重传。
我究竟做错了什么 ?
这是我拆分数据的函数:
private IEnumerable<Packet> SplitPacketData(Packet packet, List<List<byte>> lists)
{
EthernetLayer ethernet = (EthernetLayer)packet.Ethernet.ExtractLayer();
IpV4Layer ipV4Layer = (IpV4Layer)packet.Ethernet.IpV4.ExtractLayer();
DateTime packetTimestamp = packet.Timestamp;
TransportLayer transportlayer = GetTransportLayer(packet);
if (transportlayer == null)
{
yield return packet;
}
else
{
foreach (List<byte> list in lists)
{
ipV4Layer.HeaderChecksum = null;
transportlayer.Checksum = null;
PayloadLayer payloadLayer = new PayloadLayer
{
Data = new Datagram(list.ToArray())
};
yield return PacketBuilder.Build(packetTimestamp, ethernet, ipV4Layer, transportlayer, payloadLayer);
}
}
}