我有一个接收 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 位。由于这是在字节(而不是多字节)字段中,因此机器的字节顺序应该是无关的。但是,对于多字节结构,您将需要它。
关于c - 确定数据包类型是 IPv4 还是 IPv6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21774702/