国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

自編防火墻控制圖書(shū)館查詢機(jī)

2017-06-30 20:50:11黃金春梁爽
科技視界 2017年5期
關(guān)鍵詞:防火墻

黃金春 梁爽

【摘 要】針對(duì)圖書(shū)館查詢機(jī)在使用過(guò)程中出現(xiàn)的普遍問(wèn)題,結(jié)合廣西中醫(yī)藥大學(xué)圖書(shū)館工作人員的工作經(jīng)驗(yàn)和多次實(shí)驗(yàn)嘗試,提出一種以自編防火墻程序?yàn)楹诵牟⒔Y(jié)合Windows系統(tǒng)服務(wù)來(lái)實(shí)現(xiàn)系統(tǒng)保護(hù)、瀏覽器控制訪問(wèn)等功能的解決方案,同時(shí)詳細(xì)闡述該解決方案設(shè)計(jì)過(guò)程中的各個(gè)關(guān)鍵步驟。

【關(guān)鍵詞】防火墻;查詢機(jī);Windows服務(wù)

Design the Firewall to Control the Library Inquiry Machine

【Abstract】Library inquiry machine has its special use requirements and several common problems during normal use.Combining the staff experience of GuangXi University of Chinese Medicine Library and their experiments,In this paper, we proposed a new method to control the Library inquiry machine.This paper discusses every step in this design.

【Key words】Firewall; Library inquiry machine; Windows Servers

0 引言

圖書(shū)館查詢機(jī)是提供給讀者方便地檢索館藏資源、查看或辦理個(gè)人圖書(shū)借閱情況和續(xù)借手續(xù)等服務(wù)的工具,是圖書(shū)館日?;顒?dòng)中最常用的工具之一,并且其數(shù)量也隨著圖書(shū)館的擴(kuò)大而增加。在其使用過(guò)程中,常常因?yàn)閿?shù)量較大、分布較散、讀者使用中較為隨意、網(wǎng)絡(luò)設(shè)置較為簡(jiǎn)單等原因,時(shí)常出現(xiàn)很多問(wèn)題而損壞,給讀者日常使用和工作人員的維護(hù)造成了很大的困擾。

1 目前控制查詢機(jī)的常用方法

基于以上的原因,許多管理人員使用到了各種辦法來(lái)加強(qiáng)對(duì)查詢機(jī)的控制,同時(shí)又由于圖書(shū)館的OPAC系統(tǒng)在使用時(shí)用瀏覽器來(lái)操作,因此也使用各種辦法加強(qiáng)對(duì)瀏覽器的控制。從本質(zhì)上來(lái)看這些控制分為兩大核心控制,一是對(duì)操作系統(tǒng)的控制,另一個(gè)是對(duì)網(wǎng)絡(luò)訪問(wèn)的控制。

1.1 常用控制操作系統(tǒng)的方法

控制操作系統(tǒng)主要是對(duì)系統(tǒng)修改,刪除,格式化等破壞性操作進(jìn)行控制。在控制上有多種方法,(1)通過(guò)配置計(jì)算機(jī)的組策略實(shí)現(xiàn)[1]。(2)通過(guò)第三方軟件如:360等機(jī)器管理軟件[2]。(3)使用無(wú)盤工作,使用還原卡,或者自動(dòng)還原軟件等辦法[3]。這些方法雖然都可以控制系統(tǒng),但也各有不足,如使用的是第三方軟件實(shí)現(xiàn)的辦法,在實(shí)際使用中發(fā)現(xiàn)許多第三方的軟件都附帶有其它程序,如各種廣告、彈窗等,使用起來(lái)不勝其煩。采用組策略的辦法配置較為麻煩,如配置錯(cuò)誤還會(huì)出現(xiàn)其它問(wèn)題,而采用還原卡的辦法會(huì)提高維護(hù)成本。因此都不是很好的辦法。

1.2 常用控制網(wǎng)絡(luò)訪問(wèn)的方法

