0

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

0 回答 0