Windows Sockets是Windows平臺上很成熟的編程框架吧,當時學習網絡編程入門都是接觸的套接字,確實也能夠滿足大多數網絡應用程序設計的需求,並且與Windows系統的消息、事件等機制想結合的高效的I/O處理模式。
但是當面對更加深入的網絡數據分析和更加靈活的數據構造需求時,比如統計局域網中的流量分佈、識別特定應用的數據流以及構造滿足特殊含義的探測報文等等,由於協議棧底層細節的封裝,另加安全性的考慮,Windows操作系統對原始套接字和Sockets編程都有限制。
WinPcap編程爲Windows環境下靈活控制數據接收和發送提供了便利的開發框架。屬於開源庫!!!(這也是我很喜歡的原因) 能夠應用於網絡數據幀的構造,捕獲和分析。
當然,這裏還得提一下:C語言的網絡工具開發API庫有libnet、libpcap、libnids和libicmp等。 不止是伯克利實驗室的sockets編程的那些函數(我開始也是認爲就只有sockets)。
WinPcap是Windows Packet Capture的縮寫。是linux下的libpcap移植到Windows平臺下爲實現數據幀捕獲而設計的開發框架。
這裏說一下(乾貨和術語):WinPcap的官方主頁是www.winpcap.org , 下載WinPcap驅動,源代碼和開發文檔
NPF(Netgroup Packet Filter,網絡組幀過濾)模塊是WInPcap的核心部分
NIC(Network Interface Card,網絡接口卡,簡稱網卡)驅動程序。
NDIS(Network Driver Interface Specification,網絡驅動程序接口規範)是定義網卡和協議驅動(TCP/IP實現)之間的通信的標準。是Windows內核中最底層的網絡部分!!操作系統中有NDISLib或者NDISWrapper哦(我以前也不知道)。
WinPcap包含Packet.dll和wpcap.dll兩個動態鏈接庫
WinPcap可以獨立於TCP/IP協議棧進行原始數據幀的發送和接收,直接在網卡上捕獲原始數據幀,這樣,應用程序還可以進行數據幀的過濾,當然,也可以通過網卡直接發送原始數據幀。
基於WinPcap的典型應用很多,很多有數據幀捕獲功能的軟件都使用了這一開源庫。 當然,它也僅僅能監視網絡上傳輸的數據幀。 不能提供類似網絡流量控制和個人防火牆類的應用開發(比較遺憾這些居然不能)。
網絡組幀過濾模塊的功能:數據幀捕獲、監控、拷貝到磁盤、數據幀發送等。其中數據轉儲功能相比傳統的sockets的應用程序要少兩次數據的複製,效率更高。
另外,有兩個例程的代碼分別是使用wpcap.dll編寫的UDP流量捕獲程序和基於Packet.dll實現的對原始數據幀的構造和發送。