控制網(wǎng)絡(luò)訪問(wèn)的辦法主要有,(1)通過(guò)劃分子網(wǎng),交換機(jī)隔離的辦法在機(jī)器的ip地址做限制實(shí)現(xiàn)。(2)通過(guò)設(shè)置單計(jì)算機(jī)的“路由和遠(yuǎn)程訪問(wèn)”的辦法[4]。(3)利用webbrower控件自設(shè)計(jì)瀏覽器的辦法[5]。(4)使用第三方網(wǎng)絡(luò)管理軟件,如美萍電腦安全衛(wèi)士或超級(jí)兔子實(shí)現(xiàn)的辦法[6]。這些方法有的需要硬件配合如方法1,有的因?yàn)榈谌杰浖綆С绦蚨霈F(xiàn)其它問(wèn)題,雖然自設(shè)計(jì)瀏覽器沒(méi)有附帶程序,但是因?yàn)槭褂玫目丶毕荻霈F(xiàn)功能不足,影響opac查詢系統(tǒng)的使用。

1.3 其他方法

使用影子系統(tǒng)[7]。是基于虛擬機(jī)原理的一種保護(hù)系統(tǒng),它可以產(chǎn)生出一個(gè)和原來(lái)系統(tǒng)一模一樣的虛擬系統(tǒng)(影子),所有的操作都針對(duì)這個(gè)影子,不會(huì)對(duì)真實(shí)系統(tǒng)產(chǎn)生影響。該方法比較實(shí)用但是安裝起來(lái)較為麻煩。

2 自寫防火墻方法的原理

2.1 Filter-hook驅(qū)動(dòng)技術(shù)

從Windows 2000開(kāi)始微軟公司在操作系統(tǒng)里提供了一個(gè)可以進(jìn)行ip數(shù)據(jù)包過(guò)濾的驅(qū)動(dòng)就是IP過(guò)濾驅(qū)動(dòng),其對(duì)應(yīng)即是ipfltdrv.sys文件。它擴(kuò)展了IP過(guò)濾驅(qū)動(dòng)(IP Filter Driver)的功能。Filter-Hook 驅(qū)動(dòng)并不是網(wǎng)絡(luò)驅(qū)動(dòng),它是一種內(nèi)核模式驅(qū)動(dòng)(Kernel Mode Driver),它提供回調(diào)函數(shù)(callback)。這樣當(dāng)數(shù)據(jù)包發(fā)送和接收時(shí),允許用戶注冊(cè)自己的ip數(shù)據(jù)報(bào)處理函數(shù)(鉤子驅(qū)動(dòng)程序)判斷ip數(shù)據(jù)包的處理方式[8]。為了說(shuō)明是如何實(shí)現(xiàn)的過(guò)濾,先看下Windows下IP數(shù)據(jù)包發(fā)送過(guò)程,如圖1所示發(fā)送過(guò)程主要有3個(gè)步驟,

圖1 Windows下IP數(shù)據(jù)包發(fā)送過(guò)程

1)IP 數(shù)據(jù)包形成后,系統(tǒng)就會(huì)將其傳遞給防火墻掛鉤驅(qū)動(dòng)程序 (Ipnat.sys) 進(jìn)行處理。

2)系統(tǒng)將數(shù)據(jù)包傳遞給ip篩選器驅(qū)動(dòng)程序 (Ipfltdrv.sys) 進(jìn)行處理。

3)系統(tǒng)將該數(shù)據(jù)包傳遞給 Ipsec.sys 進(jìn)行處理。

從該過(guò)程可以看出,數(shù)據(jù)包發(fā)送的第2步要通過(guò)ipfltdrv進(jìn)行控制。編寫程序自定義過(guò)濾規(guī)則掛鉤在其上就可實(shí)現(xiàn)對(duì)ip數(shù)據(jù)包的過(guò)濾處理。

3 自寫防火墻方法的具體實(shí)現(xiàn)

3.1 設(shè)計(jì)鉤子驅(qū)動(dòng)程序

鉤子驅(qū)動(dòng)程序?yàn)橄到y(tǒng)程序,用C++開(kāi)發(fā),首先必須安裝與windows對(duì)應(yīng)系統(tǒng)DDK開(kāi)發(fā)工具包,然后選擇為標(biāo)準(zhǔn)的sys項(xiàng)目。一個(gè)鉤子驅(qū)動(dòng)程序是按照PacketFilterExtensionPtr數(shù)據(jù)類型定義的函數(shù),這個(gè)函數(shù)本質(zhì)上是ip數(shù)據(jù)包過(guò)濾器驅(qū)動(dòng)。然后在系統(tǒng)提供的IP過(guò)濾驅(qū)動(dòng)程序(ipfltdry.sys)中注冊(cè)該函數(shù)的實(shí)體指針。當(dāng)注冊(cè)成功后,ip數(shù)據(jù)包將會(huì)被IP過(guò)濾驅(qū)動(dòng)程序發(fā)送給鉤子驅(qū)動(dòng)程序來(lái)進(jìn)行過(guò)濾檢查,以便決定怎樣進(jìn)一步處理數(shù)據(jù)包。它的返回值有[8]:

