亚洲成精品动漫久久精久,九九在线精品视频播放,黄色成人免费观看,三级成人影院,久碰久,四虎成人欧美精品在永久在线

掃一掃
關(guān)注微信公眾號

利用WinSock2 SPI進行網(wǎng)絡(luò)內(nèi)容訪問控制
2007-07-28   網(wǎng)絡(luò)

編者按:與傳統(tǒng)的包過濾防火墻技術(shù)不同,本文從應用層網(wǎng)關(guān)技術(shù)入手,深入探討了利用WinSock2 SPI進行網(wǎng)絡(luò)內(nèi)容訪問控制的問題。這是網(wǎng)絡(luò)安全的一項新內(nèi)容,或者說,它為網(wǎng)絡(luò)安全技術(shù)的愛好者和研發(fā)人員提供了一個新的思路。

 

防火墻可以實施和執(zhí)行網(wǎng)絡(luò)訪問策略,但是,傳統(tǒng)的防火墻技術(shù)集中于如何防范外部網(wǎng)絡(luò)對內(nèi)部網(wǎng)絡(luò)的入侵和攻擊上,而對于如何控制內(nèi)部用戶對外部網(wǎng)絡(luò)的訪問問題研究不夠深入,相關(guān)的控制技術(shù)也不多。據(jù)權(quán)威資料顯示,全球現(xiàn)有大約25萬色情網(wǎng)站,單純依靠傳統(tǒng)的包過濾等防火墻技術(shù),勢必會嚴重影響網(wǎng)絡(luò)性能。針對這一問題,我們從應用層網(wǎng)關(guān)技術(shù)入手,利用WinSock2 SPI技術(shù),進行了研究和探討。

498)this.style.width=498;">

Winsock2 SPI原理圖

Winsock2 SPI(Service Provider Interface)服務(wù)提供者接口建立在Windows開放系統(tǒng)架構(gòu)WOSA(Windows Open System Architecture)之上,是Winsock系統(tǒng)組件提供的面向系統(tǒng)底層的編程接口。Winsock系統(tǒng)組件向上面向用戶應用程序提供一個標準的API接口;向下在Winsock組件和Winsock服務(wù)提供者(比如TCP/IP協(xié)議棧)之間提供一個標準的SPI接口。各種服務(wù)提供者是Windows支持的DLL,掛靠在Winsock2 的Ws2_32.dll模塊下。對用戶應用程序使用的Winsock2 API中定義的許多內(nèi)部函數(shù)來說,這些服務(wù)提供者都提供了它們的對應的運作方式(例如API函數(shù)WSAConnect有相應的SPI函數(shù)WSPConnect)。多數(shù)情況下,一個應用程序在調(diào)用Winsock2 API函數(shù)時,Ws2_32.dll會調(diào)用相應的Winsock2 SPI函數(shù),利用特定的服務(wù)提供者執(zhí)行所請求的服務(wù)。

Winsock2 SPI允許開發(fā)兩類服務(wù)提供者——傳輸服務(wù)提供者和名字空間服務(wù)提供者。“傳輸提供者”(Transport Providers, 一般稱作協(xié)議堆棧,例如TCP/IP)能夠提供建立通信、傳輸數(shù)據(jù)、日常數(shù)據(jù)流控制和錯誤控制等傳輸功能方面的服務(wù)。“名字空間提供者”(Name Space Providers,例如DNS名字解析服務(wù))則把一個網(wǎng)絡(luò)協(xié)議的地址屬性和一個或多個用戶友好名稱關(guān)聯(lián)到一起,以便啟用與應用無關(guān)的名字解析方案。

Winsock2中使用的傳輸服務(wù)提供者有兩類:基礎(chǔ)服務(wù)提供者和分層服務(wù)提供者。基礎(chǔ)服務(wù)提供者執(zhí)行網(wǎng)絡(luò)傳輸協(xié)議(比如TCP/IP)的具體細節(jié),其中包括在網(wǎng)絡(luò)上收發(fā)數(shù)據(jù)之類的核心網(wǎng)絡(luò)協(xié)議功能。“分層式”(Layered)服務(wù)提供者只負責執(zhí)行高級的自定義通信功能,并依靠下面的基礎(chǔ)服務(wù)提供者,在網(wǎng)絡(luò)上進行真正的數(shù)據(jù)交換。

為了進行內(nèi)部用戶對外訪問控制,我們需要在現(xiàn)有的基礎(chǔ)提供者TCP/IP提供者上設(shè)立一個分層式的URL過濾管理者。通過URL過濾管理者我們可以截獲用戶請求的HTTP數(shù)據(jù)包中的URL地址,繼而可以通過高效的數(shù)據(jù)檢索算法(如利用Fibonacci散列函數(shù)的哈希表),在訪問規(guī)則庫(被禁止訪問的IP集合)中查找指定的IP,根據(jù)結(jié)果拒絕或提供訪問服務(wù)。

