网络协议栈设计(八)---网络层ARP协议代码实现(发送)

    xiaoxiao2021-04-16  28

    网络协议栈设计(八)

    //Network_ARP_send.h #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]; }; /* if the needer mac addr is not in arp_table, so request */ void load_arp_packet(u_int8_t *destination_ip); void network_arp_send(u_int8_t *destination_ip, u_int8_t *ethernet_dest_mac); //Network_ARP_send.cpp #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请求报文此字段设置为全0 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

    最新回复(0)