ARP協議學習筆記

來源:互聯網
上載者:User

一、準備工作:

1、本機環境:Windows XP SP3、電信ADSL 2M家庭寬頻

2、開發工具:WildPackets OmniPeek V5.1.4

                    Visual C++ 6.0

                    FlexEdit V2.3.1871

 

二、ARP協議概念:

1、ARP的資料結構

typedef struct arphdr<br />{<br /> unsigned short arp_hdr;<br /> unsigned short arp_pro;<br /> unsigned char arp_hln;<br /> unsigned char arp_pln;<br /> unsigned short arp_opt;<br /> unsigned char arp_sha[6];<br /> unsigned long arp_spa;<br /> unsigned char arp_tha[6];<br /> unsigned long arp_tpa;<br />}ARPHDR,*PARPHDR;<br />

 

2、ARP和RARP使用相同的前序結構,。

  硬體類型欄位:指明了發送方想知道的硬體介面類型,乙太網路的值為1;

  協議類型欄位:指明了發送方提供的高層協議類型,IP為0800(16進位);

  硬體地址長度和協議長度:指明了硬體地址和高層協議地址的長度,這樣ARP報文就可以在任意硬體和任意協議的網路中使用;

  操作欄位:用來表示這個報文的類型,ARP請求為1,ARP響應為2,RARP請求為3,RARP響應為4;

  發送方的硬體地址(0-2位元組):源主機硬體地址的前3個位元組;

  發送方的硬體地址(3-5位元組):源主機硬體地址的後3個位元組;

  發送方IP(0-1位元組):源主機硬體地址的前2個位元組;

  發送方IP(2-3位元組):源主機硬體地址的後2個位元組;

  目的硬體地址(0-1位元組):目的主機硬體地址的前2個位元組;

  目的硬體地址(2-5位元組):目的主機硬體地址的後4個位元組;

  目的IP(0-3位元組):目的主機的IP地址。

 

三、分析資料包:

1、先看ARP請求(ARP  Request):

2、再看ARP應答(ARP  Response):

 

四、相關代碼:

1、下面是MSDN中執行個體代碼,用來向指定IP地址發送ARP請求,來擷取他的MAC地址:

// SendARP.cpp : Defines the entry point for the console application.<br />// ARP 協議學習筆記<br />// By Koma 09:47 2009-09-12</p><p>#include <windows.h><br />#include <stdio.h><br />#include <tchar.h><br />#include <iphlpapi.h></p><p>#include <Winsock2.h><br />#pragma comment(lib,"Ws2_32.lib")<br />#pragma comment(lib,"iphlpapi.lib")</p><p>int main(int argc, char* argv[])<br />{<br />HRESULT hr;<br />IPAddr ipAddr;<br />ULONG pulMac[2];<br />ULONG ulLen;<br />char*pstrIP = "192.168.1.121";</p><p>ipAddr= inet_addr(pstrIP);<br />ulLen= 6;<br />memset(pulMac, 0xff, sizeof (pulMac));</p><p>hr = SendARP (ipAddr, 0, pulMac, &ulLen);<br />if(NO_ERROR == hr)<br />{<br />printf ("返回資訊:%08x,返回長度:%8d/n", hr, ulLen);<br />size_t i, j;<br />char * szMac = new char[ulLen*3];<br />PBYTE pbHexMac = (PBYTE) pulMac;</p><p>// Convert the binary MAC address into human-readable<br />memset(szMac,0,sizeof(szMac));<br />memset(pbHexMac,0,sizeof(pbHexMac));</p><p>for (i = 0, j = 0; i < ulLen - 1; ++i)<br />{<br />j += sprintf (szMac + j, "%02X:", pbHexMac[i]);<br />}<br />sprintf (szMac + j, "%02X", pbHexMac[i]);<br />printf ("返回MAC地址為:%s/n", szMac);<br />delete [] szMac;<br />}<br />else<br />{// Error.<br />printf("IP地址:%s不存在,或被防火牆攔截!/n",pstrIP);<br />}<br />return 0;<br />}

 

2、程式運行效果:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.