日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

手把手教你玩转ARP包(二)

發(fā)布時(shí)間:2024/4/11 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 手把手教你玩转ARP包(二) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文鏈接:http://blog.csdn.net/piggyxp/article/details/19607

? 作者:

???CSDN? VC/MFC 網(wǎng)絡(luò)編程?PiggyXP??^_^ ??目錄:

??? 一.????關(guān)于ARP協(xié)議的基礎(chǔ)知識(shí)

???? 3. ARP包的填充

二。發(fā)送數(shù)據(jù)包的編程實(shí)現(xiàn)

?? 1.填充數(shù)據(jù)包

?

.........................緊接上文............................

?

3.ARP包的填充 1) 請(qǐng)求包的填充: ?????比如我們的電腦MAC地址為 aa-aa-aa-aa-aa-aa,IP為 192.168.0.1 ?我們想要查詢 192.168.0.99的MAC地址,應(yīng)該怎么來做呢? ?????首先填充DLC Header,通過前面的學(xué)習(xí)我們知道,想要知道某個(gè)計(jì)算機(jī)對(duì)應(yīng)的MAC地址是要給全網(wǎng)發(fā)送廣播的,所以接收方MAC肯定是 ffffffffffff,發(fā)送方MAC當(dāng)然是自己啦,于是我們的DLC Header就填充完成了,如圖,加粗的是我們要手動(dòng)輸入的值(當(dāng)然我編的程序比較智能,會(huì)根據(jù)你選擇的ARP包類型幫你自動(dòng)填入一些字段,你一用便知^_^)。
DLC Header
字段 長度(Byte) 填充值
接收方MAC 6 ffffffffffff
發(fā)送方MAC 6 aaaaaaaaaaaa
Ethertype 2 0x0806
圖3 ARP請(qǐng)求包中 DLC Header內(nèi)容 ??? 接下來是ARP幀,請(qǐng)求包的操作碼當(dāng)然是 1,發(fā)送方的MAC以及IP當(dāng)然填入我們自己的,然后要注意一下,這里的接收方IP填入我們要查詢的那個(gè)IP地址,就是192.168.0.99了,而接收方MAC填入任意值就行,不起作用,于是,如圖,
??????????????????????????? ARP Frame
字段 長度(Byte) 填充值
硬件類型 2 1
上層協(xié)議類型 2 0800
MAC地址長度 1 6
IP地址長度 1 4
操作碼 2 1
發(fā)送方MAC 6 aaaaaaaaaaaa
發(fā)送方IP 4 192.168.0.1
接收方MAC 6 任意值 xxxxxxxxxxxx
接收方IP 4 192.168.0.99
填充數(shù)據(jù) 18 0
???????????????? 圖4 ARP請(qǐng)求包中 ARP幀的內(nèi)容 ??? 如果我們構(gòu)造一個(gè)這樣的包發(fā)送出去,如果 192.168.0.99存在且是活動(dòng)的,我們馬上就會(huì)收到一個(gè)192.168.0.99發(fā)來的一個(gè)響應(yīng)包,我們可以查看一下我們的ARP緩存列表,是不是多了一項(xiàng)類似這樣的條目:??????????? ?????? 192.168.0.99????????????????? bb-bb-bb-bb-bb-bb ???? 是不是很神奇呢? ???? 我們?cè)賮砜匆幌翧RP響應(yīng)包的構(gòu)造 2)?響應(yīng)包的填充 ???? 有了前面詳細(xì)的解說,你肯定就能自己說出響應(yīng)包的填充方法來了吧,所以我就不細(xì)說了,列兩個(gè)表就好了 ???? 比如說給 192.168.0.99(MAC為 bb-bb-bb-bb-bb-bb)發(fā)一個(gè)ARP響應(yīng)包,告訴它我們的MAC地址為 aa-aa-aa-aa-aa-aa,就是如此來填充各個(gè)字段
DLC Header
字段 長度(Byte) 填充值
接收方MAC 6 bbbbbbbbbbbb
發(fā)送方MAC 6 aaaaaaaaaaaa
Ethertype 2 0x0806
????????????? 圖5 ARP響應(yīng)包中 DLC Header內(nèi)容
ARP Frame
字段 長度(Byte) 填充值
硬件類型 2 1
上層協(xié)議類型 2 0800
MAC地址長度 1 6
IP地址長度 1 4
操作碼 2 2
發(fā)送方MAC 6 aaaaaaaaaaaa
發(fā)送方IP 4 192.168.0.1
接收方MAC 6 bbbbbbbbbbbb
接收方IP 4 192.168.0.99
填充數(shù)據(jù) 18 0
????????? 圖6 ARP響應(yīng)包中 ARP幀的內(nèi)容 ??? 這樣192.168.0.99的ARP緩存中就會(huì)多了一條關(guān)于我們192.168.0.1的地址映射。 ??? 好了,終于到了編程實(shí)現(xiàn)它的時(shí)候了^_^

二.??發(fā)送ARP包的編程實(shí)現(xiàn)

1.????????填充數(shù)據(jù)包

上面的那些關(guān)于ARP包各個(gè)字段的表格,對(duì)應(yīng)在程序里就是結(jié)構(gòu)體,對(duì)應(yīng)于上面的表格,于是我們需要三個(gè)下面這樣的結(jié)構(gòu)體

// DLC Header

typedef?struct?tagDLCHeader????????????????????

{

???unsigned?char??????DesMAC[6];?????????????/* destination HW addrress */

???unsigned?char??????SrcMAC[6];?????????????/* source HW addresss */

???unsigned?short?????Ethertype;????????????????/* ethernet type */

} DLCHEADER, *PDLCHEADER;

// ARP Frame

typedef?struct?tagARPFrame?????????????????????

{

??????????unsigned?short?????????HW_Type;???????????/* hardware address */

??????????unsigned?short?????????Prot_Type;?????????????/* protocol address */

??????????unsigned?char??????HW_Addr_Len;???????/* length of hardware address */

??????????unsigned?char??????Prot_Addr_Len;?????????/* length of protocol address */

??????????unsigned?short?????????Opcode;????????????????/* ARP/RARP */

?

??????????unsigned?char??????Send_HW_Addr[6];?????/* sender hardware address */

??????????unsigned?long??????Send_Prot_Addr;??????/* sender protocol address */

??????????unsigned?char??????Targ_HW_Addr[6];?????/* target hardware address */

??????????unsigned?long??????Targ_Prot_Addr;??????/* target protocol address */

??????????unsigned?char??????padding[18];

} ARPFRAME, *PARPFRAME;

// ARP Packet = DLC header + ARP Frame

typedef?struct?tagARPPacket????????????????

{

?????DLCHEADER?????dlcHeader;

?????ARPFRAME??????arpFrame;

} ARPPACKET, *PARPPACKET;

?

這些結(jié)構(gòu)體一定能看懂吧,在程序中就是對(duì)號(hào)入座就好了

.................? ==================================================================? ???? 不爽這么快又滿了,文章不知道要拆成幾份了..-_-b ???? 請(qǐng)期待下文 : ) ???????????????????????????????-----? Finished at?2004-05-29 19:41

????????????????????????????????------??Made In????? ? DLUT | DIP

總結(jié)

以上是生活随笔為你收集整理的手把手教你玩转ARP包(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。