【问题标题】:ARP headers out of sk_buff comes out all wrong(linux kernel module)sk_buff 中的 ARP 标头全部错误(linux 内核模块)
【发布时间】:2017-04-09 00:39:23
【问题描述】:

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

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 嗅探时,一些数据包绕过了我的钩子,即使它显示了错误的值......

谁能告诉我是什么问题?

【问题讨论】:

    标签: networking kernel c arp


    【解决方案1】:

    您的函数犯了一个非正式的逻辑谬误,称为“乞求问题”。返回值应该表明“这是不是 ARP?”

    但如果你不知道这是否属实(因为这是要确认或反驳的命题),你怎么能从数据包中提取一个 ARP 头呢?

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

    【讨论】:

    • 这与在 中完成 ARP 验证的方式相同......如果数据包不在 ARP 协议的条款下,那些值是指出的将恰好被损坏。否则,在获取skb格式的数据包时,如何识别数据包是否为ARP数据包?
    • 首先,ARP 栈只接收具有 ETH_ARP ethertype 的帧。 (这并不意味着它们不是垃圾或截断的有效载荷。)
    猜你喜欢
    • 1970-01-01
    • 2011-08-29
    • 2016-08-15
    • 2021-04-30
    • 2016-01-23
    • 2017-10-01
    • 2015-05-04
    • 2012-04-11
    • 2013-12-17
    相关资源
    最近更新 更多