使用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( <ime, &t );
strftime( timestr, sizeof timestr, "%H:%M:%S", <ime);
printf_s("%s,/t%.6d毫秒/t长度:%d/n", timestr, header->ts.tv_usec, header->len );
}