Я пытаюсь обрабатывать простой пакетный контроль с помощью сетевых фильтров.C - Не удается получить доступ к saddr
Декларация представляется достаточно проста:
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 для любых подсказок, но не повезло.
EDIT:
Может ли это иметь дело с их так, как я к нему доступ? Сейчас для отладки Я просто пытаюсь напечатать значение с помощью:
printk(KERN_DEBUG "%pI4", iph->saddr);
У вас появляется сообщение об ошибке? Что это? –
он убивает машину. Обычно я просто перезагружаю моментальный снимок в моем vm. Ошибок времени компиляции нет. Есть ли способ получить сообщение об ошибке после сбоя ядра? – kevgliss