recvfrom trouble

Shawn Webb shawnwebb at softhome.net
Fri Dec 12 10:08:21 PST 2003


I'm intercepting recvfrom() so that I can make an IPS (Itrusion Prevention 
System). What it does (or will do) is check all incoming packets against a 
database (linked-list), and if it matches the database, disconnect the user 
and discard the packet.

Here's what I have so far:

static int hacked_recvfrom(struct proc *p, struct recvfrom_args *uap)
{
	int retval;
	struct sockaddr_in client;
	caddr_t orig = NULL;
	int clisize;

	if (uap->from != NULL) orig = uap->from;
	uap->from = (caddr_t)&client;

	retval = recvfrom(p, uap);

	if (orig != NULL) copyout(&client, orig, sizeof(client));
	if (orig != NULL) uap->from = orig;
	else uap->from = NULL;

	return retval;
}
// end of source snip

it doesn't work with non-TCP sockets (where uap->from == NULL), when I try to 
ping google with the module loaded, I get:

-su-2.05b# ping google.com
ping: cannot resolve google.com: Host name lookup failure

Why doesn't this code work?

Thanks,

Shawn Webb



More information about the freebsd-hackers mailing list