我正在尝试从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嗅探时,一些数据包绕过我的钩子,即使它显示错误的值......
任何人都可以告诉我这是什么问题吗?
答案 0 :(得分:2)
你的功能提出了一个非正式地称为“#34;乞求问题"”的逻辑谬误。返回值应该表示"是否是这个ARP?"
但如果您不知道这是否属实(因为这是要确认或反驳的命题),您如何从数据包中提取ARP标头?
arp_hdr
函数只是skb_network_header
的包装器,它将指针转换为arp头类型。