【问题标题】:Determining if a packet if type IPv4 or IPv6确定数据包是 IPv4 还是 IPv6
【发布时间】:2014-03-13 12:56:28
【问题描述】:

我有一个接收 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. 相应地访问数据包中的版本字段。

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

【问题讨论】:

  • 你这两种做法不是基本一样吗?只是一开始你实际上并不关心字节序。

标签: c network-programming ip


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 2010-10-22
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    相关资源
    最近更新 更多