pcap_loop 子例程
用途
收集和处理包。
库
pcap 库 (libpcap.a)
语法
描述
pcap_loop 子例程读取和处理包。 可以调用此子例程来读取和处理存储在先前保存的包捕获数据文件 (称为 savefile) 中的包。 子例程还可以读取和处理正在实时捕获的包。
此子例程类似于 pcap_dispatch 子例程,但它继续读取包,直到处理了 cnt 包,达到 EOF (在脱机读取的情况下) 或发生错误为止。 发生实时读超时时,不会返回此值。 即,对 pcap_open_live 子例程指定非零读超时,然后调用 pcap_loop 子例程允许接收和处理超时发生时到达的任何包。
请注意,第三个参数 callback的类型为 pcap_handler。 这是一个指向具有三个参数的用户提供的子例程的指针。 定义此用户提供的子例程,如下所示:
void user_routine(u_char *user, struct pcap_pkthdr *phrd, u_char *pdata)参数 user将是传递到 pcap_dispatch 子例程的用户参数。 参数 phdr是指向 pcap_pkthdr 结构的指针,该结构在 savefile 中的每个包之前。 参数 pdata指向包数据。 这允许用户定义自己对其过滤包的处理。
参数
| 项 | 描述 |
|---|---|
| 回调 (callback) | 指向用户提供的例程,将对读取的每个包调用该例程。 用户负责提供有效指针,如果提供了无效指针,那么会发生不可预测的结果。 注: 还可以将 pcap_dump 子例程指定为回调参数。 如果已完成此操作,请首先调用 pcap_dump_open 子例程。 然后使用指向从 pcap_dump_open 子例程返回的 pcap_dumper_t 结构的指针作为 pcap_dispatch 子例程的用户参数。 以下程序片段说明了此用法:
|
| Cnt | 指定返回前要处理的最大包数。 负值会导致 pcap_loop 子例程永远循环,或者直到达到 EOF 或发生错误。 0 的 cnt 处理所有包,直到发生错误或达到 EOF 为止。 |
| p | 指向从 pcap_open_offline 或 pcap_open_live 子例程返回的包捕获描述符。 这将用于存储读取的包数据。 |
| 用户 | 指定要传递到 callback 例程的第一个自变量。 |
返回值
成功完成时, pcap_loop 子例程返回 0。 如果在 savefile中已达到 EOF ,那么也会返回 0。 如果 pcap_loop 子程序不成功,则返回 -1。 在这种情况下,可以使用 pcap_geterr 子例程或 pcap_perror 子例程来获取错误文本。