久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

使用winpcap庫(kù)打造網(wǎng)絡(luò)端口監(jiān)聽程序(三)

 社交力學(xué) 2012-05-14

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

四,、winpcap庫(kù)用法

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

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

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

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

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

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

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

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

     點(diǎn)此下載

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

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

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

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

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

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

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

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

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

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

int pcap_findalldevs ( pcap_if_t ** alldevsp,

char * errbuf

)

功能:

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

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

Errbuf: 存儲(chǔ)錯(cuò)誤信息的字符串

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

 

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

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

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

 

雖然看起來比較復(fù)雜,,不過用起來還是非常簡(jiǎn)單的,,其實(shí) 1 行就OK了:

pcap_t* adhandle;

char errbuf[PCAP_ERRBUF_SIZE];

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

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

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

 

編譯過濾設(shè)備

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:接口掩碼

 

設(shè)置過濾器

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ū)動(dòng)有關(guān)的一個(gè)Header

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

返回值:

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

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

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

-2: 讀文件時(shí)讀到了末尾

 

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

 

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多