sk_buff中的ARP标题出错了(linux内核模块)

时间:2017-04-09 00:39:23

标签: networking kernel c arp

我正在尝试从skb函数中的nfho中提取ARP标头。这是我的代码:

int is_arp(struct sk_buff *skb) {
    struct arphdr *hdr = arp_hdr(skb);
    if(hdr->ar_pln != 4 || ar_hln != 6 || hdr->ar_hrd != ARPHRD_ETHER) {
        printk("%d   %d\n", pln, hln);
        return NOT_ARP;
        }
    return ARP_PACKET;
}

函数arp_hdr()嵌入在内核中...而且如果我打印ip长度(当然是4字节... IPV4)和硬件长度,我仍然会得到错误的值(好吧... mac地址6是必须的)在使用Wireshark嗅探时,一些数据包绕过我的钩子,即使它显示错误的值......

任何人都可以告诉我这是什么问题吗?

1 个答案:

答案 0 :(得分:2)

你的功能提出了一个非正式地称为“#34;乞求问题"”的逻辑谬误。返回值应该表示"是否是这个ARP?"

但如果您不知道这是否属实(因为这是要确认或反驳的命题),您如何从数据包中提取ARP标头?

arp_hdr函数只是skb_network_header的包装器,它将指针转换为arp头类型。