【问题标题】: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