




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、【win pcap 驅(qū)動(dòng)簡介】winpcap(windowspacket capture) 是 windows 平臺下一個(gè)免費(fèi),公共的網(wǎng)絡(luò)訪問系統(tǒng)。開發(fā) winpcap這個(gè)項(xiàng)目的目 的在于為 win32應(yīng)用程序提供訪問網(wǎng)絡(luò)底層的能力。它提供了以下 的各項(xiàng)功能:1捕獲原始數(shù) 據(jù)包,包括在共享網(wǎng)絡(luò)上各主機(jī)發(fā)送/接收的以及相互之間交換的數(shù)據(jù)包;2在數(shù)據(jù)包發(fā) 往應(yīng)用程序之前,按照自定義的規(guī)則將某些特殊的數(shù)據(jù)包過濾掉;3在網(wǎng)絡(luò)上發(fā) 送原始的數(shù)據(jù)包;4收集網(wǎng)絡(luò) 通信過程中的統(tǒng)計(jì)信息。winpcap的主要功能在于獨(dú)立于主機(jī)協(xié)議(如 TCP-IP)而發(fā)送和接收原始數(shù)據(jù)包。 也就是說,winpcap不能阻塞,過
2、濾或控制其他應(yīng)用程序數(shù)據(jù)包的發(fā)收,它僅僅只是監(jiān)聽共享網(wǎng)絡(luò)上 傳送的數(shù)據(jù)包。因此,它不能用于 QoS調(diào)度程序或個(gè)人防火墻。目前,winpcap開發(fā)的主要對象是windows NT /2000/XP,這主要是因?yàn)樵谑褂?winpcap 的用戶中只有一小部分是僅使用 windows 95/98/Me,并且M$也已經(jīng)放棄了對 win9x的開發(fā)。 因此本文相關(guān) 的程序 T-ARP也是面向 NT/2000/XP 用戶的。其實(shí) winpcap中的面向 9x 系統(tǒng)的概念和NT系統(tǒng)的非常相似,只是在某些實(shí)現(xiàn)上有點(diǎn)差異,比如說 9x只支持ANSI編碼,而NT系統(tǒng)則提倡使用Unicode編碼。有個(gè)軟件叫sniffe
3、r pro.可以作網(wǎng)管軟件用,有很多功能,可監(jiān)視網(wǎng)絡(luò)運(yùn)行情況,每臺網(wǎng)內(nèi)機(jī)器的數(shù)據(jù)流量,實(shí)時(shí)反映每臺機(jī)器所訪問IP以及它們之 間的數(shù)據(jù)流通情況,可以抓包,可對過濾 器進(jìn)行設(shè)置,以便只 抓取想要的包,比如POP3包,smtp包,ftp包等,并可從中找到郵箱用戶名和密碼,還有ftp用戶名和密碼.它還可以在使 用交換機(jī)的網(wǎng)絡(luò)上監(jiān)聽,不過要在交換機(jī)上裝它的一個(gè)軟件.還有一個(gè) 簡單的監(jiān)聽軟件叫Passwordsniffer,可截獲郵箱用戶名和密碼,還有ftp用戶名和密碼,它只能用在用 HUB網(wǎng)絡(luò)上著名軟件tcpdump 及ids snort都是基于libpcap編寫的,此外Nmap掃描器也是基于libpc
4、ap來捕獲目標(biāo)主機(jī)返回的數(shù)據(jù)包的。winpcap提供給用戶兩 個(gè)不同級別的編程接口:一個(gè) 基于libpcap的wpcap.dll,另 一個(gè)是較底層的 packet.dll 。對于一般的要與 unix平臺上libpcap兼容的開發(fā)來說,使用 wpcap.dll是當(dāng)然的選擇?!網(wǎng)in pcap的內(nèi)部結(jié)構(gòu)】邛加onIwpcape側(cè) e writWinpcap的各個(gè)組成部分Winpcap是針對Win32平臺的抓包和網(wǎng)絡(luò)分析的一個(gè)架構(gòu)。它包括一個(gè)核心態(tài)的包過濾器,一個(gè)底層的動(dòng)態(tài)鏈接庫(packet.dll )和一個(gè)高層的不依賴于系統(tǒng)的庫(wpcap.dll )。為什么使用“ architecture而不
5、是“ library呢?因?yàn)樽グ且粋€(gè)要求與網(wǎng)絡(luò)適配器(網(wǎng)卡)和操作系統(tǒng)交互的底層機(jī)制,而且與網(wǎng)絡(luò)的實(shí)施也有密切關(guān)系,所以僅用“l(fā)ibrary ?不能充分表達(dá)Winpcap的作用。下圖表明了Winpcap的各個(gè)組成部分:首先,抓包系統(tǒng)必須繞過操作系統(tǒng)的協(xié)議棧來訪問在網(wǎng)絡(luò)上傳輸?shù)脑紨?shù)據(jù)包(rawpacket ),這就要求一部分運(yùn)行在操作系統(tǒng)核心內(nèi)部,直接與網(wǎng)絡(luò)接口驅(qū)動(dòng)交互。這個(gè)部分是系統(tǒng)依賴(systemdependent )的,在 Winpcap的解決方案里它被認(rèn)為是一個(gè)設(shè)備驅(qū)動(dòng),稱作 NPF ( Netgroup Packet Filter )。Winpcap 開發(fā)小組針對 Windows
6、95 , Windows98 , WindowsME , Windows NT 4, Windows2000 和 WindowsXP 提供 了不 同版本的驅(qū)動(dòng)。這些驅(qū)動(dòng)不僅提供了基本的特性(例如抓包和 injection ),還有更高級的特性(例如可編程的過濾器系統(tǒng)和監(jiān)視引擎)。前者可以被用來約束一個(gè)抓包會(huì)話只針對網(wǎng)絡(luò)通信中的一個(gè)子集(例 女口,僅僅捕獲特 殊主機(jī)產(chǎn)生的ftp通信的數(shù)據(jù)包),后者提供了一個(gè)強(qiáng)大而簡單的統(tǒng)計(jì)網(wǎng)絡(luò)通信量的機(jī)制(例如,獲得網(wǎng)絡(luò)負(fù)載或兩個(gè)主機(jī)間的數(shù)據(jù)交換量)。其次,抓包系統(tǒng)必須有用戶級的程序接口,通過這些接口,用戶程序可以利用內(nèi)核驅(qū)動(dòng)提供的高級特性。Winpcap提供了
7、兩個(gè)不同的庫:packet.dll和wpcap.dll。前者提供了一個(gè)底層API,伴隨著一個(gè) 獨(dú)立于 Microsoft操作系統(tǒng)的編程接口,這些API可以直接用來訪問驅(qū)動(dòng)的函數(shù);后者導(dǎo)出了一組更強(qiáng)大的與libpcap 一致的高層抓包函數(shù)庫(capture primitives )。這些函數(shù)使得數(shù)據(jù)包的捕獲以一種與網(wǎng)絡(luò)硬件和操作系統(tǒng)無關(guān)的方式進(jìn)行。NPF驅(qū)動(dòng)網(wǎng)絡(luò)數(shù)據(jù) 包過濾器(Netgroup Packet Filter , NPF )是 Winpcap 的核心部分,它 是Winpcap完成困難工作的組 件。它處理網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)包,并且對用戶級提供可捕獲(capture )、發(fā)送(inject
8、ion )和分析 性能(analysis capabilities )。NPF和NDISNDIS ( Network Driver In terfaceSpecificatio n )是一個(gè)定義網(wǎng)絡(luò)適配器(或者說成是管理網(wǎng)絡(luò) 適配器的驅(qū)動(dòng)程序)與協(xié)議驅(qū)動(dòng)(例如TCP/IP的實(shí)現(xiàn))之間通信的規(guī)范。NDIS最主要的目的是作為一個(gè)允許協(xié)議驅(qū)動(dòng)發(fā)送和接收網(wǎng)絡(luò)( LAN或 WAN )上的數(shù)據(jù)包而不必關(guān)心特定的適配器或特定的Win32操作系統(tǒng)的封裝。NDIS支持三種類型的網(wǎng)絡(luò)驅(qū)動(dòng):(1 )網(wǎng)絡(luò)接口卡或 NIC 驅(qū)動(dòng)(Networkin terfacecard or NIC drivers )。NIC驅(qū)動(dòng)直
9、接管理著網(wǎng)絡(luò)接口卡(NIC)。NIC驅(qū)動(dòng)接下邊與硬件連接,從上邊表現(xiàn)為一個(gè)接口,該接口允許高層發(fā)送數(shù)據(jù)包到網(wǎng)絡(luò)上,處 理中斷,重置 NIC,停止NIC,查詢和設(shè)置驅(qū)動(dòng)的運(yùn)行 特征。NIC驅(qū)動(dòng)可以是小端口( miniport )或完全的 NIC驅(qū)動(dòng)(full NIC d river )。Miniport驅(qū)動(dòng)僅僅實(shí)現(xiàn)了管理 NIC的必要操作,包括在 NIC上發(fā)送和接收數(shù)據(jù)。對于所有最底層的NIC驅(qū)動(dòng)的操作由 NDIS提供,例如同步(synchronization)。小端口(miniport )不直接調(diào)用操作系統(tǒng)函數(shù),它們對于操作系統(tǒng)的接口是NDIS。小端口僅僅是向上傳遞數(shù)據(jù)包給NDIS并且NDIS
10、確保這些數(shù)據(jù)包被傳遞給正確的協(xié)議。完全NIC驅(qū)動(dòng)(Full NIC driver )完成硬件細(xì)節(jié)的操作和所有由NDIS完成的同步和查詢操作。例如,完全 NIC驅(qū)動(dòng)維持接收到的數(shù)據(jù)的綁定信息。(2) 中間層驅(qū)動(dòng) (In termediate drivers )中間層驅(qū) 動(dòng)位于高層驅(qū)動(dòng) 動(dòng)看起來像是小端口;對于小 動(dòng)可以位于另一個(gè)中間層驅(qū)動(dòng)動(dòng))和小端口層驅(qū)動(dòng)看起來(In termediate之間。對于高層驅(qū)動(dòng),中間層驅(qū)像協(xié)議驅(qū)動(dòng)。一個(gè)中間層協(xié)議驅(qū)這種分層可能對系統(tǒng)性能帶來負(fù)面影響。開發(fā)中間層驅(qū)動(dòng)的一個(gè)關(guān)鍵原因是(例如協(xié)議驅(qū) 端口,中間 之上,盡管 在現(xiàn)存的遺legacy protocol driv
11、er )和小端口之間形成媒體的轉(zhuǎn)化。例如,中間層驅(qū)協(xié)議。中間層驅(qū)動(dòng)不能與用戶模式的應(yīng)用程序通信,但留協(xié)議驅(qū)動(dòng)(動(dòng)可以將 LAN協(xié)議轉(zhuǎn)換成 ATM可以與其他的NDIS驅(qū)動(dòng)通信。(3)傳輸驅(qū)動(dòng)或協(xié)議驅(qū)動(dòng) 現(xiàn)了網(wǎng)絡(luò)協(xié)議 棧,例如IPX/SPX 在協(xié)議驅(qū)動(dòng)的(Tran sport 或 TCP/IP, 上面,它為應(yīng)用層客戶程序服務(wù)drivers or protocol drivers在一個(gè)或多個(gè)網(wǎng)絡(luò)接口卡上提供;在它的下面,它與一個(gè)或多個(gè)協(xié)議驅(qū)動(dòng)實(shí)它的服務(wù)。NIC驅(qū)動(dòng)或中間層 NDIS驅(qū)動(dòng)連接。4iNIC CrhoiimiNPF在NDIS棧中的位置NPF是一個(gè)協(xié)議驅(qū)動(dòng)。從性能方面MAC層并且有權(quán)使用原始
12、通信( raw來看,這不是最好的選擇,但traffic )。下圖表現(xiàn)了是它合理地獨(dú)立于Meding1 WlJi -AA伴隨著NPF驅(qū)動(dòng)細(xì)節(jié)的 WinpcapNPF在的結(jié)構(gòu)NDIS棧中的位置:Win pcap抓包是NPF最重要的操作 。在抓包的時(shí)候 ,驅(qū)動(dòng)使用一個(gè)網(wǎng)絡(luò)接口 ,并將這些數(shù)據(jù)包完整無缺地投遞給用戶級應(yīng)用程序。依賴于兩個(gè)主要組件:一個(gè)數(shù)據(jù)包過濾器,它決定著是否接收進(jìn)來的數(shù)據(jù)拷貝給監(jiān)聽程序。數(shù)據(jù)包過濾器1NPF結(jié)構(gòu)基礎(chǔ)下圖表現(xiàn)了伴隨著NPF驅(qū)動(dòng)細(xì)節(jié)的的結(jié)構(gòu)。監(jiān)視著數(shù)據(jù)包抓包過程包并把數(shù)據(jù)包是一個(gè)有布爾輸出的函數(shù)。如果函數(shù)值是true,抓包驅(qū)動(dòng)拷貝數(shù)據(jù)包給應(yīng)用程序;如果是濾器更復(fù)雜一些,因
13、為它不僅決定數(shù)據(jù)包是否 數(shù)。被NPF驅(qū)動(dòng)采用的過濾系統(tǒng)來源于BSDNPF數(shù)據(jù)包過 保存的字節(jié)false,數(shù)據(jù)包將被丟棄。 應(yīng)該被保存,而且還得決定要Packet Filter ( BPF ),一個(gè)虛擬處理器可以執(zhí)行偽匯 編書寫的用戶級過濾程序。應(yīng)用程序采用用戶定義的過濾器并使用wpcap.dll將它們編譯進(jìn)BPF程序。然后,應(yīng)用程序使用BIOCSETF IOCTL寫入核心態(tài)的過濾器。這樣,對于每一個(gè)到來的數(shù)據(jù)包該程序都將被執(zhí)行,而滿足條件的數(shù)據(jù)包將被接收。與傳統(tǒng)解決方案不同,NPF不解釋(interpret )過濾器,而是執(zhí)行( execute )它。由于性能的原因,在使用過濾器 前,NPF提
14、供一個(gè) JIT編譯器將它轉(zhuǎn)化成本地的80x86函數(shù)。當(dāng)一個(gè)數(shù)據(jù)包被捕獲,NPF調(diào)用這個(gè)本地函數(shù)而不是調(diào)用過濾器解釋器,這使得處理過程相當(dāng)快。一個(gè)循環(huán) 緩沖區(qū),用來保存數(shù)據(jù)包并且避免丟失。一個(gè)保存在 緩沖區(qū) 中的數(shù)據(jù)包有一個(gè)頭,它包 含了一些主要的信息,例如時(shí)間戳和數(shù)據(jù)包 的大小,但它不是協(xié)議頭。此外,以隊(duì)列插 入的方式來保存數(shù)據(jù)包可以提高數(shù)據(jù)的存儲效率??梢砸越M的 方式將數(shù)據(jù)包從NPF緩沖區(qū)拷貝到應(yīng)用程序。這樣就提高了性能,因?yàn)樗档土俗x的次數(shù)。如果一個(gè)數(shù)據(jù)包到來 的時(shí)候緩沖區(qū)已經(jīng)滿了,那么該數(shù)據(jù)包將被丟棄,故發(fā)生了丟包?!網(wǎng)in pcap程序?qū)嵗揩@得網(wǎng)卡 接口。在普通的 SOCKET編程中
15、,對雙網(wǎng)卡 編程是不行的。當(dāng)主機(jī)為雙網(wǎng) 卡時(shí),本程序 可分別獲得兩張網(wǎng)卡各自的描述結(jié)構(gòu)及地址,然后可以對它們分別進(jìn)行操作。返回的 alldevs隊(duì)列首部為邏輯網(wǎng)卡,一般不對它進(jìn)行什么操作。(一)獲得網(wǎng)卡接口# i nclude "pcap.h"void mai n()pcap_if_t *alldevs;/*struct pcap_if_tpcap_if_t*n ext;char *name;char *description;pcap_addr *addresses;Unt falgs;*/pcap_if_t *d;int i=0;char errbufPCAP_ERRB
16、UF_SIZE;/* Retrieve the device list */if (pcap_findalldevs(&alldevs, errbuf) = -1)/ 返 回網(wǎng)卡列表, alldevs 指向表頭fprintf(stderr,"Errorin pcap_findalldevs:%sn", errbuf);exit(1);/* Print the list */for(d=alldevs;d;d=d->n ext)printf("%d.%s", +i, d->name);if (d->description)prin
17、 tf("(%s)n", d->descriptio n);else printf(” if(i=0) prin tf("nNo return;/* We don't(Nodescripti onavailable)n");in terfacesfound!Make sureWinPcap is installed.n");n eedany morethe devicelist. Free it */pcap_freealldevs(alldevs);(二 )抓包本程序俘獲 局域網(wǎng)內(nèi)UDP報(bào)文。# i nclude "p
18、cap.h"/* 4 bytes IP address */typedefstructip_addressu_charbyte1;u_charbyte2;u_charbyte3;u_charbyte4;ip_address;/* IPv4header*/typedefstructip_headeru_charver_ihl;/ Version (4 bits) +Internetheaderlength(4 bits)u_chartos; /Type of serviceu_shorttle n;/ Total lengthu_shortidentification;/ Identi
19、ficationu_shortflags_fo; / Flags (3 bits) +Fragme ntoffset(13 bits)u_charttl; /Time to liveu_charproto;/ Protocolu_short crc; / Header checksum ip_addresssaddr; / Source addressip_addressdaddr; / Destination addressu_int op_pad; / Option + Padding ip_header;/* UDP header*/typedefstructudp_headeru_sh
20、ortsport;/Source portu_shortdport;/Desti nati onportu_short len; / Datagramlengthu_short crc; / Checksumudp_header;/* prototype of the packethandler */void packet_handler(u_char*param, const struct pcap_pkthdr *header, constu_char *pkt_data);main() pcap_if_t *alldevs;pcap_if_t *d;int inum;int i=0;pc
21、ap_t *adhandle;char errbufPCAP_ERRBUF_SIZE;u_int netmask;char packet_filter = "ip and udp"struct bpf_program fcode;/* Retrieve the device list */if (pcap_findalldevs(&alldevs, errbuf) = -1) fprintf(stderr,"Error in pcap_findalldevs: %sn", errbuf); exit(1);/* Print the list */
22、for(d=alldevs; d; d=d->next) printf("%d. %s", +i, d->name); if (d->description) printf(" (%s)n", d->description);else printf(" (No description available)n");if(i=0)printf("nNo interfaces found! Make sure WinPcap is installed.n"); return -1;printf(&
23、quot;Enter the interface number (1 -%d):",i); scanf("%d", &inum);if(inum < 1 | inum > i)printf("nInterface number out of range.n");/* Free the device list */ pcap_freealldevs(alldevs);return -1;/* Jump to the selected adapter */ for(d=alldevs, i=0; i< inum-1 ;d=
24、d->next, i+);/* Open the adapter */if ( (adhandle= pcap_open_live(d->name, / name of the device 65536, / portion of the packet to capture./ 65536 grants that the whole packet will be captured on all the MACs. 1, / promiscuous mode 1000, / read timeout errbuf / error buffer) ) = NULL)fprintf(st
25、derr,"nUnable to open the adapter. %s is not supported b y WinPca pn");/* Free the device list */pcap_freealldevs(alldevs);return -1;/* Check the link layer. We support only Ethernet for simplicity. */ if(pcap_datalink(adhandle) != DLT_EN10MB)fprintf(stderr,"nThisprogramworks only on
26、Ethernet networks.n");/* Free the device list */pcap_freealldevs(alldevs);return -1;if(d->addresses!= NULL)/* Retrieve themask of thefirst address of the interface */netmask=(structsockaddr_in*)(d->addresses->netmask)->sin_addr.S_un.S_addr;/* If the interface is withoutelseaddresses
27、 we suppose to be in a C class network */netmask=0xffffff;/compile the filter if(pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) <0 ) fprintf(stderr,"nUnable to compile the packet filter. Check the syntax.n");/* Free the device list */ pcap_freealldevs(alldevs);return -1;/
28、set the filterif(pcap_setfilter(adhandle, &fcode)<0) fprintf(stderr,"nError setting the filter.n"); /* Free the device list */pcap_freealldevs(alldevs);return -1; printf("nlistening on %s.n", d->description);/* At this point, we don't need any more the device list.
29、Free it */ pcap_freealldevs(alldevs);/* start the capture */pcap_loop(adhandle,0, packet_handler, NULL);return 0;const/* Callback function invoked by libpcap for every incoming packet */ void packet_handler(u_char *param, const struct pcap_pkthdr *header, u_char *pkt_data)struct tm *ltime; char time
30、str16; ip_header *ih;udp_header *uh;u_int ip_len;/* convert the timestamp to readable format */ ltime=localtime(&header->ts.tv_sec);strftime( timestr, sizeof timestr, "%H:%M:%S", ltime);/* print timestamp and length of the packet */* retireve the position of the ip header */ih = (ip
31、_header *) (pkt_data +14); /length of ethernet header/* retireve the position of the udp header */ip_len = (ih->ver_ihl & 0xf) * 4;uh = (udp_header *) (u_char*)ih + ip_len);/* convert from network byte order to host byte order */printf("%s.%.6d len:%d ", timestr, header ->ts.tv_usec, header->len); /* print ip addresses */ printf("%d.%d.%d.%d -&g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 朋友婚宴活動(dòng)策劃方案
- 暑期返?;顒?dòng)方案
- 機(jī)場春節(jié)活動(dòng)策劃方案
- 服裝店七夕活動(dòng)方案
- 杭州絲綢節(jié)活動(dòng)方案
- 村級讀書活動(dòng)方案
- 最美網(wǎng)點(diǎn)活動(dòng)方案
- 杭州繪畫機(jī)構(gòu)活動(dòng)方案
- 曲靖會(huì)議活動(dòng)策劃方案
- 曬曬我校門衛(wèi)室活動(dòng)方案
- 處方銷毀申請登記表
- 河南省2014年中考語文現(xiàn)代文閱讀真題
- 外研版一起小學(xué)英語四下《Module-6Unit-1-Ill-draw-the-pictures》課件
- 三明市公安局招聘警務(wù)輔助人員考試歷年真題
- 直流屏檢修作業(yè)指導(dǎo)書
- 冷鐓機(jī) 質(zhì)量要求技術(shù)條件
- 衛(wèi)生部手術(shù)分級目錄(2023年1月份修訂)
- LY/T 2121-2013檀香栽培技術(shù)規(guī)程
- 骨科出科試題帶答案
- 河道基槽土方開挖專項(xiàng)施工方案
- 現(xiàn)代美國玉米商業(yè)育種的種質(zhì)基礎(chǔ)概要
評論
0/150
提交評論