【问题标题】:pcap: how to check for packet boundaries in pcap_dispatchpcap:如何检查 pcap_dispatch 中的数据包边界
【发布时间】:2020-01-16 22:35:28
【问题描述】:

我正在使用libpcap 处理 PCAP 文件,查找 IP 标头,提取某些内容,移动到 udp/tcp 并提取某些内容等等。

pcap_dispatch() 将数据包推送到定义为的回调:

typedef void (*pcap_handler)(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes);

如果我正确阅读手册页,上面的bytes 是一个指针,指向来自数据包的caplen 字节数据,其中caplenstruct pcap_pkthdr * 中。

这是否意味着,pcap_handler 例程需要维护数据包缓冲区指针的末尾,并在移动 bytes 指针之前始终检查?

或者,我会在pcap_handler 内分配缓冲区:

u_char *pktbuf = malloc(h->caplen);

它会保证边界。

pcap_dispatch()pcap_loop() 中处理 pcap 的正确方法通常是什么?

【问题讨论】:

    标签: linux network-programming pcap libpcap


    【解决方案1】:

    bytes 保证至少是 h->caplen 大。除此之外,您不需要进行绑定检查。

    【讨论】:

    • 感谢您的评论。但是,如果您尝试访问 PCAP 缓冲区内的 IP 数据包,则可能超出缓冲区边界(例如,由于代码中的错误)。
    • 这就是我说“除此之外”的原因。如果你遵守承诺的h->caplen,你会没事的。如果你不这样做,你就是在找麻烦。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 2011-05-27
    • 2023-03-08
    • 2016-07-02
    • 1970-01-01
    • 2013-06-22
    相关资源
    最近更新 更多