必威电竞|足球世界杯竞猜平台

winpcap
來源:互聯網

winpcap(Windowspacketcapture)是windows平臺下一個免費,公共的網絡訪問系統。開發winpcap這個項目的目的在于為win32應用程序提供訪問網絡底層的能力。它用于windows系統下的直接的網絡編程。

主要功能

winpcap的主要功能在于獨立于主機協議(如TCP-IP)而發送和接收原始數據包。也就是說,winpcap不能阻塞,過濾或控制其他應用程序數據包的發收,它僅僅只是監聽共享網絡上傳送的數據包。因此,它不能用于QoS調度程序或個人防火墻。winpcap開發的主要對象是windowsNT/2000/XP,這主要是因為在使用winpcap的用戶中只有一小部分是僅使用windows95/98/Me,并且MS也已經放棄了對win9x的開發。因此本文相關的程序T-ARP也是面向NT/2000/XP用戶的。其實winpcap中的面向9x系統的概念和NT系統的非常相似,只是在某些實現上有點差異,比如說9x只支持ANSI編碼,而NT系統則提倡使用Unicode編碼。有個軟件叫snifferpro.可以作網管軟件用,有很多功能,可監視網絡運行情況,每臺網內機器的數據流量,實時反映每臺機器所訪問IP以及它們之間的數據流通情況,可以抓包,可對過濾器進行設置,以便只抓取想要的包,比如POP3包,smtp包,ftp包等,并可從中找到郵箱用戶名和密碼,還有ftp用戶名和密碼。它還可以在使用交換機的網絡上監聽,不過要在交換機上裝它的一個軟件。還有一個簡單的監聽軟件叫Passwordsniffer,可截獲郵箱用戶名和密碼,還有ftp用戶名和密碼,它只能用在HUB網絡上。著名軟件tcpdump及idssnort都是基于libpcap編寫的,此外Nmap掃描器也是基于libpcap來捕獲目標主機返回的數據包的。

winpcap提供給用戶兩個不同級別的編程接口:一個基于libpcap的wpcap.dll,另一個是較底層的packet.dll。對于一般的要與unix平臺上libpcap兼容的開發來說,使用wpcap.dll是當然的選擇。

內部結構

Winpcap是針對win32平臺上的抓包和網絡分析的一個架構。它包括一個核心態的包過濾器,一個底層的動態鏈接庫(packet.dll)和一個高層的不依賴于系統的庫(wpcap.dll)。

為什么使用“建筑”而不是“library”呢?因為抓包是一個要求與網絡適配器(網卡)和操作系統交互的底層機制,而且與網絡的實施也有密切關系,所以僅用“library”不能充分表達Winpcap的作用。

下圖表明了Winpcap的各個組成部分:

首先,抓包系統必須繞過操作系統的協議棧來訪問在網絡上傳輸的原始數據包(rawpacket),這就要求一部分運行在操作系統核心內部,直接與網絡接口驅動交互。這個部分是系統依賴(systemdependent)的,在Winpcap的解決方案里它被認為是一個設備驅動,稱作NPF(NetgroupPacketFilter)。Winpcap開發小組針對Windows 95Windows 98Windows MEWindows NT 4.0Windows 2000Windows XP提供了不同版本的驅動。這些驅動不僅提供了基本的特性(例如抓包和injection),還有更高級的特性(例如可編程的過濾器系統和監視引擎)。前者可以被用來約束一個抓包會話只針對網絡通信中的一個子集(例如,僅僅捕獲特殊主機產生的ftp通信的數據包),后者提供了一個強大而簡單的統計網絡通信量的機制(例如,獲得網絡負載或兩個主機間的數據交換量)。

其次,抓包系統必須有用戶級的程序接口,通過這些接口,用戶程序可以利用內核驅動提供的高級特性。Winpcap提供了兩個不同的庫:packet.dll和wpcap.dll。前者提供了一個底層API,伴隨著一個獨立于微軟操作系統的編程接口,這些API可以直接用來訪問驅動的函數;后者導出了一組更強大的與libpcap一致的高層抓包函數庫(captureprimitives)。這些函數使得數據包的捕獲以一種與網絡硬件和操作系統無關的方式進行。

NPF驅動

網絡數據包過濾器(NetgroupPacketFilter,NPF)是Winpcap的核心部分,它是Winpcap完成困難工作的組件。它處理網絡上傳輸的數據包,并且對用戶級提供可捕獲(capture)、發送(injection)和分析性能(analysiscapabilities)。

NPF和NDIS

NDIS(NetworkDriverInterfaceSpecification)是一個定義網絡適配器(或者說成是管理網絡適配器的驅動程序)與協議驅動(例如TCP/IP的實現)之間通信的規范。NDIS最主要的目的是作為一個允許協議驅動發送和接收網絡(LAN或WAN)上的數據包而不必關心特定的適配器或特定的win32操作系統的封裝。

NDIS支持三種類型的網絡驅動:

(1)網絡接口卡或NIC驅動(NetworkinterfacecardorNICdrivers)。NIC驅動直接管理著網絡接口卡(NIC)。NIC驅動接下邊與硬件連接,從上邊表現為一個接口,該接口允許高層發送數據包到網絡上,處理中斷,重置NIC,停止NIC,查詢和設置驅動的運行特征。NIC驅動可以是小端口(miniport)或完全的NIC驅動(fullNICdriver)。

Miniport驅動僅僅實現了管理NIC的必要操作,包括在NIC上發送和接收數據。對于所有最底層的NIC驅動的操作由NDIS提供,例如同步(synchronization)。小端口(miniport)不直接調用操作系統函數,它們對于操作系統的接口是NDIS。

