如何检查以太网头是否为IEEE 802.1Q类型?

时间:2017-10-05 19:38:43

标签: c ethernet packet

我使用pcap_open_offline来解析数据包。我要检查以太网头是否为IEEE 802.1Q类型。我知道我需要检查802.1Q标签中的前16位是否等于8100,但我不知道该怎么做。或者如果你知道另一种方式我可以试试。

1 个答案:

答案 0 :(得分:0)

假设您想要一个C语言的解决方案,这是一个简单的实现:

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