Фрагмент кода отсюда:
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
{
....
/* retireve the position of the ip header */
ih = (ip_header *) (pkt_data +
14); //length of ethernet header
....
Но в этом изображении не говорится, что это обязательно 14:
(источник: lewis в www.dcs.gla.ac.uk)
Как я должен сделать это правильно?
В 802.3 адреса отправителя и получателя являются 48-битными MAC-адресами. 6 + 6 + 2 = 14
Заголовок Ethernet имеет фиксированную ширину, однако протоколы расширения, такие как 802.1q для vlan / qos, являются общими и эффективно расширяют заголовок L2.