(1)PF-FORWARD表示IP過(guò)濾器驅(qū)動(dòng)立即把ip數(shù)據(jù)包轉(zhuǎn)發(fā)到IP協(xié)議棧中,如果該數(shù)據(jù)包是本機(jī)需要的數(shù)據(jù)包,IP協(xié)議將其轉(zhuǎn)發(fā)給上層協(xié)議處理,否則,如果路由功能被打開(kāi),IP將路由該數(shù)據(jù)包。

(2)PF-DROP表示IP過(guò)濾驅(qū)動(dòng)將立刻向IP協(xié)議棧發(fā)出丟棄響應(yīng),IP協(xié)議將丟棄該ip數(shù)據(jù)包。

(3)PF-PASS表示IP過(guò)濾驅(qū)動(dòng)處理該ip數(shù)據(jù)包,并將結(jié)果動(dòng)作回復(fù)給IP協(xié)議棧。 IP過(guò)濾器驅(qū)動(dòng)如何過(guò)濾數(shù)據(jù)包由它本身和包過(guò)濾API接口的設(shè)置方式來(lái)決定;如果過(guò)濾器鉤子認(rèn)為自己不需要處理該數(shù)據(jù)包,而是讓IP過(guò)濾器驅(qū)動(dòng)過(guò)濾包,則應(yīng)該返回該P(yáng)F-PASS。

設(shè)計(jì)該程序?qū)嵸|(zhì)為設(shè)計(jì)兩大部分,一為設(shè)計(jì)按照PacketFilterExtensionPtr數(shù)據(jù)類型定義的函數(shù),其說(shuō)明如下:

Type PF_FORWARD_ACTION(*PacketFilterExtensionPtr)

usigned char *PacketHeader, //數(shù)據(jù)包頭指針

usigned char *Packet, //數(shù)據(jù)包緩沖區(qū)指針

usigned int PacketLength, //緩沖區(qū)長(zhǎng)度

usigned int RecvInterfaceIndex,//接收數(shù)據(jù)包網(wǎng)卡序號(hào)

usigned int SebdInterfaceIndex,//發(fā)送數(shù)據(jù)包網(wǎng)卡序號(hào)

IPAddr RecvLinkNextHop, //多網(wǎng)卡使用

IPAddr SendLinkNextHop, //多網(wǎng)卡使用

);

通過(guò)如下類似代碼設(shè)計(jì)過(guò)濾函數(shù)

PF_FORWARD_ACTION FP(……)

{……

if(某個(gè)條件滿足){……

return PF-FORWARD

if() ……

return PF-DROP

if() ……

return PF-PASS

}

}

另一部分設(shè)計(jì)在系統(tǒng)提供的IP過(guò)濾驅(qū)動(dòng)程序(ipfltdry.sys)中注冊(cè)該函數(shù)的函數(shù)指針。通過(guò)PF_SET_EXTENSION_HOOK_INFO結(jié)構(gòu)完成,它的定義如下,其中包含回調(diào)函數(shù)的指針ExtensionPointer:

typedef struct _PF_SET_EXTENSION_HOOK_INFO

{

PacketFilterExtensionPtr ExtensionPointer;

}PF_SET_EXTENSION_HOOK_INFO,*PPF_SET_EXTENSION_

HOOK_INFO;

3.2 設(shè)置驅(qū)動(dòng)的I/O命令

前面完成設(shè)計(jì)是系統(tǒng)程序,沒(méi)有控制界面,需要設(shè)計(jì)應(yīng)用程序來(lái)完成控制。當(dāng)應(yīng)用程序要控制驅(qū)動(dòng)程序去操作時(shí),通過(guò)使用Windows API的 ioctl函數(shù)(ioctl是設(shè)備驅(qū)動(dòng)程序中對(duì)設(shè)備的I/O通道進(jìn)行管理的函數(shù))來(lái)控制驅(qū)動(dòng)的操作功能,并且它們之間的通訊是通過(guò)IRP(I/O request package是操作系統(tǒng)內(nèi)核的一個(gè)數(shù)據(jù)結(jié)構(gòu))來(lái)完成,因此必須分兩步實(shí)現(xiàn):

