#c #linux #namespaces #netfilter
Вопрос:
Я пытаюсь использовать функцию подключения netfilter в определенном пространстве имен net, но нет ни одного примера, демонстрирующего, как изменить параметр amp;init_net на наши собственные сети, созданные командой ip.
static unsigned int verify_hookfunc(void *priv, struct sk_buff *skb, const struct nf_hook_state *state)
{
char srcIP[16];
struct iphdr *ip_header = (struct iphdr *)skb_network_header(skb);
sock_buff = skb;
if(!sock_buff)
return NF_ACCEPT;
memset(srcIP, '', sizeof(srcIP));
sprintf(srcIP, "%pI4", amp;ip_header->saddr);
if(strcmp(srcIP, "1.2.3.4") == 0){
printk("see sent modified packetn");
}
return NF_ACCEPT;
}
static int __init init_main(void)
{
/* Netfilter Hook Function Info */
nfho.hook = verify_hookfunc;
nfho.hooknum = NF_BR_PRE_ROUTING;
nfho.pf = PF_BRIDGE;
nfho.priority = INT_MIN;
nf_register_net_hook(amp;init_net, amp;nfho);
printk(KERN_INFO "Successfully inserted the hookn");
return 0;
}
static void __exit cleanup_main(void)
{
struct net *net;
nf_unregister_net_hook(amp;init_net, amp;nfho);
printk(KERN_INFO "Successfully unloaded the hookn");
}
module_init(init_main);
module_exit(cleanup_main);
MODULE_LICENSE("GPLv3");
Теперь у меня есть 4 сетевых пространства имен, созданных командой ip netns.
/var/run/netns
├── ns1
├── ns2
├── ns3
└── ns4
Я хотел бы подключиться к конкретным сетям, таким как ns1, изменив параметр net в :
nf_register_net_hook(amp;init_net, amp;nfho);
Для
nf_register_net_hook(net_ns1, amp;nfho);
Как я мог бы получить структуру net *net_ns1 в функции крючка netfilter?
Спасибо за помощь!