确定数据包是否为IPv4或IPv6类型

时间:2014-02-14 08:51:35

标签: c network-programming ip

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

  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. 相应地访问数据包中的版本字段。
  2. 有没有更好的方法来确定数据包类型?

1 个答案:

答案 0 :(得分:1)

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