傳輸服務(wù)提供者的安裝方式?jīng)Q定了它不僅是一個分層提供者,還是一個基礎(chǔ)服務(wù)提供者。Winsock 2使用系統(tǒng)配置數(shù)據(jù)庫配置傳輸服務(wù)提供者。配置數(shù)據(jù)庫讓Winsock2得知服務(wù)提供者的存在,并定義了提供的服務(wù)類型。要在Winsock2服務(wù)提供者數(shù)據(jù)庫內(nèi)成功安裝和管理服務(wù)提供者,需要四個函數(shù):WSCEnumProtocols、WSCInstallProvider、WSCWriteProvider Order、WSCDeInstallProvider。這些函數(shù)利用WSAPROTOCOL_INFOW結(jié)構(gòu),對服務(wù)提供者數(shù)據(jù)庫進行查詢和操作。要安裝分層式服務(wù)提供者,需要建立兩個WSPPROTOCOL_INFOW目錄條目結(jié)構(gòu)。一個代表分層提供者(協(xié)議鏈長度等于0),另一個將代表一個協(xié)議鏈(協(xié)議長度大于1),該協(xié)議鏈把分層提供者與一個基礎(chǔ)服務(wù)提供者鏈接起來。應該使用現(xiàn)有服務(wù)提供者的WSAPROTOCOL_INFOW目錄條目結(jié)構(gòu)的屬性來初始化這兩個結(jié)構(gòu)。調(diào)用WSCEnumProtocols可以獲得已有的服務(wù)提供者的WSAPROTOCOL_INFOW目錄條目結(jié)構(gòu)。初始化之后,首先需要使用WSCInstallProvider來安裝我們的訪問控制分層服務(wù)提供者目錄條目,然后,利用WSCEnumProtocols列舉出所有的目錄條目,獲得安裝之后為這個結(jié)構(gòu)分配的目錄ID。然后,用這個目錄條目來設(shè)置一個協(xié)議鏈目錄條目,通過它,將我們的訪問控制服務(wù)提供者和另一個提供者(TCP基礎(chǔ)提供者)鏈接起來。然后再次調(diào)用WSCInstallProvider來安裝我們的分層鏈式服務(wù)提供者。

在用WSCInstallProvider安裝一個服務(wù)提供者時,目錄條目自動成為配置數(shù)據(jù)庫中的最后一個條目。要實現(xiàn)訪問控制就必須使我們的URL過濾服務(wù)提供者成為默認的TCP/IP提供者,必須通過調(diào)用WSCWriteProviderOrder函數(shù)來完成此項工作,對數(shù)據(jù)庫中提供者目錄條目進行重新排序,并把協(xié)議鏈目錄條目放在TCP/IP基礎(chǔ)提供者之前。

Winsock2傳輸服務(wù)提供者隨標準的Windows動態(tài)鏈接庫模塊一起執(zhí)行。我們必須在我們的服務(wù)提供者動態(tài)鏈接庫模塊中導入DLLMain函數(shù),同時還必須導入一個名為WSPStartup的單一函數(shù)條目。我們的URL過濾服務(wù)提供者必須提供對WSPStartup函數(shù)和其他30個SPI函數(shù)的支持。調(diào)用WSAStartup期間,Winsock根據(jù)WSASocket調(diào)用的地址家族、套接字類型和協(xié)議參數(shù),來決定需要加載哪個服務(wù)提供者。只有在一個應用程序通過socket或WSASocket API調(diào)用建立一個采用地址家族AF_INET、套接字類型為SOCK_STREAM的套接字時,Winsock才會搜索并加載與之相應的、能夠提供TCP/IP能力的傳輸服務(wù)提供者。WSPStartup的參數(shù)UpcallTable取得Ws2_32.dll的SPI函數(shù)派遣表,我們的訪問控制分層服務(wù)提供者利用這些函數(shù)來管理自身和Winsock2之間的I/O操作。

我們利用WSPConnect函數(shù)來實現(xiàn)訪問控制功能。在用戶請求HTTP服務(wù)時,需要首先建立與目標站點的連接,連接成功后,在此連接基礎(chǔ)上發(fā)送HTTP請求數(shù)據(jù)包。用戶應用程序調(diào)用connect或WSAConnect函數(shù)建立連接時,SPI會調(diào)用對應的WSPConnect函數(shù):INT WSPAPI WSPConnect(...,const struct sockaddr FAR *name,...,INT FAR *lpErrno)。在sockaddr類型的參數(shù)name中包含了用戶將要訪問的目標站點的IP地址信息。我們將name參數(shù)傳遞到IP可訪問性判定例程IPFilter。如果IPFilter函數(shù)返回代表授權(quán)訪問的結(jié)果,我們采用協(xié)議鏈命令路由,調(diào)用下一層的基礎(chǔ)服務(wù)提供者(TCP/IP)來完成連接請求。如果IPFilter函數(shù)返回代表拒絕服務(wù)的結(jié)果,我們設(shè)置lpErrno參數(shù)為相應的錯誤碼,然后返回,不進行協(xié)議鏈下一層服務(wù)提供者的調(diào)用,從而實現(xiàn)訪問控制。

分層式服務(wù)提供者大大發(fā)揮了聯(lián)網(wǎng)服務(wù)的潛能,增強了Winsock的應用,在我們的URL過濾服務(wù)中發(fā)揮了巨大的作用,基本實現(xiàn)了對內(nèi)部用戶訪問外部網(wǎng)絡(luò)的訪問控制,為用戶提供了對互聯(lián)網(wǎng)的健康性的訪問服務(wù)。

熱詞搜索:

上一篇:學習中小企業(yè)安全路由器的基本配置方法
下一篇:交換機及路由器如何更加安全六大法則

分享到: 收藏