参数:
pcap_t * p :前面打开的网卡句柄;
const char * fname :要保存的文件名字
返回值:
pcap_dumper_t* : 保存文件的描述句柄,具体细节我们不用关心
***************************************************************/
/***************************************************************
int pcap_next_ex ( pcap_t * p,
struct pcap_pkthdr ** pkt_header,
u_char ** pkt_data
)
功能:
从网卡或者数据包文件中读取数据内容
参数:
pcap_t * p: 网卡句柄
struct pcap_pkthdr ** pkt_header: 并非是数据包的指针, 只是与数据包捕获驱动有关的一
个 Header
u_char ** pkt_data :指向数据包内容的指针 ,包括了协议头
返回值:
1 : 如果成功读取数据包
0 :pcap_open_live() 设定的超时时间之内没有读取到内容
-1: 出现错误
-2: 读文件时读到了末尾
***************************************************************/
/***************************************************************
void pcap_dump ( u_char * user,
const struct pcap_pkthdr * h,
const u_char * sp
)
功能:
将数据包内容依次写入 pcap_dump_open ()指定的文件中
参数:
u_char * user : 网卡句柄
const struct pcap_pkthdr * h: 并非是数据包的指针,只是与数据包捕获驱动有关的一个
Header
const u_char * sp: 数据包内容指针
返回值:
Void
****************************************************************/
下面给出一段完整的捕获数据包的代码,是在线程中写的,为了程序清晰,我去掉了错误
处理代码以及线程退出的代码, 完整代码可下载文后的示例源码, 老规矩, 重要的步骤用粗
体字标出。
我们实际在捕获数据包的时候也最好是把代码放到另外的线程中。
/*********************************************************