How can I get these packets in the user space application?
Srinivas G.
srinivasg at esntechnologies.co.in
Wed Dec 8 15:01:18 CET 2004
Dear all,
I have developed a very simple/small net filter driver to capture the
network packets from my network path. It was working fine. Whenever a
packet goes through my network path it was simply prints a message. It
was printing the messages fine.
The kernel version is 2.4.18-3 with Red Hat 7.3
My question is: How can I get these packets in the user space
application?
What APIs can I use? Is there any specific APIs are available? If
possible give some links or sample code which explains about it.
Please see the code attached below.
========================================================================
===================
#include <linux/module.h> /* for module parameters */
#include <linux/kernel.h> /* for printk function */
#include <linux/init.h> /* for module explicit
definitions */
#include <linux/netfilter.h> /* for netfilter structure */
#include <linux/netfilter_ipv4.h> /* for IPv4 specific defines */
#include <linux/vmalloc.h> /* for vmalloc function */
#ifdef NETFILTER_DBG
#define PRINTK(fmt,arg...) printk("NET_DBG <%s> | "
fmt,__FUNCTION__,##arg); #else #define PRINTK(fmt,arg...) while(0)
#endif
/* define the maximum packet buffer */
#define MAX_PACK_BUFF 2048
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Srinivas G at ESN Technologies");
/* define netfilter structure here */
static struct nf_hook_ops netfilter_hook;
/* pointer to a buffer */
unsigned char *ptr_packet_buff;
/* function prototype which is called when a packet arrives */ unsigned
int netfilter_drv_hook(unsigned int hooknum,
struct sk_buff **skb,
const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk_buff *))
{
PRINTK("One Packet arrvied!\n");
/* alocate the packet buffer */
ptr_packet_buff = (unsigned char *)vmalloc(MAX_PACK_BUFF);
/* the received packet was dropped here itself */
return NF_DROP;
}
/* netfilter_init: initialization function */
static int
__init init_netfilter(void)
{
PRINTK("invoked!\n");
/* assign the function pointer */
netfilter_hook.hook = netfilter_drv_hook;
/* assign the protocol family i.e. IPv4 */
netfilter_hook.pf = PF_INET;
/* assign the hook number like NF_IP_LOCAL_IN etc. */
netfilter_hook.hooknum = NF_IP_PRE_ROUTING;
/* assign the hook priority */
netfilter_hook.priority = NF_IP_PRI_FIRST;
/* register the netfilter driver with pointer to structure */
nf_register_hook(&netfilter_hook);
return 0;
}
/* netfilter_exit: cleanup function */
static void
__exit netfilter_exit(void)
{
PRINTK("invoked!\n");
/* unregister the driver */
nf_unregister_hook(&netfilter_hook);
}
/* explicit module definitions */
module_init(init_netfilter);
module_exit(netfilter_exit);
========================================================================
====
Any help greatly appreciated.
Thanks and regards,
Srinivas G
More information about the netfilter-devel
mailing list