Bonjour tout le monde,
Je débute dans la programmation de module linux et avec l'utilisation de netfilter en C.
J'aimerais pouvoir faire un programme/module linux permettant de mettre en place des fonctions hook afin de pouvoir DROP ou ACCEPT les paquets ARP.
Pour le moment, j'ai tenté de faire ce code :
Mais je n'ai jamais réussis a avoir mon message : "ARP !\n" dans mon log : /var/log/syslog
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #include <linux/netfilter_arp/arp_tables.h> static struct nf_hook_ops netfilter_ops_in; static struct nf_hook_ops netfilter_ops_out; static unsigned int main_hook(unsigned int hooknum, struct sk_buff *skb, const struct net_device *in, const struct net_device *out, int (*okfn)(struct sk_buff*)) { printk(KERN_ALERT "ARP !\n"); return NF_ACCEPT; } static int __init mon_module_init(void) { printk(KERN_ALERT "init. \n"); netfilter_ops_in.hook = main_hook; netfilter_ops_in.pf = NF_ARP; netfilter_ops_in.hooknum = NF_ARP_IN; netfilter_ops_out.hook = main_hook; netfilter_ops_out.pf = NF_ARP; netfilter_ops_out.hooknum = NF_ARP_OUT; netfilter_ops_out.priority = NF_INET_LOCAL_OUT; nf_register_hook(&netfilter_ops_out); return 0; } static void __exit mon_module_cleanup(void) { printk(KERN_ALERT "exit.\n"); nf_unregister_hook(&netfilter_ops_out); } module_init(mon_module_init); module_exit(mon_module_cleanup);
Alors que j'ai bien les messages d'init et d'exit et que ma génération de paquets ARP fonctionne (Je l'ai vérifié avec wireshark).
De plus, quand je compile, j'obtiens ce warning :
Merci d'avance pour votre aide,warning: assignment from incompatible pointer type [enabled by default]
netfilter_ops_out.hook = main_hook;
Partager