我可以使用
读取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 ++。
答案 0 :(得分:0)
如果您阅读pcap,则会从网络设备获取原始数据包。可能有几种选择:
在pcap期间使用什么类型的设备定义数据包中的第一个协议头。要了解它,您可以查看全局pcap标题的链接层类型字段。
一旦定义了第一个协议头,就需要打开协议规范并找到:
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 |
您需要:
之后,如果需要,可以获得UDP头(8字节)检查端口,并根据NTP规范解析NTP头。
在您的示例中,NTP标头的总移位将为14 + 20 + 8字节。