日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WinPcap捕获数据包

發(fā)布時間:2024/4/18 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WinPcap捕获数据包 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先使用pcap_open打開指定的網(wǎng)卡, 獲取使用pcap_loop進(jìn)行捕獲數(shù)據(jù)包.

// pcap_loop.cpp : 定義控制臺應(yīng)用程序的入口點。 //#include "stdafx.h"#define HAVE_REMOTE #include <pcap.h>/* packet handler 函數(shù)原型 */ void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);#pragma comment(lib,"wpcap.lib")int _tmain(int argc, _TCHAR* argv[]) {pcap_if_t *alldevs;pcap_if_t *d;int inum;int i=0;pcap_t *adhandle;char errbuf[PCAP_ERRBUF_SIZE];/* 獲取本機(jī)設(shè)備列表 */if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1){fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);exit(1);}/* 打印列表 */for(d=alldevs; d; d=d->next){printf("%d. %s", ++i, d->name);if (d->description)printf(" (%s)\n", d->description);elseprintf(" (No description available)\n");}if(i==0){printf("\nNo interfaces found! Make sure WinPcap is installed.\n");return -1;}printf("Enter the interface number (1-%d):",i);scanf("%d", &inum);if(inum < 1 || inum > i){printf("\nInterface number out of range.\n");/* 釋放設(shè)備列表 */pcap_freealldevs(alldevs);return -1;}/* 跳轉(zhuǎn)到選中的適配器 */for(d=alldevs, i=0; i< inum-1 ; d=d->next, i++);/* 打開設(shè)備 */if ( (adhandle= pcap_open(d->name, // 設(shè)備名65535, // 65535保證能捕獲到不同數(shù)據(jù)鏈路層上的每個數(shù)據(jù)包的全部內(nèi)容PCAP_OPENFLAG_PROMISCUOUS, // 混雜模式1000, // 讀取超時時間NULL, // 遠(yuǎn)程機(jī)器驗證errbuf // 錯誤緩沖池) ) == NULL){fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name);/* 釋放設(shè)備列表 */pcap_freealldevs(alldevs);return -1;}printf("\nlistening on %s...\n", d->description);/* 釋放設(shè)備列表 */pcap_freealldevs(alldevs);/* 開始捕獲 */pcap_loop(adhandle, 0, packet_handler, NULL);getchar();return 0; }/* 每次捕獲到數(shù)據(jù)包時,libpcap都會自動調(diào)用這個回調(diào)函數(shù) */ void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) {struct tm *ltime;char timestr[16];time_t local_tv_sec;/* 將時間戳轉(zhuǎn)換成可識別的格式 */local_tv_sec = header->ts.tv_sec;ltime=localtime(&local_tv_sec);strftime( timestr, sizeof timestr, "%H:%M:%S", ltime);printf("%s,%.6ld len:%d\n", timestr, header->ts.tv_usec, header->len);}

總結(jié)

以上是生活随笔為你收集整理的WinPcap捕获数据包的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。