(1)先設(shè)定驅(qū)動(dòng)程序的ioctl自定義操作命令,使用CTL_CODE宏來(lái)創(chuàng)建。函數(shù)原型如下:

#define CTL_CODE(DeviceType設(shè)備類型, Function功能, Method I/O訪問(wèn)內(nèi)存使用方式, Access訪問(wèn)限制);

例如:

#define START_IP_HOOK CTL_CODE(0x3000, 0x900, METHOD_

BUFFERED, FILE_ANY_ACCESS)

(2)使用IoBuildDeviceIoControlRequest函數(shù)建立所需的IRP。然后應(yīng)用程序及可對(duì)驅(qū)動(dòng)程序進(jìn)行控制。

3.3 控制網(wǎng)絡(luò)訪問(wèn)的設(shè)置

設(shè)計(jì)好鉤子驅(qū)動(dòng)程序后,還要設(shè)計(jì)具體的網(wǎng)絡(luò)訪問(wèn)控制內(nèi)容,即對(duì)數(shù)據(jù)包的控制內(nèi)容,如協(xié)議號(hào)、ip地址、子網(wǎng)掩碼、端口號(hào)及對(duì)其的處理等等。為了方便操作,可設(shè)計(jì)一個(gè)結(jié)構(gòu)來(lái)存儲(chǔ)這些內(nèi)容。

如:struct IPFilter {

USHORT protocol; // 協(xié)議號(hào)

ULONG sourceIP; // 源IP地址

ULONG destinationIP; // 目標(biāo)IP地址

ULONG sourceMask; // 源地址子網(wǎng)掩碼

ULONG destinationMask; // 目的地址子網(wǎng)掩碼

USHORT sourcePort; // 源端口號(hào)

USHORT destinationPort; // 目的端口號(hào)

BOOLEAN drop; // 包處理

};

如果有多個(gè)訪問(wèn)控制那么就需要填寫多個(gè)結(jié)構(gòu),然后把這些結(jié)構(gòu)串成一個(gè)鏈表。在系統(tǒng)工作時(shí),對(duì)的數(shù)據(jù)包和此結(jié)構(gòu)的匹配是從鏈表頭開(kāi)始比較的。因此如何排列這些結(jié)構(gòu)就非常重要了,正確做法是把允許通過(guò)的放在前面,最后一個(gè)是拒絕所有的數(shù)據(jù)包。在此以我校圖書(shū)館為例來(lái)說(shuō)明,我校圖書(shū)館的查詢機(jī)要求可以訪問(wèn)內(nèi)網(wǎng)(172.16.0.0/16),還要求可以訪問(wèn)學(xué)校主頁(yè)(210.36.99.12),除此之外均不能訪問(wèn)。

1)允許內(nèi)網(wǎng)段訪問(wèn)

pf2.protocol = 6;

猜你喜歡
防火墻
筑牢防火墻 系緊安全帶
全民總動(dòng)員,筑牢防火墻
水上消防(2020年1期)2020-07-24 09:26:12
構(gòu)建防控金融風(fēng)險(xiǎn)“防火墻”
智慧防火墻
海南新農(nóng)合有了“防火墻”
在舌尖上筑牢抵御“僵尸肉”的防火墻
下一代防火墻要做的十件事
新漢 HENGETM工業(yè)防火墻
筑起網(wǎng)吧“防火墻”
自己選擇十大免費(fèi)防火墻
舞钢市| 临西县| 泽普县| 塘沽区| 镇平县| 苏州市| 观塘区| 来凤县| 乾安县| 义马市| 新和县| 达拉特旗| 蒙山县| 山东| 新昌县| 长垣县| 西安市| 陇西县| 丹东市| 星子县| 安阳县| 吉安县| 庄河市| 景东| 岳池县| 龙州县| 双峰县| 汶上县| 平潭县| 上高县| 康乐县| 吉木萨尔县| 杭州市| 贵德县| 普宁市| 无锡市| 清涧县| 兴化市| 汨罗市| 黄平县| 教育|