### pcapAPI中文文档 #### 名称 pcap - 包捕获库 #### 描述 包捕获库(pcap)提供了一个高级接口用于网络数据包的捕获系统。通过这个机制可以访问网络上的所有数据包,包括那些并非直接发往当前主机的数据包。 #### API列表 1. **定义错误缓冲区:** ```c char errbuf[PCAP_ERRBUF_SIZE]; ``` - **功能:** 定义一个足够大的字符串数组用来存储错误信息。 - **用途:** 当调用其他函数时,如果出现错误,会将错误信息写入此缓冲区。 2. **打开实时捕获设备:** ```c pcap_t* pcap_open_live(const char* device, int snaplen, int promisc, int to_ms, char* errbuf) ``` - **功能:** 打开一个实时捕获设备。 - **参数:** - `device`: 捕获设备的名称。 - `snaplen`: 捕获数据包的最大长度。 - `promisc`: 是否设置为混杂模式(非0为是,0为否)。 - `to_ms`: 设置超时时间(毫秒)。 - `errbuf`: 存储错误信息的缓冲区。 - **返回值:** 成功返回指向`pcap_t`结构体的指针;失败返回`NULL`。 3. **创建一个死的`pcap_t`结构体:** ```c pcap_t* pcap_open_dead(int linktype, int snaplen) ``` - **功能:** 创建一个没有与任何捕获设备关联的`pcap_t`结构体。 - **参数:** - `linktype`: 链路类型。 - `snaplen`: 捕获数据包的最大长度。 - **返回值:** 返回指向`pcap_t`结构体的指针。 4. **打开一个离线捕获文件:** ```c pcap_t* pcap_open_offline(const char* fname, char* errbuf) ``` - **功能:** 打开一个包含数据包的文件。 - **参数:** - `fname`: 文件名。 - `errbuf`: 存储错误信息的缓冲区。 - **返回值:** 成功返回指向`pcap_t`结构体的指针;失败返回`NULL`。 5. **创建一个包转储器:** ```c pcap_dumper_t* pcap_dump_open(pcap_t* p, const char* fname) ``` - **功能:** 创建一个用于将捕获的数据包写入文件的转储器。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 - `fname`: 输出文件名。 - **返回值:** 成功返回指向`pcap_dumper_t`结构体的指针;失败返回`NULL`。 6. **设置非阻塞模式:** ```c int pcap_setnonblock(pcap_t* p, int nonblock, char* errbuf); ``` - **功能:** 设置或取消`pcap_t`结构体的非阻塞模式。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 - `nonblock`: 设置非阻塞模式(非0为是,0为否)。 - `errbuf`: 存储错误信息的缓冲区。 - **返回值:** 成功返回`0`;失败返回`-1`。 7. **获取非阻塞模式状态:** ```c int pcap_getnonblock(pcap_t* p, char* errbuf); ``` - **功能:** 获取`pcap_t`结构体的非阻塞模式状态。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 - `errbuf`: 存储错误信息的缓冲区。 - **返回值:** 如果处于非阻塞模式则返回非零值;否则返回`0`。 8. **查找所有捕获设备:** ```c int pcap_findalldevs(pcap_if_t** alldevsp, char* errbuf) ``` - **功能:** 查找并返回所有可用的捕获设备列表。 - **参数:** - `alldevsp`: 指向`pcap_if_t`结构体的指针的指针。 - `errbuf`: 存储错误信息的缓冲区。 - **返回值:** 成功返回`0`;失败返回`-1`。 9. **释放所有捕获设备列表:** ```c void pcap_freealldevs(pcap_if_t* alldevs) ``` - **功能:** 释放之前由`pcap_findalldevs`获取的所有捕获设备列表。 - **参数:** - `alldevs`: 由`pcap_findalldevs`返回的`pcap_if_t`结构体的指针。 10. **查找默认捕获设备:** ```c char* pcap_lookupdev(char* errbuf) ``` - **功能:** 返回默认捕获设备的名字。 - **参数:** - `errbuf`: 存储错误信息的缓冲区。 - **返回值:** 成功返回设备名字;失败返回`NULL`。 11. **查找网络地址和子网掩码:** ```c int pcap_lookupnet(const char* device, bpf_u_int32* netp, bpf_u_int32* maskp, char* errbuf) ``` - **功能:** 获取指定设备的网络地址和子网掩码。 - **参数:** - `device`: 设备名字。 - `netp`: 存储网络地址的指针。 - `maskp`: 存储子网掩码的指针。 - `errbuf`: 存储错误信息的缓冲区。 - **返回值:** 成功返回`0`;失败返回`-1`。 12. **分派数据包处理:** ```c int pcap_dispatch(pcap_t* p, int cnt, pcap_handler callback, u_char* user) ``` - **功能:** 分派数据包到用户提供的回调函数进行处理。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 - `cnt`: 最多处理的数据包数量。 - `callback`: 用户提供的回调函数。 - `user`: 传递给回调函数的用户数据。 - **返回值:** 处理的数据包数量;如果在处理过程中发生错误,返回负数。 13. **循环处理数据包:** ```c int pcap_loop(pcap_t* p, int cnt, pcap_handler callback, u_char* user) ``` - **功能:** 循环调用`pcap_dispatch`直到处理了指定数量的数据包或遇到错误。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 - `cnt`: 最多处理的数据包数量。 - `callback`: 用户提供的回调函数。 - `user`: 传递给回调函数的用户数据。 - **返回值:** 处理的数据包数量;如果在处理过程中发生错误,返回负数。 14. **记录数据包:** ```c void pcap_dump(u_char* user, struct pcap_pkthdr* h, u_char* sp) ``` - **功能:** 将捕获的数据包写入文件。 - **参数:** - `user`: 由`pcap_dump_open`返回的`pcap_dumper_t`结构体的指针。 - `h`: 指向`pcap_pkthdr`结构体的指针,包含数据包的头部信息。 - `sp`: 指向数据包数据的指针。 - **返回值:** 无。 15. **编译过滤表达式:** ```c int pcap_compile(pcap_t* p, struct bpf_program* fp, char* str, int optimize, bpf_u_int32 netmask) ``` - **功能:** 将过滤表达式编译为内核可理解的形式。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 - `fp`: 指向`bpf_program`结构体的指针。 - `str`: 过滤表达式的字符串表示。 - `optimize`: 是否启用优化(非0为是,0为否)。 - `netmask`: 子网掩码。 - **返回值:** 成功返回`0`;失败返回`-1`。 16. **设置过滤器:** ```c int pcap_setfilter(pcap_t* p, struct bpf_program* fp) ``` - **功能:** 设置过滤器。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 - `fp`: 指向已编译的`bpf_program`结构体的指针。 - **返回值:** 成功返回`0`;失败返回`-1`。 17. **释放过滤器:** ```c void pcap_freecode(struct bpf_program* fp) ``` - **功能:** 释放之前编译的过滤器代码。 - **参数:** - `fp`: 指向`bpf_program`结构体的指针。 18. **获取下一个数据包:** ```c const u_char* pcap_next(pcap_t* p, struct pcap_pkthdr* h) ``` - **功能:** 获取下一个数据包。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 - `h`: 指向`pcap_pkthdr`结构体的指针,用来接收数据包头部信息。 - **返回值:** 成功返回指向数据包数据的指针;失败返回`NULL`。 19. **获取下一个数据包(扩展版本):** ```c int pcap_next_ex(pcap_t* p, struct pcap_pkthdr** pkt_header, const u_char** pkt_data) ``` - **功能:** 获取下一个数据包(更安全、更灵活的版本)。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 - `pkt_header`: 指向`pcap_pkthdr`结构体指针的指针,用来接收数据包头部信息。 - `pkt_data`: 指向数据包数据的指针的指针。 - **返回值:** 成功返回`1`;如果没有数据包可读取返回`0`;如果出错返回`-1`。 20. **中断循环处理:** ```c void pcap_breakloop(pcap_t* p) ``` - **功能:** 中断由`pcap_loop`发起的循环处理。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 21. **获取数据链路类型:** ```c int pcap_datalink(pcap_t* p) ``` - **功能:** 获取捕获设备的数据链路类型。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 - **返回值:** 返回数据链路类型的整数值。 22. **列出支持的数据链路类型:** ```c int pcap_list_datalinks(pcap_t* p, int** dlt_buf); ``` - **功能:** 列出设备支持的数据链路类型。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 - `dlt_buf`: 指向整型数组的指针,用来存放数据链路类型。 - **返回值:** 成功返回数据链路类型的数量;失败返回`-1`。 23. **设置数据链路类型:** ```c int pcap_set_datalink(pcap_t* p, int dlt); ``` - **功能:** 设置捕获设备的数据链路类型。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 - `dlt`: 数据链路类型的整数值。 - **返回值:** 成功返回`0`;失败返回`-1`。 24. **根据名称获取数据链路类型:** ```c int pcap_datalink_name_to_val(const char* name); ``` - **功能:** 根据名称获取数据链路类型对应的整数值。 - **参数:** - `name`: 数据链路类型的名称。 - **返回值:** 成功返回数据链路类型的整数值;找不到对应的类型返回`-1`。 25. **根据整数值获取数据链路类型名称:** ```c const char* pcap_datalink_val_to_name(int dlt); ``` - **功能:** 根据整数值获取数据链路类型的名称。 - **参数:** - `dlt`: 数据链路类型的整数值。 - **返回值:** 成功返回数据链路类型的名称;找不到对应的类型返回`NULL`。 26. **根据整数值获取数据链路类型的描述:** ```c const char* pcap_datalink_val_to_description(int dlt); ``` - **功能:** 根据整数值获取数据链路类型的描述信息。 - **参数:** - `dlt`: 数据链路类型的整数值。 - **返回值:** 成功返回数据链路类型的描述信息;找不到对应的类型返回`NULL`。 27. **获取捕获长度限制:** ```c int pcap_snapshot(pcap_t* p) ``` - **功能:** 获取捕获设备的最大捕获长度。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 - **返回值:** 返回捕获长度限制。 28. **检查是否需要字节序转换:** ```c int pcap_is_swapped(pcap_t* p) ``` - **功能:** 检查捕获设备是否需要对数据包中的数据进行字节序转换。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 - **返回值:** 需要转换则返回`1`;不需要转换则返回`0`。 29. **获取主版本号:** ```c int pcap_major_version(pcap_t* p) ``` - **功能:** 获取捕获设备的主版本号。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 - **返回值:** 返回主版本号。 30. **获取次版本号:** ```c int pcap_minor_version(pcap_t* p) ``` - **功能:** 获取捕获设备的次版本号。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 - **返回值:** 返回次版本号。 31. **获取统计信息:** ```c int pcap_stats(pcap_t* p, struct pcap_stat* ps) ``` - **功能:** 获取捕获设备的统计信息。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 - `ps`: 指向`pcap_stat`结构体的指针,用来接收统计信息。 - **返回值:** 成功返回`0`;失败返回`-1`。 32. **获取文件句柄:** ```c FILE* pcap_file(pcap_t* p) ``` - **功能:** 获取与`pcap_t`结构体关联的文件句柄。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 - **返回值:** 返回文件句柄。 33. **获取文件描述符:** ```c int pcap_fileno(pcap_t* p) ``` - **功能:** 获取与`pcap_t`结构体关联的文件描述符。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 - **返回值:** 返回文件描述符。 34. **释放`pcap_t`结构体资源:** ```c void pcap_close(pcap_t* p) ``` - **功能:** 关闭并释放`pcap_t`结构体所占用的资源。 - **参数:** - `p`: 指向`pcap_t`结构体的指针。 - **返回值:** 无。 以上API提供了全面的包捕获和分析功能,能够满足大多数网络监控和数据分析的需求。通过对这些API的合理使用,开发人员可以构建强大的网络监控工具和应用程序。
剩余16页未读,继续阅读
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助