读书频道 > 网站 > 网页设计 > 网络分析技术揭秘:原理、实践与WinPcap深入解析
2.5.1 wpcap.dll库中的重要函数
12-08-11    叶孤城
收藏    我要投稿   
本书结合著名的开源软件库WinPcap来说明网络分析技术的实现原理及使用方法。其中包括WinPcap内核驱动,编译与使用,数据包的捕获、发送、内核过滤与接收,以及网络流量的统计与网络状态的分析等重要内容,而且作...立即去当当网订购
 2.5用户空间库接口函数
本节简要介绍wpcap.dll与Packet.dll库提供的主要接口函数,详细的说明参见后续各章的相关内容。
2.5.1wpcap.dll库中的重要函数
wpcap.dll库中的接口函数分为两部分:一部分是与libpcap库兼容的,另一部分是与libpcap库不兼容的,现分别介绍如下。
1.与libpcap库兼容的函数
第一部分是与libpcap库兼容的函数,其可兼容UNIX平台,所以这些函数可在Windows与Linux平台上工作。这些函数如下所示。
pcap_open_live函数用于打开本地主机的网络适配,并且可进行网络数据包的捕获,其原型如下:
pcap_t *爌cap_open_live (const char *device, int snaplen, int promisc, int to_ms,
    char *ebuf);
pcap_open_dead函数用于创建一个pcap_t结构体,而不是用于数据捕获,其原型如下:
pcap_t *爌cap_open_dead (int linktype, int snaplen);
pcap_open_offline函数用于打开一个libpcap格式的存储文件,来读取数据包,其原型如下:
pcap_t *爌cap_open_offline (const char *fname, char *errbuf);
pcap_close函数用来释放打开函数pcap_openXXX所获得的相关资源,其原型如下:
void爌cap_close (pcap_t *p);
pcap_findalldevs函数用于返回所找到的适配器列表,其原型如下:
int爌cap_findalldevs (pcap_if_t **alldevsp, char *errbuf);
pcap_freealldevs函数用于释放由pcap_findalldevs返回的适配器列表,其原型如下:
void爌cap_freealldevs (pcap_if_t *alldevsp);
pcap_handler为捕获数据包的回调函数的原型,其原型如下:
typedef void(*爌cap_handler )(u_char *user, const struct pcap_pkthdr *pkt_header,
    const u_char *pkt_data);
pcap_dispatch函数用于接收一组数据包,其原型如下:
int爌cap_dispatch (pcap_t *p, int cnt, pcap_handler callback, u_char *user);
pcap_loop函数用于接收一组数据包,其原型如下:
int爌cap_loop (pcap_t *p, int cnt, pcap_handler callback, u_char *user);
pcap_breakloop函数用于设置一个标志位,该标志会强制pcap_dispatch函数或pcap_loop函数返回,不再继续循环,其原型如下:
void爌cap_breakloop (pcap_t *);
pcap_next函数用于返回下一个可用的数据包,其原型如下:
u_char *爌cap_next (pcap_t *p, struct pcap_pkthdr *h);
pcap_next_ex函数用于从一个网络适配器设备或从一个脱机文件中读取一个数据包,替代pcap_next()函数,其原型如下:
int爌cap_next_ex (pcap_t *p, struct pcap_pkthdr **pkt_header,
    const u_char **pkt_data);
pcap_sendpacket函数用于发送单个原始数据包一次或多次,其原型如下:
int爌cap_sendpacket (pcap_t *p, u_char *buf, int size);
pcap_compile函数用于将一个用高级语言描述的过滤表达式编译成一个能够被过滤虚拟机所执行的低层字节码,其原型如下:
int爌cap_compile (pcap_t *p, struct bpf_program *fp, char *str,
    int optimize, bpf_u_int32 netmask);
