【问题标题】:How to unpack NTP UDP packet using pcap如何使用 pcap 解压 NTP UDP 数据包
【发布时间】:2017-05-17 06:25:37
【问题描述】:

我可以使用

读取 UDP 数据包
void my_callback(u_char *useless, const struct pcap_pkthdr* pkthdr, const u_char* packet) 

我的数据包有 hexa 输出:

08 00 27 E5 B5 3B 52 54 00 12 35 02 08 00 45 00 00 4C 7C E7 00 00 40 11 3C 28 5B BD 59 C6 0A 00 02 0F 00 7B 00 7B 00 38 B7 9D 24 02 03 E8 00 00 04 A8 00 00 07 51 83 BC 03 DC DC C5 CC 47 F1 F1 69 C3 DC C5 CF 37 D2 5F A7 F5 DC C5 CF 38 3C 2D C2 CF DC C5 CF 38 3C 32 0B 9A

我知道,是NTP 包。

如何提取数据?剪切以太网帧等。

感谢您的帮助。

我正在使用 pcap c++​​。

【问题讨论】:

    标签: sockets udp pcap


    【解决方案1】:

    如果您阅读 pcap,您会从网络设备获得原始数据包。可能有几个选项:

    • 从以太网设备读取数据包
    • 从 vlan 设备读取数据包
    • 从其他设备读取数据包

    在 pcap 期间使用哪种设备定义了数据包中的第一个协议标头。要了解它,您可以查看全局 pcap 标头的链接层类型字段。

    一旦你定义了第一个协议头,你需要打开协议规范并找到:

    • 标头的大小(在您的情况下,它看起来像普通的以太网标头 - 14 字节 08 00 27 E5 B5 3B 52 54 00 12 35 02 08 00
    • 如何找到封装的数据包类型(在您的情况下,最后一个 08 00 表示 IP)

    一旦找到 IP 标头 (45 00 00 4C 7C E7 00 00 40 11 ...),您就可以确定 IP 标头长度:

        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |Version|  IHL  |Type of Service|          Total Length         |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |         Identification        |Flags|      Fragment Offset    |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |  Time to Live |    Protocol   |         Header Checksum       |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                       Source Address                          |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                    Destination Address                        |
    

    这里你需要:

    • IHL 定义 IP 标头的大小。这是 IP 报头第一个字节的低 4 位。在您的情况下,它是 0x5。这意味着 5 个字或 20 个字节。
    • 协议定义了哪些数据封装在 IP 头中。在你的情况下 0x11 (IPPROTO_UDP)

    之后,您可以根据需要获取 UDP 标头(8 字节)检查端口并根据 NTP 规范解析 NTP 标头。

    在您的示例中,NTP 标头的总位移为 14+20+8 个字节。

    【讨论】:

      猜你喜欢
      • 2023-02-08
      • 1970-01-01
      • 2013-12-20
      • 2017-03-29
      • 1970-01-01
      • 1970-01-01
      • 2022-07-08
      • 1970-01-01
      • 2011-03-31
      相关资源
      最近更新 更多