我正在使用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);
}
}
}