pcap_comiple_nopcap函数用于将高级语言描述的过滤表达式转换成能被过滤虚拟机所执行的低层字节码。该函数在不需要打开适配器的情况下就可以执行此转换,其原型如下:
int爌cap_compile_nopcap (int snaplen_arg, int linktype_arg,
    struct bpf_program *program, char *buf, int optimize, bpf_u_int32 mask);
pcap_setfilter函数用于将一个过滤器的字节码与一个内核捕获实例相关联,其原型如下:
int爌cap_setfilter (pcap_t *p, struct bpf_program *fp);
pcap_freecode函数用于释放pcap_compile或pcap_compile_nopcap函数用来存储字节码的program结构体,其原型如下:
void爌cap_freecode (struct bpf_program *fp);
pcap_stats函数用于返回当前捕获的统计信息,其原型如下:
int爌cap_stats (pcap_t *p, struct pcap_stat *ps);
pcap_dump_open函数用于打开一个文件,写入数据包,其原型如下:
pcap_dumper_t *爌cap_dump_open (pcap_t *p, const char *fname);
pcap_dump函数用于将数据包存储到文件,其原型如下:
void爌cap_dump (u_char *user, const struct pcap_pkthdr *h, const u_char *sp);
pcap_dump_flush函数将输出缓冲写入存储文件,这样,任何使用pcap_dump函数存储但还没有写入文件的数据包,会被立刻写入文件,其原型如下:
int爌cap_dump_flush (pcap_dumper_t *p);
pcap_dump_close函数用于关闭一个存储文件,其原型如下:
void爌cap_dump_close (pcap_dumper_t *p);
2.与libpcap不兼容的函数
第二部分是与libpcap不兼容的函数,是针对Windows平台的部分扩展函数,是对libpcap库的扩展,只能用于Windows平台。
pcap_live_dump函数用于将捕获的数据存储到内核文件中,其原型如下:
int爌cap_live_dump (pcap_t *p, char *filename, int maxsize, int maxpacks);
pcap_live_dump_ended函数用于判断内核文件存储是否结束,其原型如下:
int爌cap_live_dump_ended (pcap_t *p, int sync);
pcap_stats_ex函数用于返回当前捕获的统计信息,其原型如下:
struct pcap_stat *爌cap_stats_ex (pcap_t *p, int *pcap_stat_size);
pcap_setmode函数用于将工作模式设置为mode,其原型如下:
int爌cap_setmode (pcap_t *p, int mode);
pcap_setmintocopy函数用于定义最少字节数,对适配器执行一次读操作时,要求内核缓冲区中的数据达到该字节数后才可返回,其原型如下:
int爌cap_setmintocopy (pcap_t *p, int size);
pcap_sendqueue_alloc函数用于分配一个发送队列,其原型如下:
pcap_send_queue *爌cap_sendqueue_alloc (u_int memsize);
pcap_sendqueue_destroy函数用于释放与一个发送队列相关的所有资源,其原型如下:
void爌cap_sendqueue_destroy (pcap_send_queue *queue);
pcap_sendqueue_queue函数用于把一个原始数据包添加到queue参数所指定的发送队列的尾部,其原型如下:
int爌cap_sendqueue_queue (pcap_send_queue *queue,
    const struct pcap_pkthdr *pkt_header, const u_char *pkt_data);
pcap_sendqueue_transmit函数用于发送一个数据包队列到网络,其原型如下:
u_int爌cap_sendqueue_transmit (pcap_t *p, pcap_send_queue *queue, int sync);
pcap_findalldevs_ex函数用于返回所找到的适配器列表,其原型如下:
int爌cap_findalldevs_ex (char *source, struct pcap_rmtauth *auth,
    pcap_if_t **alldevs, char *errbuf);
pcap_open函数用于打开一个通用的数据捕获源(包括本地主机、远程主机、文件三种类型),以便进行捕获或发送操作,其原型如下:
pcap_t *爌cap_open (const char *source, int snaplen, int flags,
int read_timeout, struct pcap_rmtauth *auth, char *errbuf);
点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站