2016-11-12 1 views
1

Когда я использую NETFILTER API,Правильно ли, что значение skb-> data_len, skb-> len, skb-> mac_len равно 0?

iph = ip_hdr(skb); 
saddr = iph->saddr;  //unsigned long 
daddr = iph->daddr;  //unsigned long 

но saddr и daddr некорректные значения.

Так я тестировал

printk("len = %u , data_len = %u , mac_len = %u , hdr_len = %u\n",skb->len , skb->data_len , skb->mac_len , skb->hdr_len); 
printk("truesize = %u , data = %x\n",skb->truesize , &skb->data); 

Результат:

enter image description here

это правильно?

+2

значение извлекается из 'skb', кажется, не очень хорошо назначен. Добавьте текст в свой вопрос вместо изображения и укажите [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) –

ответ

2

Try экстракт таким образом:

struct iphdr *ip_hdr = (struct iphdr *)skb_network_header(skb); 

и доступ таким образом:

printk("source address = %u destination address = %u\n", ip_hdr->saddr, ip_hdr->daddr); 
Смежные вопросы