【问题标题】:Add PPOOE layer tp packet - convert length into byte添加 PPPOE 层 tp 数据包 - 将长度转换为字节
【发布时间】:2014-04-21 02:55:06
【问题描述】:

我有播放Pcap 文件的应用程序,我尝试添加用PPPOE 层包装我的数据包的功能。

除了大数据包之外几乎所有工作都完成了,我还不明白如何在添加PPPOE 层后设置新的长度。

例如这个数据包:

如您所见,此数据包长度为972 bytes (03 cc),我只想将其转换为十进制,在我的代码中看到此packet byte[] 后,我可以看到此值在我的数据包@ 中转换为3 and 204 987654328@,所以我的问题是这个计算是如何工作的?

【问题讨论】:

    标签: c# .net packet libpcap


    【解决方案1】:

    这两个字节以 bigendian 表示法表示一个短 (System.Int16)(最高有效字节在前)。

    您可以通过两种方法来获取这两个字节的十进制值。一种是 BitConverter 类,另一种是自己计算。

    比特转换器

    // the bytes
    var bytes = new byte[] {3, 204};
    // are the bytes little endian?
    var littleEndian = false;  // no
    
    // What architecure is the BitConverter running on?
    if (BitConverter.IsLittleEndian != littleEndian) 
    {
       // reverse the bytes if endianess mismatch
       bytes = bytes.Reverse().ToArray();
    }
    // convert
    var value =  BitConverter.ToInt16( bytes , 0);
    value.Dump(); // or Console.WriteLine(value); --> 972
    

    计算你自己

    两个字节的基数 256:

    // the bytes
    var bytes2 = new byte[] {3, 204};
    // [0] * 256 + [1]
    var value2 = bytes2[0] * 256 + bytes2[1];  // 3 * 256 + 204
    value2.Dump();  // 972
    

    【讨论】:

      猜你喜欢
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 2018-10-07
      • 2013-12-12
      • 1970-01-01
      • 2019-02-13
      • 2017-01-01
      • 1970-01-01
      相关资源
      最近更新 更多