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