htt*_*ret 5 c networking ethernet
这里的代码片段:
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
....
Run Code Online (Sandbox Code Playgroud)
但是这张图片并没有说它必然是14:
替代文字http://www.dcs.gla.ac.uk/~lewis/networkpages/m04s03EthernetFrame_files/image002.gif
我该怎么做呢?
是的,对于终端站场景,大多数情况下为 14。除非你有一个 802.1Q 帧,否则你会再错过 4 个字节。802.1Q 主要用于路由器/路由器通信中的 VLAN 标记和 QoS。
前导码和起始帧定界符主要由低级固件用于捕获帧。当我们(应用程序)可以访问以太网帧时,通常我们没有前导码和起始帧分隔符。
据我所知,mac 地址的 2 字节长度是以太网 I 的一部分,从未真正获得认可。而具有 6 字节地址的以太网 II/802.3 是我们现在使用的真正常见的以太网。
还想提一下,填充是 0-46,其中 46 来自以太网帧上用于冲突检测 (CD) 目的的最小 64 字节约束。46(pad) + 14(dmac,smac,type) + 4(CRC) = 64 字节
| 归档时间: |
|
| 查看次数: |
14677 次 |
| 最近记录: |