Я пытаюсь изменить исходный IP-адрес всех пакетов, выходящих из машины, на то, что я указываю в этом модуле ядра, но каждый раз, когда я пытаюсь получить доступ nh.iph-> saddr Я получаю сообщение об ошибке compile время, которое говорит Struct sk_buff не имеет имени nh
Что я здесь делаю неправильно? Я пропустил какой-то заголовок или что-то?Как связаться с struct sk_buff?
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv4.h>
#include <linux/skbuff.h>
#include <linux/ip.h> /* For IP header */
#include <linux/inet.h> /* For in_aton(); htonl(); and other related Network utility functions */
static struct nf_hook_ops nfho;
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 sk_buff *sb = *skb;
struct in_addr masterIP;
masterIP.s_addr = htonl (in_aton("192.168.1.10"));
sb->nh.iph->saddr = masterIP.s_addr;
return NF_ACCEPT;
}
Обратите внимание, что я бегу Ubuntu 10.04 LTS 64 бита
ядра 2.6.32-33
Спасибо большое = D разрешено ^^ EDIT: контрольная сумма IP, хорошо ... Но почему контрольные суммы транспортного пакета тоже? – Fingolfin
Например, контрольная сумма UDP учитывает так называемый '' ip pseudo header'', что означает, что контрольная сумма UDP использует некоторые поля заголовка IP, такие как исходный и целевой адреса. Я не совсем помню, но я думаю, что TCP также это делает. – Fred