2017-10-05 9 views
0

J'utilise pcap_open_offline pour analyser les paquets. Je ce qu'il faut vérifier si l'en-tête ethernet est de type IEEE 802.1Q. Je sais que je dois vérifier si les 16 premiers bits de la balise 802.1Q sont égaux à 8100, mais je ne sais pas comment le faire. Ou si vous connaissez un autre moyen, je peux l'essayer.Comment vérifier si l'en-tête Ethernet est de type IEEE 802.1Q?

+0

Lire [demander], fournir un [mcve] et toutes les informations nécessaires. – Olaf

+0

Dépend de la langue que vous utilisez. En supposant que C est, la valeur 0x8100 est en octets 12, 13 du paquet (base 0). Byte [12] est 0x81 et octet [13] est 0 - parce que ce truc est habituellement décrit dans le grand format d'Endian. – ddbug

Répondre

0

Supposons que vous souhaitez une solution en C, voici une implémentation simple:

struct ether_header { 
    /* destination MAC */ 
    uint8_t dst_mac[6]; 
    /* source MAC */ 
    uint8_t src_mac[6]; 
    /* EtherType */ 
    uint16_t ether_type; 
}; 

#define ETHERTYPE_VLAN 0x8100 

/* this method gets the packet data read from pcap file and returns 1 if ether type is 802.1Q, 0 otherwise */ 
int is_IEEE_802_1Q(const uint8_t* packet_data) { 
    /* cast ethernet header */ 
    ether_header* eth_header = (ether_header*)packet_data; 

    /* assuming big endian as most pcap files are in big endian */ 
    if (eth_header->ether_type == ETHERTYPE_VLAN) { 
     return 1; 
    } 

    return 0; 
}