Networking Forums

Networking Forums > Computer Networking > Linux Networking > How to use netfilter userspace logging ?

Reply
Thread Tools Display Modes

How to use netfilter userspace logging ?

 
 
Ashish Shukla आशीष शुक्ल
Guest
Posts: n/a

 
      12-02-2007, 07:27 PM
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

[cross-posted to comp.os.linux.networking and
comp.os.linux.development.system]

I'm running Ubuntu Gutsy (amd64 architecture). I'm writing a simple test
application which will print network packet information logged via 'ULOG'
target in 'netfilter'[1].

I'm using following 'iptables' command to create a rule which logs all TCP
packets in 'ppp0' interface in INPUT chain (following command might wrap):

# iptables -A INPUT -i ppp0 -p tcp -j ULOG --ulog-nlgroup 1 --ulog-prefix
capture --ulog-qthreshold 1

I've verified working of above rule, by replacing ULOG with LOG.

Following is the test program I wrote:

- ----8<----8<----
// ulog-test.c
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <poll.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>

#include <libnetfilter_log/libnetfilter_log.h>

#define BUFSIZE 1024

static struct nflog_handle* h;
static struct nflog_g_handle* gh;

int
ulog_cb(struct nflog_g_handle* gh, struct nfgenmsg* nfmsg,
struct nflog_data* nfad, void* data)
{
fprintf(stderr, "Callbacked\n");
}

void
cleanup(int signo)
{
fprintf(stderr, "terminating...\n");
if(!gh)
{
nflog_unbind_group(gh);
gh = NULL;
}
if(!h)
{
nflog_close(h);
h = NULL;
}
}

int
main()
{
struct pollfd fd[1];
int retval;
int running = 1;
void* buffer;

if((!(buffer = malloc(BUFSIZE))))
{
fprintf(stderr, "malloc() failed.\n");
return 2;
}

if(!(h = nflog_open()))
{
fprintf(stderr, "nflog_open() failed.\n");
return 1;
}
if(!(gh = nflog_bind_group(h, 1)))
{
fprintf(stderr, "nflog_bind_group() failed.\n");
return 1;
}

signal(SIGINT, cleanup);

fprintf(stderr, "nflog_set_mode() = %d\n", nflog_set_mode(gh,
NFULNL_COPY_META, BUFSIZE));
fprintf(stderr, "nflog_callback_register() = %d\n",
nflog_callback_register(gh, ulog_cb, NULL));
fprintf(stderr, "nflog_set_timeout() = %d\n", nflog_set_timeout(gh, 5));
fprintf(stderr, "Registered callback\n");

memset(&fd, 0, sizeof(struct pollfd));
fd[0].fd = nflog_fd(h);
fd[0].events = POLLIN;

do {
fprintf(stderr, "Polling\n");
if((retval = poll(fd, 1, -1) ) == -1)
{
fprintf(stderr, "before EINTR\n");
if(errno == EINTR)
{
if(!h) running = 0;
}
}
else
{
fprintf(stderr, "before POLLIN\n");
if(fd[0].revents & POLLIN)
{
fprintf(stderr, "Read %d bytes.\n",
(retval = recv(fd, buffer, BUFSIZE, 0)));
if(retval == -1)
{
if(errno == EINTR)
{
running = 0;
}
}
}
}
} while(running);

if(buffer)
{
free(buffer);
buffer = NULL;
}

fprintf(stderr, "Exiting...\n");
return 0;
}

// vim:ts=2:sw=2
- ---->8---->8----

To compile above program, I use:

% cc -o ulog-test ulog-test.c `pkg-config --libs --cflags libnetfilter_log`

To run above program, I use:

# ./ulog-test

In above program, I'm not able to receive any packets. I expect it to print
at least 'Read n bytes'. If there are any errors in above program, please
point out.

References:
[1] - http://netfilter.org/projects/libnet...log/index.html

TIA
- --
Ashish Shukla आशीष शुक्ल http://wahjava.wordpress.com/
·-- ·- ···· ·--- ·- ···- ·- ·--·-· --· -- ·- ·· ·-·· ·-·-·- -·-· --- --
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFHUxUfHy+EEHYuXnQRAiZ6AKC/39J57Tyvo9pvvFTcfzOqdEOK2ACgnZji
L2YAD1zQrw+IqMDSBPbQI7g=
=KGAW
-----END PGP SIGNATURE-----
 
Reply With Quote
 
 
 
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
netfilter & SIP Miss Terre Linux Networking 11 09-30-2007 10:53 AM
Userspace packet queuing with libipq: ip_conntrack does not defragment? Daneel Linux Networking 5 05-10-2007 08:15 AM
Problem with Netfilter Prafulla T Linux Networking 0 12-30-2006 03:42 AM
netfilter libiptc jasonsig Linux Networking 0 05-05-2006 12:07 PM
Netfilter - is there something faster ? Marcin Szczepaniak Linux Networking 2 03-23-2005 04:13 AM



1 2 3 4 5 6 7 8 9 10 11