小端口僅僅是向上傳遞數據包給NDIS并且NDIS確保這些數據包被傳遞給正確的協議。

完全NIC驅動(FullNICdriver)完成硬件細節的操作和所有由NDIS完成的同步和查詢操作。例如,完全NIC驅動維持接收到的數據的綁定信息。

(2)中間層驅動(Intermediatedrivers)中間層驅動位于高層驅動(例如協議驅動)和小端口之間。對于高層驅動,中間層驅動看起來像是小端口;對于小端口,中間層驅動看起來像協議驅動。一個中間層協議驅動可以位于另一個中間層驅動之上,盡管這種分層可能對系統性能帶來負面影響。開發中間層驅動的一個關鍵原因是在現存的遺留協議驅動(legacyprotocoldriver)和小端口之間形成媒體的轉化。例如,中間層驅動可以將LAN協議轉換成ATM協議。中間層驅動不能與用戶模式的應用程序通信,但可以與其他的NDIS驅動通信。

(3)傳輸驅動或協議驅動(Transportdriversorprotocoldrivers)協議驅動實現了網絡協議棧,例如IPX/SPX或TCP/IP,在一個或多個網絡接口卡上提供它的服務。在協議驅動的上面,它為應用層客戶程序服務;在它的下面,它與一個或多個NIC驅動或中間層NDIS驅動連接。

NPF是一個協議驅動。從性能方面來看,這不是最好的選擇,但是它合理地獨立于麥金塔層并且有權使用原始通信(rawtraffic)。

下圖表現了NPF在NDIS棧中的位置:

NPF結構基礎

下圖表現了伴隨著NPF驅動細節的Winpcap的結構。

抓包

抓包是NPF最重要的操作。在抓包的時候,驅動使用一個網絡接口監視著數據包,并將這些數據包完整無缺地投遞給用戶級應用程序。

抓包過程依賴于兩個主要組件:

一個數據包過濾器,它決定著是否接收進來的數據包并把數據包拷貝給監聽程序。數據包過濾器是一個有布爾輸出的函數。如果函數值是true,抓包驅動拷貝數據包給應用程序;如果是false,數據包將被丟棄。NPF數據包過濾器更復雜一些,因為它不僅決定數據包是否應該被保存,而且還得決定要保存的字節數。被NPF驅動采用的過濾系統來源于BSDPacketFilter(BPF),一個虛擬處理器可以執行偽匯編書寫的用戶級過濾程序。應用程序采用用戶定義的過濾器并使用wpcap.dll將它們編譯進BPF程序。然后,應用程序使用BIOCSETFIOCTL寫入核心態的過濾器。這樣,對于每一個到來的數據包該程序都將被執行,而滿足條件的數據包將被接收。與傳統解決方案不同,NPF不解釋(interpret)過濾器,而是執行(execute)它。由于性能的原因,在使用過濾器前,NPF提供一個JIT編譯器將它轉化成本地的80x86函數。當一個數據包被捕獲,NPF調用這個本地函數而不是調用過濾器解釋器,這使得處理過程相當快。

一個循環緩沖區,用來保存數據包并且避免丟失。一個保存在緩沖區中的數據包有一個頭,它包含了一些主要的信息,例如時間戳和數據包的大小,但它不是協議頭。此外,以隊列插入的方式來保存數據包可以提高數據的存儲效率。可以以組的方式將數據包從NPF緩沖區拷貝到應用程序。這樣就提高了性能,因為它降低了讀的次數。如果一個數據包到來的時候緩沖區已經滿了,那么該數據包將被丟棄,因此就發生了丟包。

實例

獲得網卡接口。在普通的SOCKET編程中,對雙網卡編程是不行的。當主機為雙網卡時,本程序可分別獲得兩張網卡各自的描述結構及地址,然后可以對它們分別進行操作。返回的alldevs隊列首部為邏輯網卡,一般不對它進行什么操作。

獲得網卡接口

抓包

本程序俘獲局域網內UDP報文。

發包

要在命令行下運行,給與參數:網卡描述符。或者添加代碼findalldevs(),那樣應很方便。

卸載問題

winpcap卸載不干凈的解決方法

winpcap卸載不干凈的的時候,在windows下刪除一些文件即可,刪除下面的文件即可:

c:\windows\system32\Packet.dll

c:\windows\system32\drivers/npf.sys

c:\windows\system32\WanPacket.dll

c:\windows\system32\wpcap.dll

c:\windows\system32\pthreadVC.dll

特點

Winpcap提供了一個強大的編程接口,它很容易地在各個操作系統之間進行移植,也很方便程序員進行開發。

什么樣的程序需要使用Winpcap

很多不同的工具軟件使用Winpcap于網絡分析,故障排除,網絡安全監控等方面。Winpcap特別適用于下面這幾個經典領域:

1、網絡及協議分析

2、網絡監控

3、通信日志記錄

4、trafficgenerators

5、用戶級別的橋路和路由

6、網絡入侵檢測系統(NIDS)

7、網絡掃描

8、安全工具

Winpcap有些方面不能做。它不依靠主機的諸如TCP/IP協議去收發數據包。這意味著它不能阻塞,不能處理同一臺主機中各程序之間的通信數據。它只能“嗅探”到物理線路上的數據包。因此它不適用于trafficshapers,QoS調度,以及個人防火墻。

Winpcap內部結構

Winpcap是一個win32平臺下用于抓包和分析的系統。包括一個內核級別的packetfilter,一個底層的DLL(packet.dll)和一個高級的獨立于系統的DLL(Wpcap.dll)

參考資料 >

WinPcap下載-WinPcap官方下載(64位|32位)-華軍軟件園.華軍軟件園.2021-11-28

生活家百科家居網