网络协议栈设计(八)
#pragma once
#include"Header_Include.h"
struct arp_pkt
{
u_int16_t hardware_type;
u_int16_t protocol_type;
u_int8_t hardware_addr_length;
u_int8_t protocol_addr_length;
u_int16_t op_code;
u_int8_t source_mac[
6];
u_int8_t source_ip[
4];
u_int8_t destination_mac[
6];
u_int8_t destination_ip[
4];
};
void load_arp_packet(u_int8_t *destination_ip);
void network_arp_send(u_int8_t *destination_ip, u_int8_t *ethernet_dest_mac);
#include"Network_ARP_send.h"
#include"Ethernet.h"
#include"Resource.h"
extern u_int8_t local_mac[
6];
extern u_int8_t local_ip[
4];
extern int ethernet_upper_len;
u_int8_t arp_buffer[MAX_SIZE];
void load_arp_packet(u_int8_t *destination_ip)
{
struct arp_pkt *arp_packet = (
struct arp_pkt *)(arp_buffer);
arp_packet->hardware_type = htons(ARP_HARDWARE);
arp_packet->protocol_type = htons(ETHERNET_IP);
arp_packet->hardware_addr_length =
6;
arp_packet->protocol_addr_length =
4;
arp_packet->op_code = htons(ARP_REQUEST);
int i;
for (i =
0; i <
6; i++)
{
arp_packet->source_mac[i] = local_mac[i];
}
for (i =
0; i <
4; i++)
{
arp_packet->source_ip[i] = local_ip[i];
}
for (i =
0; i <
6; i++)
{
arp_packet->destination_mac[i] =
0x00;
}
for (i =
0; i <
4; i++)
{
arp_packet->destination_ip[i] = destination_ip[i];
}
}
void network_arp_send(u_int8_t *destination_ip, u_int8_t *ethernet_dest_mac)
{
load_arp_packet(destination_ip);
ethernet_upper_len =
sizeof(
struct arp_pkt);
ethernet_send_packet(arp_buffer,ethernet_dest_mac, ETHERNET_ARP);
}
ARP发送实现起来比较简单,下一篇我们带来ARP接收数据包分析。
转载请注明原文地址: https://ju.6miu.com/read-672846.html