手把手教你玩转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
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
