一. 关于ARP协议的基础知识
3. ARP包的填充
二。发送数据包的编程实现
1.填充数据包
.........................紧接上文............................
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;
这些结构体一定能看懂吧,在程序中就是对号入座就好了
.................
------ Made In DLUT | DIP