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