sk_buff 中的 ARP headers 全部错误(linux 内核模块)
ARP headers out of sk_buff comes out all wrong(linux kernel module)
我正在尝试从 nfho
函数中的 skb
中提取 ARP headers。这是我的代码:
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 嗅探时,一些数据包绕过了我的钩子,即使它显示了错误的值......
谁能告诉我这是什么问题?
您的函数犯了一个非正式的逻辑谬误 "begging the question"。 return 值应该表示 "is this ARP or not?"
但是如果你不知道这是否正确(因为这是要确认或反驳的命题),你怎么能从数据包中提取 ARP header?
arp_hdr
函数只是 skb_network_header
的包装器,它将指针转换为 arp header 类型。
我正在尝试从 nfho
函数中的 skb
中提取 ARP headers。这是我的代码:
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 嗅探时,一些数据包绕过了我的钩子,即使它显示了错误的值......
谁能告诉我这是什么问题?
您的函数犯了一个非正式的逻辑谬误 "begging the question"。 return 值应该表示 "is this ARP or not?"
但是如果你不知道这是否正确(因为这是要确认或反驳的命题),你怎么能从数据包中提取 ARP header?
arp_hdr
函数只是 skb_network_header
的包装器,它将指针转换为 arp header 类型。