最近在用libnet,libpcap写抓包程序时,遇到了主机字节序列与网络字节序列相互转换的问题。
libpcap捕获的数据包是按照网络字节顺序存储的,但是我们获取数据包的各种参数时,系统是按照自己的存储方式将字节中的数据转换为相应的数值。内存数据的存储分为大端、小端两种方式,对同一部分字节(字节数大于1的选项),因读取方式不同而导致数值不一样,导致误判。因此,在读取数值时需要将对应的网络字节数据转换为主机字节数据,可以使用ntohl将网络字节数据转换为主机字节顺序,也可以使用htonl将主机字节数据转换为网络字节顺序。