2017-10-05 2 views
0

Ich verwende pcap_open_offline zum Parsen von Paketen. I was zu prüfen, ob Ethernet-Header Typ IEEE 802.1Q ist. Ich weiß, ich muss überprüfen, ob die ersten 16 Bits im 802.1Q-Tag gleich 8100 sind, aber ich weiß nicht, wie es geht. Oder wenn Sie einen anderen Weg kennen, kann ich es versuchen.Wie überprüft man, ob der Ethernet-Header vom Typ IEEE 802.1Q ist?

+0

Read [fragen], bietet eine [MCVE] und alle erforderlichen Informationen. – Olaf

+0

Hängt davon ab, welche Sprache Sie verwenden. Angenommen es ist C, ist der Wert 0x8100 in den Bytes 12, 13 des Pakets (0-basiert). Byte [12] ist 0x81 und Byte [13] ist 0 - weil dieses Zeug normalerweise im Big-Endian-Format beschrieben wird. – ddbug

Antwort

0

Angenommen, Sie eine Lösung in C wollen, hier ist eine einfache Implementierung:

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; 
} 
Verwandte Themen