c# - 如何判断 Pcap.Net TCP 数据包中还剩下多少数据空间

标签 c# tcp ethernet pcap pcap.net

我正在使用 Pcap 构建网络 tcp 包:

    private static Packet BuildTcpPacket()
    {
        EthernetLayer ethernetLayer =
            new EthernetLayer
            {
                Source = new MacAddress("01:01:01:01:01:01"),
                Destination = new MacAddress("02:02:02:02:02:02"),
                EtherType = EthernetType.None, // Will be filled automatically.
            };

        IpV4Layer ipV4Layer =
            new IpV4Layer
            {
                Source = new IpV4Address("1.2.3.4"),
                CurrentDestination = new IpV4Address("11.22.33.44"),
                Fragmentation = IpV4Fragmentation.None,
                HeaderChecksum = null, // Will be filled automatically.
                Identification = 123,
                Options = IpV4Options.None,
                Protocol = null, // Will be filled automatically.
                Ttl = 100,
                TypeOfService = 0,
            };

        TcpLayer tcpLayer =
            new TcpLayer
            {
                SourcePort = 4050,
                DestinationPort = 25,
                Checksum = null, // Will be filled automatically.
                SequenceNumber = 100,
                AcknowledgmentNumber = 50,
                ControlBits = TcpControlBits.Acknowledgment,
                Window = 100,
                UrgentPointer = 0,
                Options = TcpOptions.None,
            };

        PayloadLayer payloadLayer =
            new PayloadLayer
            {
                Data = new Datagram(Encoding.ASCII.GetBytes("hello world")),
            };

        PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, tcpLayer, payloadLayer);

        return builder.Build(DateTime.Now);
    }

由于数据包是通过以太网发送的,因此最大总数据包大小限制为 1500 字节。有没有什么方法可以用来检查页面标题的大小,以便我知道实际数据还剩下多少空间?

另外,如果我需要发送超过 1500 字节的数据,我是否只需将其拆分,或者是否需要遵守任何其他规则?

最佳答案

是的。

您可以使用 ILayer.Length 属性来获取每个图层的长度。

您可以使用 IP 分段或仅使用常规 TCP(这是大多数应用程序所做的)来拆分数据包。

关于c# - 如何判断 Pcap.Net TCP 数据包中还剩下多少数据空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12989891/

相关文章:

c++ - 当一个套接字在后台执行操作时如何处理两个套接字

python - 发送原始以太网数据包,其中数据字段的长度在类型字段中

vhdl - 在 vhdl 中计算(和验证)以太网 FCS (crc32)

java - 使用多线程代码防止DOS攻击

c# - 您如何监控 TcpListener 积压的大小?

c++ - OpenCV:如何从以太网摄像头捕获帧

c# - 压缩多帧 Tiff

c# - 将数字加倍 - 左移与乘法

c# - 如何从代码中区分 MySQL 和 MS SQL 数据库?

c# 字符串比较方法返回第一个不匹配的索引