九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
使用winpcap庫打造網(wǎng)絡端口監(jiān)聽程序(三)

上兩節(jié)已經(jīng)介紹了ARP協(xié)議、IP協(xié)議的一些理論內(nèi)容,本節(jié)主要介紹winpcap庫的安裝與使用。

四、winpcap庫用法

 WinPcap驅(qū)動包,是本次實現(xiàn)網(wǎng)絡檢測的主打工具,WinPcap的主要功能在于獨立于主機協(xié)議(如TCP-IP協(xié)議)而發(fā)送和接收原始數(shù)據(jù)報,主要為我們提供了四大功能:

    1、捕獲原始數(shù)據(jù)報,包括在共享網(wǎng)絡上各主機發(fā)送/接收的以及相互之間交換的數(shù)據(jù)報;

    2、在數(shù)據(jù)報發(fā)往應用程序之前,按照自定義的規(guī)則將某些特殊的數(shù)據(jù)報過濾掉;

    3、在網(wǎng)絡上發(fā)送原始的數(shù)據(jù)報;

    4、收集網(wǎng)絡通信過程中的統(tǒng)計信息。

  在運行用winpcap開發(fā)的程序以前,需要在主機上先安裝winpcap的driver。

 在實際操作之后發(fā)現(xiàn),不但需要安裝winpcap的驅(qū)動程序,還要安裝winpcap的開發(fā)包。

winpcap驅(qū)動程序以及winpcap開發(fā)包下載地址

     點此下載

下載之后還需要對開發(fā)環(huán)境做一些配置,本次軟件實現(xiàn)所用的前期環(huán)境是VC6.0后期向VS2005平臺進行了移植。

  配置方法如下:(針對VC6.0)

下載后可以看到兩個文件,一個是WinPcap_4_0_2.exe這個是驅(qū)動程序,首先雙擊安裝驅(qū)動程序。

 另外一個文件是WpdPack_4_0_2dev.zip,這個是開發(fā)包,將其解壓。

 對于VC6.0環(huán)境,在Tools->options->Directories里面加入解壓以后的include文件夾,在Tools->options->Directories的lib里面加入解壓以后的lib文件夾。實際開發(fā)前還要對工程進行設置:在"Project->Settings"(Alt+F7),標簽欄中選擇"C/C++"標簽,在"Preprocessor definitions"的輸入框里添加"WPCAP",再選擇"Link"標簽,在"Object/library modules"的輸入框里添加"wpcap.lib Packet.lib"。

 好了,配置環(huán)境的工作到此就結(jié)束了,下面就是正式寫代碼了。

 想對網(wǎng)卡操作,第一部就是打開網(wǎng)卡

 枚舉本機網(wǎng)卡的信息(主要是獲得網(wǎng)卡的名稱)

其中要用到pcap_findalldevs函數(shù),它是這樣定義的

 *************************************************

int pcap_findalldevs ( pcap_if_t ** alldevsp,

char * errbuf

)

功能:

枚舉系統(tǒng)所有網(wǎng)絡設備的信息

參數(shù): alldevsp:是一個pcap_if_t結(jié)構(gòu)體的指針,如果函數(shù)pcap_findalldevs函數(shù)執(zhí)行成功,將獲得一個可用網(wǎng)卡的列表,而里面存儲的就是第一個元素的指針。

Errbuf: 存儲錯誤信息的字符串

返回值: int : 如果返回0 則執(zhí)行成功,錯誤返回 -1。

 

打開相應網(wǎng)卡并設置為混雜模式

在此之前肯定要有一段讓用戶選擇網(wǎng)卡、并獲得用戶選擇的網(wǎng)卡的名字的代碼,既然上面已經(jīng)可以獲得所有網(wǎng)卡的名字了,這段代碼就暫且略過了。

我們主要是要用到 pcap_open_live 函數(shù),不過這個函數(shù)winpcap的開發(fā)小組已經(jīng)建議用pcap_open 函數(shù)來代替,不過因為我的代碼里面用的就是pcap_open_live,所以也不便于修改了,不過pcap_open_live使用起來也是沒有任何問題的,下面是pcap_open_live的函數(shù)聲明:

 

雖然看起來比較復雜,不過用起來還是非常簡單的,其實 1 行就OK了:

pcap_t* adhandle;

char errbuf[PCAP_ERRBUF_SIZE];

// 打開網(wǎng)卡,并且設置為混雜模式

// pCardName是前面?zhèn)鱽淼木W(wǎng)卡名字參數(shù)

adhandle = pcap_open_live(pCardName,65535,1,1000,errbuf);

 

編譯過濾設備

pcap_compile(pcap_t* adhandle, struct bpf_program * fcode,

char *filter,int optimize,netmask)

              參數(shù):adhandle: 類似于網(wǎng)卡句柄

                    filter:過濾規(guī)則,例如"host 222.26.193.117 and arp" :

                    netmask:接口掩碼

 

設置過濾器

int pcap_setfilter(pcap_t *p, struct bpf_program *fp)

             fp參數(shù)是bpf_program結(jié)構(gòu)指針

/***************************************************************

int pcap_next_ex ( pcap_t * p,

struct pcap_pkthdr ** pkt_header,

u_char ** pkt_data

)

功能:

從網(wǎng)卡或者數(shù)據(jù)包文件中讀取數(shù)據(jù)內(nèi)容

參數(shù):

pcap_t * p: 網(wǎng)卡句柄

struct pcap_pkthdr ** pkt_header: 并非是數(shù)據(jù)包的指針,只是與數(shù)據(jù)包捕獲驅(qū)動有關(guān)的一個Header

u_char ** pkt_data:指向數(shù)據(jù)包內(nèi)容的指針 ,包括了協(xié)議頭

返回值:

1 : 如果成功讀取數(shù)據(jù)包

0 :pcap_open_live()設定的超時時間之內(nèi)沒有讀取到內(nèi)容

-1: 出現(xiàn)錯誤

-2: 讀文件時讀到了末尾

 

pcap_next_ex()不是基于回調(diào)機制的,直接調(diào)用這個函數(shù)就可以抓到一個數(shù)據(jù)包,如果我們把pcap_next_ex()嵌套在一個for循環(huán)或者while循環(huán)內(nèi)的話,程序的結(jié)構(gòu)會很明晰,而且不使用回調(diào)也會節(jié)省一些時間。

 

以上介紹了Winpcap庫中的主要函數(shù),具體實現(xiàn)請查看程序代碼,后文將提供代碼下載。下一節(jié)將主要介紹如何使用MFC實現(xiàn)本軟件,以及在可視化實現(xiàn)時的幾個“難點”。

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
WinpCap的詳解(一)
手把手教你捕獲數(shù)據(jù)包(上)【數(shù)據(jù)包的游戲系列之二】
WinPcap基礎知識(第八課:發(fā)送數(shù)據(jù)包)
Wincap
循序漸進學習使用WINPCAP
libcap編程實例
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服