gpt4 book ai didi

c - 在c中构建vlan头

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:05 25 4
gpt4 key购买 nike

我需要构建一个 vlan header 。我有构建 eh header (struct ether_header) 的代码,它工作正常。

/* Ethernet header */
memcpy(eh->ether_shost,src_mac_.data(), 6);
memcpy(eh->ether_dhost,socketAddress.sll_addr , 6);

/* Ethertype field */
eh->ether_type = htons(ETH_P_IP);

我没有找到 vlan_eth_header 的结构,所以我创建了自己的结构并像这样填充它:

struct vlan_ethhdr {
u_int8_t ether_dhost[ETH_ALEN]; /* destination eth addr */
u_int8_t ether_shost[ETH_ALEN]; /* source ether addr */
u_int16_t h_vlan_proto;
u_int16_t h_vlan_TCI;
u_int16_t ether_type;
};

/* Ethernet header */
memcpy(eh->ether_shost,src_mac_.data(), 6);
memcpy(eh->ether_dhost,socketAddress.sll_addr , 6);
eh->h_vlan_proto = htons(0x8100);
eh->h_vlan_TCI = htons(VLAN_ID);
/* Ethertype field */
eh->ether_type = htons(ETH_P_IP);

看来我做错了。似乎 Wireshak 甚至没有识别数据包(旧代码发送了 tcp 数据包并正确发送了它们)。有什么建议吗?

最佳答案

http://wiki.wireshark.org/VLAN

  • DstMAC [6 字节]
  • SrcMAC [6 字节]
  • 键入 [2 个字节]
    • 0x8100
  • VLANTag [4 字节]
    • 优先级[0..2位]
      • 0
    • CFI [3 位]
      • 0
    • ID [4..15 位]
    • 以太网类型 [16..31]
      • 0x0800 (IP)

我猜你没有正确设置 VLAN_ID。

首先,您应该通过在 byte[] 缓冲区中创建一些测试数据包来避免任何结构填充问题,这样您就可以确保一切正确。然后您可以自信地调试您的结构和 htons 字节顺序,因为您知道正确的值应该是什么。

关于c - 在c中构建vlan头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13166094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com