wincap网络数据包的捕获

来源:互联网 发布:淘宝企业店和旗舰店 编辑:程序博客网 时间:2024/09/21 06:28

使用wincap之前,你必须安装wincap安装包(内带头文件和链接库)

以下直接贴代码:

/////////////////////////////////////////////////////////////////////////////        /*2014年7月10日08:23:06  bojie   http://blog.csdn.net/bojie5744           */    /////////////////////////////////////////////////////////////////////////////struct pcap_pkthdr {struct timeval ts;bpf_u_int32 caplen;bpf_u_int32 len;    };#include "pcap.h"#pragma comment(lib,"packet.lib")   #pragma comment(lib,"wpcap.lib")void packet_handler( u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);int main(){pcap_if_t *alldevs;pcap_if_t *d;int inum;int i=0;pcap_t *adhandle;char errbuf[256];if ( pcap_findalldevs( &alldevs, errbuf ) == -1 ){fprintf_s( stderr, "pcap_findalldevs函数调用错误: %s/n", errbuf );exit(1);}for( d = alldevs; d; d = d->next ){printf_s( "%d. %s", ++i, d->name );if ( d->description )printf_s( " (%s)/n", d->description );}if(i == 0){printf_s( "搜索错误/n" );return -1;}printf_s( "选择网卡 (1-%d):", i );scanf_s( "%d", &inum ); if( inum < 1 || inum > i ) {printf_s( "输入有误,没有此网卡/n" );pcap_freealldevs( alldevs );return -1;}for( d = alldevs, i = 0; i < inum-1; d = d->next, i++ );if ( (adhandle= pcap_open_live(d->name,   65536,      1,          1000,       errbuf     ) ) == NULL){fprintf_s( stderr, "错误: %s /n", errbuf );pcap_freealldevs( alldevs );return -1;}printf_s( "开始监听网卡%s/n", d->description );pcap_freealldevs( alldevs );pcap_loop( adhandle, 0, packet_handler, NULL );return 0;}
 
 void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) {  struct tm ltime;  char timestr[20];  time_t t = (time_t )&header->ts.tv_sec;  localtime_s( &ltime, &t );  strftime( timestr, sizeof timestr, "%H:%M:%S", &ltime);  printf_s("%s,/t%.6d毫秒/t长度:%d/n", timestr, header->ts.tv_usec, header->len ); }


 

0 0