手把手教你玩转ARP包(二)
原文鏈接:http://blog.csdn.net/piggyxp/article/details/19607
? 作者:
???CSDN? VC/MFC 網絡編程?PiggyXP??^_^ ??目錄:??? 一.????關于ARP協議的基礎知識
???? 3. ARP包的填充
二。發送數據包的編程實現
?? 1.填充數據包
?
.........................緊接上文............................
?
3.ARP包的填充 1) 請求包的填充: ?????比如我們的電腦MAC地址為 aa-aa-aa-aa-aa-aa,IP為 192.168.0.1 ?我們想要查詢 192.168.0.99的MAC地址,應該怎么來做呢? ?????首先填充DLC Header,通過前面的學習我們知道,想要知道某個計算機對應的MAC地址是要給全網發送廣播的,所以接收方MAC肯定是 ffffffffffff,發送方MAC當然是自己啦,于是我們的DLC Header就填充完成了,如圖,加粗的是我們要手動輸入的值(當然我編的程序比較智能,會根據你選擇的ARP包類型幫你自動填入一些字段,你一用便知^_^)。| DLC Header | ||
| 字段 | 長度(Byte) | 填充值 |
| 接收方MAC | 6 | ffffffffffff |
| 發送方MAC | 6 | aaaaaaaaaaaa |
| Ethertype | 2 | 0x0806 |
| ??????????????????????????? ARP Frame | ||
| 字段 | 長度(Byte) | 填充值 |
| 硬件類型 | 2 | 1 |
| 上層協議類型 | 2 | 0800 |
| MAC地址長度 | 1 | 6 |
| IP地址長度 | 1 | 4 |
| 操作碼 | 2 | 1 |
| 發送方MAC | 6 | aaaaaaaaaaaa |
| 發送方IP | 4 | 192.168.0.1 |
| 接收方MAC | 6 | 任意值 xxxxxxxxxxxx |
| 接收方IP | 4 | 192.168.0.99 |
| 填充數據 | 18 | 0 |
| DLC Header | ||
| 字段 | 長度(Byte) | 填充值 |
| 接收方MAC | 6 | bbbbbbbbbbbb |
| 發送方MAC | 6 | aaaaaaaaaaaa |
| Ethertype | 2 | 0x0806 |
| ARP Frame | ||
| 字段 | 長度(Byte) | 填充值 |
| 硬件類型 | 2 | 1 |
| 上層協議類型 | 2 | 0800 |
| MAC地址長度 | 1 | 6 |
| IP地址長度 | 1 | 4 |
| 操作碼 | 2 | 2 |
| 發送方MAC | 6 | aaaaaaaaaaaa |
| 發送方IP | 4 | 192.168.0.1 |
| 接收方MAC | 6 | bbbbbbbbbbbb |
| 接收方IP | 4 | 192.168.0.99 |
| 填充數據 | 18 | 0 |
二.??發送ARP包的編程實現
1.????????填充數據包
上面的那些關于ARP包各個字段的表格,對應在程序里就是結構體,對應于上面的表格,于是我們需要三個下面這樣的結構體
// 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;
?
這些結構體一定能看懂吧,在程序中就是對號入座就好了
.................? ==================================================================? ???? 不爽這么快又滿了,文章不知道要拆成幾份了..-_-b ???? 請期待下文 : ) ???????????????????????????????-----? Finished at?2004-05-29 19:41????????????????????????????????------??Made In????? ? DLUT | DIP
總結
以上是生活随笔為你收集整理的手把手教你玩转ARP包(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手把手教你玩转ARP包(一)
- 下一篇: 手把手教你玩转ARP包(三)