c - 确定数据包类型是 IPv4 还是 IPv6

标签 c network-programming ip

我有一个接收 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 位。由于这是在字节(而不是多字节)字段中,因此机器的字节顺序应该是无关的。但是,对于多字节结构,您将需要它。

关于c - 确定数据包类型是 IPv4 还是 IPv6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21774702/

相关文章:

c - 如何使用C获取目录中最旧的文件?

C:相当于 Windows 的 pthread_barrier_t

c++ - 涉及非常快速地跨网络发送数据的 C/C++ 技术

c - 为什么同样的负载在三天后会出现略微不同的 IEEE 802.15.4 帧?

go - 您可以使用 icmp 定位特定端口吗?

python - 在扭曲中失去连接后如何获取客户端IP地址

c++ - 如何在 C 中打印没有空格的 NUL 字符?

c - 做一会儿还是一会儿?

C# - 如何在连接到 (RAS) VPN 时获取 IP 地址

python - 如何根据端口号对IP地址进行排序?