int main(int argc, char **argv) { static xyc *Z; static nde *N; static double **A, *u; initop(argc, argv); fp2mesh(stdfp(),Z,N); ary2(A,dim1(Z)+1, dim1(Z)+1); ary1(u,dim1(Z)+1); set_A(Z,N,A); set_u(Z,u); esolver(A,u); plt(NULL,NULL,Z,N,u); sleep(1000); return 0; }
/* * dissect/print packet */ void got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet) { static int count = 1; /* packet counter */ /* declare pointers to packet headers */ const struct sniff_ethernet *ethernet; /* The ethernet header [1] */ const struct sniff_ip *ip; /* The IP header */ const struct sniff_tcp *tcp; /* The TCP header */ const char *payload; /* Packet payload */ int size_ip; int size_tcp; int size_payload; //printf("\nPacket number %d:\n", count); count++; /* define ethernet header */ ethernet = (struct sniff_ethernet*)(packet); /* define/compute ip header offset */ ip = (struct sniff_ip*)(packet + SIZE_ETHERNET); size_ip = IP_HL(ip)*4; if (size_ip < 20) { printf(" * Invalid IP header length: %u bytes\n", size_ip); return; } /* * OK, this packet is TCP. */ /* define/compute tcp header offset */ tcp = (struct sniff_tcp*)(packet + SIZE_ETHERNET + size_ip); size_tcp = TH_OFF(tcp)*4; if (size_tcp < 20) { printf(" * Invalid TCP header length: %u bytes\n", size_tcp); return; } //printf(" Src port: %d\n", ntohs(tcp->th_sport)); //printf(" Dst port: %d\n", ntohs(tcp->th_dport)); if(tcp->th_flags == 2) //SYN Packet - Start of connection { //printf("\tSYN signal\n"); c=(struct connection*)malloc(sizeof(struct connection)); c->srcip=ip->ip_src; c->destip=ip->ip_dst; c->srcport=tcp->th_sport; c->destport=tcp->th_dport; c->noofbytes[0]=0; c->noofbytes[1]=0; c->duration=0; c->flag=-1; time(&(c->starttime)); insertconnection(c); } else if((tcp->th_flags & TH_FIN) == 1) //FIN packet detected -rewrite the code . Track tcp connection properly { ptr=first; while(ptr!=NULL) { if(ptr->srcip.s_addr==ip->ip_src.s_addr && ptr->destip.s_addr==ip->ip_dst.s_addr && ptr->srcport==tcp->th_sport && ptr->destport==tcp->th_dport) { ptr->noofbytes[0]+=20; ptr->flag++; break; } else if(ptr->srcip.s_addr==ip->ip_dst.s_addr && ptr->destip.s_addr==ip->ip_src.s_addr && ptr->srcport==tcp->th_dport && ptr->destport==tcp->th_sport) { ptr->noofbytes[1]+=20; ptr->flag++; break; } else ptr=ptr->next; } if(ptr->flag==1) { time(&(ptr->endtime)); ptr->duration=(int)(ptr->endtime-ptr->starttime); //printf("\tFIN\n"); printf("no of bytes down:%u\n",ptr->noofbytes[1]); printf("no of bytes up:%u\n",ptr->noofbytes[0]); printf("duration of time:%u\n",ptr->duration); printf("Src Ip:%s\n",inet_ntoa(ptr->srcip)); printf("Dst Ip:%s\n",inet_ntoa(ptr->destip)); printf("Src Port:%d \n",ntohs(ptr->srcport)); printf("dest Port:%d \n",ntohs(ptr->destport)); printf("------------------\n",sizeof(u_short),sizeof(int)); //compare_rules\\(stdfip(inet_ntoa(ptr->srcip)),stdfip(inet_ntoa(ptr->destip)),stdfp(ntohs(ptr->srcport)),stdfp(ntohs(ptr->destport)),"1","1","1","1");//char dest_ip[13],char src_pno[6],char dest_pno[6],char duration[6],char protocol[2],char num_pso[11],char num_psr[11]); /* write to file*/ //TCP protocol passed as 0 strcpy(temp[0],stdfip(inet_ntoa(ptr->srcip))); strcpy(temp[1],stdfip(inet_ntoa(ptr->destip))); strcpy(temp[2],stdfp(ntohs(ptr->srcport))); strcpy(temp[3],stdfp(ntohs(ptr->destport))); strcpy(temp[4],stdfdur(ptr->duration)); strcpy(temp[5],stdfnfb(ptr->noofbytes[0])); strcpy(temp[6],stdfnfb(ptr->noofbytes[1])); fprintf(fp3,"%s%s%s%s%s%s%s%s\n",temp[0],temp[1],temp[2],temp[3],temp[4],"0",temp[5],temp[6]); fclose(fp3); fp3=fopen("buffer.dat","a+"); } } //printf("\tsequence no:%u\n",tcp->th_seq); //printf("\tacknowledge no:%u\n",tcp->th_ack); /* define/compute tcp payload (segment) offset */ payload = (u_char *)(packet + SIZE_ETHERNET + size_ip + size_tcp); /* compute tcp payload (segment) size */ size_payload = ntohs(ip->ip_len) - (size_ip + size_tcp); ptr=first; while(ptr!=NULL) { if(ptr->srcip.s_addr==ip->ip_src.s_addr && ptr->destip.s_addr==ip->ip_dst.s_addr && ptr->srcport==tcp->th_sport && ptr->destport==tcp->th_dport) { ptr->noofbytes[0]+=20; if (size_payload > 0) { ptr->noofbytes[0]+=size_payload; } break; } else if(ptr->srcip.s_addr==ip->ip_dst.s_addr && ptr->destip.s_addr==ip->ip_src.s_addr && ptr->srcport==tcp->th_dport && ptr->destport==tcp->th_sport) { ptr->noofbytes[1]+=20; if (size_payload > 0) { ptr->noofbytes[1]+=size_payload; } break; } else ptr=ptr->next; } /* if (size_payload > 0) { printf(" Pay-load (%d bytes):\n", size_payload); //print_payload(payload, size_payload); } */ return; }