欢迎访问binary的Blog   虚心使人进步,骄傲使人落后。

          W3CHINA Blog首页    管理页面    写新日志    退出



«December 2025»
123456
78910111213
14151617181920
21222324252627
28293031


登录

用户名称:
登陆密码:
密码保存:


联系我
email: binaryluo(at)gmail.com

我的分类

日志更新

最新评论

留言板

Blog信息

 
blog名称:二进制-虚心使人进步,骄傲使人落后。
日志总数:42
评论数量:370
留言数量:88
访问次数:644682
建立时间:2005年2月19日




[网络编程技术]【原创】Winpcap学习:第五天(20060204)
原创空间,  随笔,  读书笔记,  心得体会,  软件技术,  电脑与网络

binaryluo 发表于 2006/2/4 21:34:41

  处理离线的存储文件(offline dump file)     Winpcap提供了一些函数把网络通信保存到文件并且可以读取这些文件的内容。dump文件的格式跟libpcap是一样的。它以二进制形式保存了被捕获的数据包的数据并且其他网络工具(包括WinDump,Ethereal,Snort)也以此为标准。 处理dump文件的程序结构跟前面的程序结构大致是一样的,只是这里出现了几个新的函数:(试验代码略)   函数1: pcap_dumper_t* pcap_dump_open(pcap_t*    p,                                                   const char* fname)     打开一个保存数据包的文件。“-”的含义跟stdout是一样的。发生错误时返回NULL。p是一个由pcap_open_offline()或pcap_open_live()返回的pcap结构体;fname指定了文件的名字。你也可以调用pcap_dump_fopen()把数据包保存到一个已存在的流fp中,在Windows中,这个流必须以二进制方式打开。如果返回NULL,pcap_geterr()会显示错误信息。   函数2: void pcap_dump(u_char*                          user, const struct pcap_pkthdr* h, const u_char*                   sp)     把数据包保存到硬盘。pcap_dump()把数据包输出到pcap_dump_open()打开的文件中。注意,它的参数要跟pcap_dispatch()或pcap_loop()的回调函数的参数一致。如果直接被调用,则user这个参数的类型应该是pcap_dumper_t,也就是pcap_dump_open()的返回值类型。 在读取dump文件的内容时,用pcap_open_offline()来打开dump文件,然后用pcap_loop()来顺序读取数据包。读数据包跟接收数据包的过程是一样的。   函数3: int pcap_live_dump(pcap_t*     p,                             char*         filename,                             int             maxsize,                             int             maxpacks)     保存数据包到文件。pcap_live_dump()把网络通信从一个接口保存到一个文件中。这个函数将运行在核心态(kernel level),因此它的效率比pcap_dump()的更高。它的参数是一个用pcap_open_live()获得的接口描述符,一个dump文件名的字符串,文件的最大尺寸(maxsize,以字节为单位)和文件能容纳的数据包的最大个数(maxpcaks)。把maxsize或maxpacks设置为0意味着没有限制。当达到maxsize或maxpacks时,存储结束。注意,当两个限制(maxsize,maxpacks)中的一个到达时,存储将停止,但是文件仍然是被打开的。为了正确的保存数据并且使文件处于一致状态,必须用pcap_close()关闭适配器。       pcap_live_dump()和pcap_ dump()的区别是设置限制和性能。pcap_live_dump()使用Winpcap NPF驱动在核心态进行转储,最大限度的降低了上下文的交换次数和内存副本数。pcap_live_dump()在其他操作系统上是不可用的,它是Winpcap特定的函数,只能在Win32上使用。   函数4: pcap_t* pcap_open_offline(const char*           fname, char*               errbuf)     为读数据包打开一个tcpdump/libpcap格式的文件。Fname指定了要打开的文件名,“-”的含义与stdin是一样的。你也可以调用pcap_fopen_offlline()从一个已经存在的流fp中读取数据。注意,在Windows中,这个流必须以二进制方式打开。errbuf保存pcap_open_offline()出错是返回的错误信息。 


阅读全文(3773) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.437 second(s), page refreshed 144801684 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号