【问题标题】:PCAP Ethertype ReturnPCAP 以太网类型返回
【发布时间】:2012-04-03 14:47:22
【问题描述】:

我正在尝试识别我正在接收的数据包的以太类型。以太类型 ID 为 608,在 Ethertype.h(libpcap 1.2.1) 中没有对应的定义。大多数接收到的数据包的类型为 8,在 Ethertype.h 中也没有相应的定义。有没有人知道这背后的原因是什么,或者我应该联系 TCPDump 并提供错误报告。

【问题讨论】:

    标签: c linux pcap tcpdump


    【解决方案1】:

    您要捕获的pcap_t 上的pcap_datalink() 的返回值是多少?

    如果不是DLT_EN10MB(其值为1),则您的数据包不是以太网数据包,您不应将它们解析为以太网数据包。

    如果是DLT_EN10MB,那么是十六进制608还是十进制608?如果是十进制 608,它是一个长度字段而不是一个类型字段。这同样适用于 8,它是相同的十进制或十六进制,因此是长度值而不是类型值。

    【讨论】:

    • 当我通过 pcap_datalink 运行检查时,捕获设备的文件处理程序确实返回 1。至于我发现的其余数据,它们都是十六进制的。
    • 没关系,我想通了,结果我需要在 ethertype 上使用 ntohs()。
    【解决方案2】:

    来自手册页:

    “ntohs() 函数将无符号短整数 netshort 从网络字节顺序转换为主机字节顺序。”。

    来自我的代码:

    如果(ntohs(ethernet->ether_type)==0x0800) ...

    【讨论】:

      猜你喜欢
      • 2014-03-26
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 2011-04-21
      • 2020-12-07
      • 2018-05-15
      相关资源
      最近更新 更多