C - Невозможно получить доступ к saddr - PullRequest
4 голосов
/ 13 февраля 2012

Я пытаюсь выполнить простую проверку пакетов с помощью перехватчиков сетевого фильтра.

Декларация кажется довольно простой:

unsigned int hook_func(unsigned int hooknum, struct sk_buff *skb, 
            const struct net_device *in,
            const struct net_device *out, int (*okfn)(struct sk_buff *))
{

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

}

И я могу получить доступ к части протокола сетевого заголовка

iph->protocol == IPPROTO_TCP

Однако

iph->saddr

Сбой.Какие-либо предложения?Я чувствую, что это довольно простая ошибка с моей стороны, но все примеры следуют либо этому методу, либо они просто используют

struct iphdr *iph = ip_hdr(skb);

Я получаю одинаковое поведение с обоими методами.Я просмотрел skbuff.h на предмет подсказок, но мне не повезло.

РЕДАКТИРОВАТЬ:

Может ли это быть связано с тем, как я к нему обращаюсь??Прямо сейчас для отладки я просто пытаюсь распечатать значение, используя:

printk(KERN_DEBUG "%pI4", iph->saddr);

1 Ответ

2 голосов
/ 13 февраля 2012

%pI4 принимает адрес, поэтому вы читаете, возможно, недопустимую память.Вместо этого используйте &iph->saddr.

...