Я пытаюсь выполнить простую проверку пакетов с помощью перехватчиков сетевого фильтра.
Декларация кажется довольно простой:
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);