C语言 确定数据包类型是 IPv4 还是 IPv6



我有一个接收IP数据包的用户空间应用程序。它需要确定数据包的类型是 v4 还是 v6。假设"缓冲区"包含数据包,我想到了两种方法:

  1. void *check_header(void *buffer) {
    struct iphdr *iph = (struct iphdr *)buffer;
    if (iph->version == IPV4) {
        /* IPv4 */
    } else if (iph->version == IPV6) {
        /* IPv6 */
    }
    ......
    }
    
    1. 找出机器的字节序。
    2. 相应地访问数据包中的版本字段。

有没有更好的方法来确定数据包类型?

IP

version字段是第一个字节的底部 4 位。由于这是在字节(而不是多字节)字段中,因此机器的字节序应该无关紧要。但是,对于多字节结构,您将需要它。

最新更新