發(fā)布時間:2022-05-30 文章來源:深度系統(tǒng)下載 瀏覽:
網(wǎng)絡技術是從1990年代中期發(fā)展起來的新技術,它把互聯(lián)網(wǎng)上分散的資源融為有機整體,實現(xiàn)資源的全面共享和有機協(xié)作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計算機、存儲資源、數(shù)據(jù)資源、信息資源、知識資源、專家資源、大型數(shù)據(jù)庫、網(wǎng)絡、傳感器等。 當前的互聯(lián)網(wǎng)只限于信息共享,網(wǎng)絡則被認為是互聯(lián)網(wǎng)發(fā)展的第三階段。 防火墻可以實施和執(zhí)行網(wǎng)絡訪問策略,但是,傳統(tǒng)的防火墻技術集中于如何防范外部網(wǎng)絡對內部網(wǎng)絡的入侵和攻擊上,而對于如何控制內部用戶對外部網(wǎng)絡的訪問問題研究不夠深入,相關的控制技術也不多。據(jù)權威資料顯示,全球現(xiàn)有大約25萬色情網(wǎng)站,單純依靠傳統(tǒng)的包過濾等防火墻技術,勢必會嚴重影響網(wǎng)絡性能。針對這一問題,我們從應用層網(wǎng)關技術入手,利用WinSock2 SPI技術,進行了研究和探討。
Winsock2 SPI允許開發(fā)兩類服務提供者——傳輸服務提供者和名字空間服務提供者!皞鬏斕峁┱摺保═ransport Providers, 一般稱作協(xié)議堆棧,例如TCP/IP)能夠提供建立通信、傳輸數(shù)據(jù)、日常數(shù)據(jù)流控制和錯誤控制等傳輸功能方面的服務!懊挚臻g提供者”(Name Space Providers,例如DNS名字解析服務)則把一個的地址屬性和一個或多個用戶友好名稱關聯(lián)到一起,以便啟用與應用無關的名字解析方案。 Winsock2中使用的傳輸服務提供者有兩類:基礎服務提供者和分層服務提供者;A服務提供者執(zhí)行網(wǎng)絡傳輸協(xié)議(比如TCP/IP)的具體細節(jié),其中包括在網(wǎng)絡上收發(fā)數(shù)據(jù)之類的核心網(wǎng)絡協(xié)議功能!胺謱邮健保↙ayered)服務提供者只負責執(zhí)行高級的自定義通信功能,并依靠下面的基礎服務提供者,在網(wǎng)絡上進行真正的數(shù)據(jù)交換。 為了進行內部用戶對外訪問控制,我們需要在現(xiàn)有的基礎提供者TCP/IP提供者上設立一個分層式的URL過濾管理者。通過URL過濾管理者我們可以截獲用戶請求的HTTP數(shù)據(jù)包中的URL地址,繼而可以通過高效的數(shù)據(jù)檢索算法(如利用Fibonacci散列函數(shù)的哈希表),在訪問規(guī)則庫(被禁止訪問的IP集合)中查找指定的IP,根據(jù)結果拒絕或提供訪問服務。 傳輸服務提供者的安裝方式?jīng)Q定了它不僅是一個分層提供者,還是一個基礎服務提供者。Winsock 2使用系統(tǒng)配置數(shù)據(jù)庫配置傳輸服務提供者。配置數(shù)據(jù)庫讓Winsock2得知服務提供者的存在,并定義了提供的服務類型。要在Winsock2服務提供者數(shù)據(jù)庫內成功安裝和管理服務提供者,需要四個函數(shù):WSCEnumProtocols、WSCInstallProvider、WSCWriteProvider Order、WSCDeInstallProvider。這些函數(shù)利用WSAPROTOCOL_INFOW結構,對服務提供者數(shù)據(jù)庫進行查詢和操作。要安裝分層式服務提供者,需要建立兩個WSPPROTOCOL_INFOW目錄條目結構。一個代表分層提供者(協(xié)議鏈長度等于0),另一個將代表一個協(xié)議鏈(協(xié)議長度大于1),該協(xié)議鏈把分層提供者與一個基礎服務提供者鏈接起來。應該使用現(xiàn)有服務提供者的WSAPROTOCOL_INFOW目錄條目結構的屬性來初始化這兩個結構。調用WSCEnumProtocols可以獲得已有的服務提供者的WSAPROTOCOL_INFOW目錄條目結構。初始化之后,首先需要使用WSCInstallProvider來安裝我們的訪問控制分層服務提供者目錄條目,然后,利用WSCEnumProtocols列舉出所有的目錄條目,獲得安裝之后為這個結構分配的目錄ID。然后,用這個目錄條目來設置一個協(xié)議鏈目錄條目,通過它,將我們的訪問控制服務提供者和另一個提供者(TCP基礎提供者)鏈接起來。然后再次調用WSCInstallProvider來安裝我們的分層鏈式服務提供者。 在用WSCInstallProvider安裝一個服務提供者時,目錄條目自動成為配置數(shù)據(jù)庫中的最后一個條目。要實現(xiàn)訪問控制就必須使我們的URL過濾服務提供者成為默認的TCP/IP提供者,必須通過調用WSCWriteProviderOrder函數(shù)來完成此項工作,對數(shù)據(jù)庫中提供者目錄條目進行重新排序,并把協(xié)議鏈目錄條目放在TCP/IP基礎提供者之前。 Winsock2傳輸服務提供者隨標準的Windows動態(tài)鏈接庫模塊一起執(zhí)行。我們必須在我們的服務提供者動態(tài)鏈接庫模塊中導入DLLMain函數(shù),同時還必須導入一個名為WSPStartup的單一函數(shù)條目。我們的URL過濾服務提供者必須提供對WSPStartup函數(shù)和其他30個SPI函數(shù)的支持。調用WSAStartup期間,Winsock根據(jù)WSASocket調用的地址家族、套接字類型和協(xié)議參數(shù),來決定需要加載哪個服務提供者。只有在一個應用程序通過socket或WSASocket API調用建立一個采用地址家族AF_INET、套接字類型為SOCK_STREAM的套接字時,Winsock才會搜索并加載與之相應的、能夠提供TCP/IP能力的傳輸服務提供者。WSPStartup的參數(shù)UpcallTable取得Ws2_32.dll的SPI函數(shù)派遣表,我們的訪問控制分層服務提供者利用這些函數(shù)來管理自身和Winsock2之間的I/O操作。 我們利用WSPConnect函數(shù)來實現(xiàn)訪問控制功能。在用戶請求HTTP服務時,需要首先建立與目標站點的連接,連接成功后,在此連接基礎上發(fā)送HTTP請求數(shù)據(jù)包。用戶應用程序調用connect或WSAConnect函數(shù)建立連接時,SPI會調用對應的WSPConnect函數(shù):INT WSPAPI WSPConnect(...,const struct sockaddr FAR *name,...,INT FAR *lpErrno)。在sockaddr類型的參數(shù)name中包含了用戶將要訪問的目標站點的IP地址信息。我們將name參數(shù)傳遞到IP可訪問性判定例程IPFilter。如果IPFilter函數(shù)返回代表授權訪問的結果,我們采用協(xié)議鏈命令路由,調用下一層的基礎服務提供者(TCP/IP)來完成連接請求。如果IPFilter函數(shù)返回代表拒絕服務的結果,我們設置lpErrno參數(shù)為相應的錯誤碼,然后返回,不進行協(xié)議鏈下一層服務提供者的調用,從而實現(xiàn)訪問控制。 分層式服務提供者大大發(fā)揮了聯(lián)網(wǎng)服務的潛能,增強了Winsock的應用,在我們的URL過濾服務中發(fā)揮了巨大的作用,基本實現(xiàn)了對內部用戶訪問外部網(wǎng)絡的訪問控制,為用戶提供了對互聯(lián)網(wǎng)的健康性的訪問服務。 【相關文章】
網(wǎng)絡的神奇作用吸引著越來越多的用戶加入其中,正因如此,網(wǎng)絡的承受能力也面臨著越來越嚴峻的考驗―從硬件上、軟件上、所用標準上......,各項技術都需要適時應勢,對應發(fā)展,這正是網(wǎng)絡迅速走向進步的催化劑。 |