我有一个接收IP数据包的用户空间应用程序。它需要确定数据包的类型是 v4 还是 v6。假设"缓冲区"包含数据包,我想到了两种方法:
-
void *check_header(void *buffer) { struct iphdr *iph = (struct iphdr *)buffer; if (iph->version == IPV4) { /* IPv4 */ } else if (iph->version == IPV6) { /* IPv6 */ } ...... }
-
- 找出机器的字节序。
- 相应地访问数据包中的版本字段。
有没有更好的方法来确定数据包类型?
IP
version
字段是第一个字节的底部 4 位。由于这是在字节(而不是多字节)字段中,因此机器的字节序应该无关紧要。但是,对于多字节结构,您将需要它。