一、個人防火牆技術概述
隨著網絡安全問題日益嚴重,廣大用戶對網絡安全產品也越來越關注。防火牆作為一種網絡安全工具,早已受到大家的青睐。在PC機上使用的個人防火牆,很大程度上成為廣大網民的安全保護者。Windows下的個人防火牆都是基於對數據報的攔截技術之上。當然在具體的實現方式上它們卻有很大的不同。總的來說可分為用戶級和內核級數據報攔截兩類。其中內核級主要是TDI過濾驅動程序,NDIS中間層過濾驅動程序,NDIS過濾鉤子驅動程序等,它們都是利用網絡驅動來實現的;而用戶級的過濾包括SPI接口,Windows2000包過濾接口等。本文主要講述基於SPI的包過濾實現,它是Winsock 2的一個新特性。 .
二、Winsock 2 SPI介紹 .
Winsock 2 是一個接口,而不是協議,所以它可以用於發現和使用任意數量的底層傳輸協議所提供的通信能力。起初的Winsock是圍繞著TCP/IP協議運行的,但是在Winsock 2中卻增加了對更多傳輸協議的支持。Winsock 2不僅提供了一個供應用程序訪問網絡服務的Windows socket應用程序編程接口(API),還包含了由傳輸服務提供者和名字解析服務提供者實現的Winsock服務提供者接口(SPI)和ws2_32.dll。本文僅討論傳輸服務提供者及其應用,,暫不對名字解析服務提供者進行分析。
.
Winsock 2的傳輸服務提供者是以動態鏈接庫的形式(DLL)存在的,它是通過WSPStartup函數為上層函數提供接口,而其他的傳輸服務提供者函數則是通過分配表的方式來訪問WS2_32.DLL。傳輸服務提供者的動態鏈接庫只有在應用程序需要時才由Ws2_32.dll來裝入內存中的,在不需要時則會被自動卸載。以下是winsock 2在傳輸服務提供者上的WOSA(Windows開放服務結構): .
---------------------------- .
│Windows socket 2 應用程序│ .
--------------------------Windows socket 2 API .
│ WS2_32.DLL │ .
----------------------------Windows socket 2 傳輸SPI
.
│ 傳輸服務提供者(DLL) │
.
----------------------------
.
Windows socket SPI在服務提供者中使用了以下的函數前綴命名方式:WSP(Windows socket服務提供者),WPU(Windows socket提供者向上調用),WSC(Windows socket配置)。每一個傳輸服務提供者都有它自己所支持的傳輸協議,它是使用WSAPROTCOL_INFOW結構來實現的。傳輸服務提供者把所有的相關信息都存放在這個結構中,而應用程序就是通過這個結構的內容來將自己和相應的傳輸服務提供者相關聯。 .