示例#1
0
文件: main.c 项目: tsukud-y/estiva
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;
}
示例#2
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;
}