ARP协议攻击代码相关

#define ETH2_HEADER_LEN 14
struct arp_header {
unsigned short hardware_type; //硬件类型
unsigned short protocol_type; //协议类型
unsigned char hardware_len; //硬件地址长度
unsigned char protocol_len; //协议地址长度
unsigned short opcode; //操作字段
unsigned char sender_mac[MAC_LENGTH]; //源mac地址
unsigned char sender_ip[IPV4_LENGTH]; //源ip地址
unsigned char target_mac[MAC_LENGTH]; //目的mac地址
unsigned char target_ip[IPV4_LENGTH]; //目的ip地址
};
unsigned char buffer[BUF_SIZE];

在以上定义的情况下,想请问,
struct arp_header *arp_req =
(struct arp_header *) (buffer + ETH2_HEADER_LEN);
是什么意思

buffer应该是整个以太网包的数据, 以太网有个HEADER, 长度就是上面的ETH2_HEADER_LEN,后面是ARP包,buffer+ ETH2_HEADER_LEN,指向的就是ARP包的数据了,(struct arp_header *)是把这个指针转换成arp_header结构指针,方便后面的代码用结构体的方式访问里面的数据