手把手教你玩转ARP包(二)
原文鏈接: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 |
| ??????????????????????????? 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 |
| DLC Header | ||
| 字段 | 長度(Byte) | 填充值 |
| 接收方MAC | 6 | bbbbbbbbbbbb |
| 發(fā)送方MAC | 6 | aaaaaaaaaaaa |
| Ethertype | 2 | 0x0806 |
| 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 |
二.??發(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手把手教你玩转ARP包(一)
- 下一篇: 手把手教你玩转ARP包(三)