Для моего задания мне было поручено сделать маршрутизатор. Тип пакета ethe rnet vector <unsigned char>
, а заголовок ethe rnet выглядит следующим образом:
Сейчас у меня нет большого опыта работы с векторами, но мой Вопрос в том, как извлечь часть полезной нагрузки? Например, если пакет ethe rnet является пакетом ARP, я хотел бы иметь возможность использовать следующую структуру для проверки кода операции и, по существу, иметь возможность сделать что-то вроде
arp_hdr *arphdr = (arp_hdr *) packet_arp;
struct arp_hdr
{
unsigned short arp_hrd; /* format of hardware address */
unsigned short arp_pro; /* format of protocol address */
unsigned char arp_hln; /* length of hardware address */
unsigned char arp_pln; /* length of protocol address */
unsigned short arp_op; /* ARP opcode (command) */
unsigned char arp_sha[ETHER_ADDR_LEN]; /* sender hardware address */
uint32_t arp_sip; /* sender IP address */
unsigned char arp_tha[ETHER_ADDR_LEN]; /* target hardware address */
uint32_t arp_tip; /* target IP address */
} __attribute__ ((packed)) ;
И ethe rnet заголовок также дается:
struct ethernet_hdr
{
#ifndef ETHER_ADDR_LEN
#define ETHER_ADDR_LEN 6
#endif
uint8_t ether_dhost[ETHER_ADDR_LEN]; /* destination ethernet address */
uint8_t ether_shost[ETHER_ADDR_LEN]; /* source ethernet address */
uint16_t ether_type; /* packet type ID */
} __attribute__ ((packed)) ;