999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

個(gè)人防火墻系統(tǒng)內(nèi)部模塊間通訊的設(shè)計(jì)與實(shí)現(xiàn)

2012-03-20 08:58:16謝秀維

謝秀維

中國(guó)人民銀行滄州中心支行科技科 河北 061001

0 引言

隨著Internet不斷的發(fā)展和普及,網(wǎng)絡(luò)信息安全問題越來越受到人的關(guān)注,時(shí)常讓人擔(dān)憂。攻擊者利用計(jì)算機(jī)硬件、軟件、網(wǎng)絡(luò)設(shè)備等安全漏洞進(jìn)行攻擊。攻擊事件一旦發(fā)生就可能導(dǎo)致有關(guān)的服務(wù)中斷、重要商業(yè)信息失竊、研究機(jī)構(gòu)的重要數(shù)據(jù)丟失甚至涉及到國(guó)家機(jī)密等,其災(zāi)難性后果不言而喻。防火墻是網(wǎng)絡(luò)信息安全的主要技術(shù)手段之一,個(gè)人防火墻得到了廣泛應(yīng)用。

由于防火墻涉及系統(tǒng)文件SYS、動(dòng)態(tài)連接庫(kù)DLL和用戶界面應(yīng)用程序EXE,因此,不同進(jìn)程間數(shù)據(jù)共享就變得至關(guān)重要。DLL安裝在應(yīng)用程序和驅(qū)動(dòng)程序之間,為上層應(yīng)用程序提供網(wǎng)絡(luò)連接服務(wù)。

DLL與EXE及其它調(diào)用它的進(jìn)程都需要共享控管規(guī)則數(shù)據(jù),但這些數(shù)據(jù)都不是固定長(zhǎng)度的,因此選用了內(nèi)存映射的方法。此外,由于DLL和SYS都是對(duì)截獲的封包緩沖區(qū)進(jìn)行操作,如采用全局變量則會(huì)降低模塊的獨(dú)立性,而采用內(nèi)存映射正好解決了這一問題。

1 數(shù)據(jù)共享

因?yàn)?Windows2000不允許應(yīng)用層的程序直接訪問系統(tǒng)內(nèi)存的地址空間,為了在EXE,DLL和SYS之間共享內(nèi)存,實(shí)現(xiàn)內(nèi)存共享的原理是:首先用驅(qū)動(dòng)程序(SYS)申請(qǐng)內(nèi)存空間,SYS中申請(qǐng)的內(nèi)存在系統(tǒng)地址空間(>=0x80000000),為了讓EXE和DLL能夠訪問這個(gè)空間,需要將系統(tǒng)地址空間映射到用戶地址空間(<0x80000000),具體的步驟是:

(1) 在SYS中申請(qǐng)內(nèi)存空間,代碼如下:

SystemVirtualAddress=MmAllocateContiguousMemory(NumberOfBytes,HighestAcceptableAddress );

(2) 申請(qǐng)一個(gè)MDL結(jié)構(gòu),代碼如下:

Mdl = IoAllocateMdl (SystemVirtualAddress, NumberOfBytes,FALSE,FALSE, NULL);

(3) 在MDL結(jié)構(gòu)中標(biāo)識(shí)內(nèi)存頁(yè)

①如果申請(qǐng)內(nèi)存時(shí)使用了非分頁(yè)池(non-paged pool),使用下面的代碼:

MmBuildMdlForNonPagedPool (Mdl);

②如果申請(qǐng)內(nèi)存時(shí)使用了分頁(yè)池(paged pool),使用下面的代碼:

MmProbeAndLockPages (Mdl, KernelMode, IoWriteAccess);

(4) 將鎖定的內(nèi)存頁(yè)映射到應(yīng)用層(EXE或DLL)的用戶地址空間,代碼如下:

UserVirtualAddress=MmMapLockedPages (Mdl, UserMode);

上面的4個(gè)步驟可以在DriverEntry或者DispatchRoutine中運(yùn)行。

釋放內(nèi)存大致是執(zhí)行與上面相反的過程。步驟如下:

(1) 在用戶進(jìn)程上下文環(huán)境中執(zhí)行下面的代碼,解除到用戶地址空間的映射:

MmUnmapLockedPages (UserVirtualAddress, Mdl);

(2) 如果使用MmProbleAndLockPages鎖定了內(nèi)存空間,使用下面的代碼解鎖:

MmUnlockPages (Mdl);

(3) 釋放MDL,代碼如下: IoFreeMdl (Mdl);

(4) 釋放系統(tǒng)空間,代碼如下:

MmFreeContiguousMemory (SystemVirtualAddress);

或者:ExFreePool (SystemVirtualAddress);

在上述四個(gè)步驟中,第一步必須在用戶進(jìn)程上下文環(huán)境中執(zhí)行,2, 3, 4步可以在DriverEntry或者DispatchRoutine中運(yùn)行。

2 EXE與DLL之間的接口

NETLAB.EXE與NETLAB.DLL主要需要進(jìn)行控管規(guī)則數(shù)據(jù)和封包數(shù)據(jù)的共享,另外需要一些其它輔助操作。它之間的接口函數(shù)為XfIoControl,此函數(shù)在NETLAB.DLL的TCPIPDOG.CPP模塊。

NETLAB.EXE通過LoadLibrary打開NETLAB.DLL,然后通過GetProcAddress得到XfIoControl函數(shù)的地址,以后NETLAB.EXE便通過XfIoControl函數(shù)完成與NETLAB.DLL的通信。XfIoControl支持的操作如下:

(1) 控制代碼:IO_CONTROL_SET_NETLAB_PROCESS_ID

參數(shù)含義:IoControl->DWord:進(jìn)程ID

IoControl->DWord2:進(jìn)程完整路徑指針

(2) 控制代碼:IO_CONTROL_SET_WORK_MODE

參數(shù)含義:IoControl->Byte:總工作模式

(3) 控制代碼:IO_CONTROL_GET_SESSION_FILE_HANDLE

參數(shù)含義:IoControl->DWord:返回封包緩沖區(qū)的地址

作用:NETLAB.EXE從NETLAB.DLL得到封包緩沖區(qū)的地址,由于內(nèi)存映射文件不同進(jìn)程映射的地址不同,所以此參數(shù)不能真正作為地址來用,只是用來區(qū)分NETLAB.DLL是否成功創(chuàng)建了封包緩沖區(qū),等于0表示否定,大于0表示肯定。

3 SYS與DLL、EXE之間的接口

驅(qū)動(dòng)程序模塊或者NETLABPCK.SYS與NETLAB.EXE和NETLAB.DLL之間主要需要進(jìn)行控管規(guī)則數(shù)據(jù)、封包數(shù)據(jù)、網(wǎng)上鄰居名字列表等數(shù)據(jù)的共享,另外需要一些其它輔助操作。它們之間的接口函數(shù)為OnW32DeviceIoControl,此函數(shù)在NETLABPCK 的NETLABPCK.C模塊。

NETLAB.EXE通過CreateFile打開NETLABPCK.SYS,然后通過DeviceIoControl完成與NETLABPCK的通信。

Typedef struct tagIOCTLParams {

DWORD dioc_IOCtICode;

PVOID dioc_InBuf;

DWORD dioc_c_cblnBuf;

PVOID dioc_OutBuf;

DWORD dioc_c_bOutBuf;

} IOCTLPARAMS,* PIOCTLPARAMS

設(shè)備輸入輸出處理函數(shù)為OnW32Deviceiocontrol(PIOCT LPARAMS,pVtoolsD),根據(jù)pVtoolsD-> dioc_IOCtICode不同而進(jìn)行不同操作,具體分為以下情況:

(1) 控制代碼:IOCTL_NETLABPCK_MALLOC_ACL_BUFFER

參數(shù)含義:

pVtoolsD->dioc_InBuf: 指向DWORD的指針,需要申請(qǐng)的控管規(guī)則內(nèi)存空間大小。

(2) 控制代碼:IOCTL_NETLABPCK_FREE_ACL_BUFFER

作用:NETLAB.EXE通知NETLABPCK釋放為控管規(guī)則申請(qǐng)的內(nèi)存空間。

(3)控制代碼:IOCTL_NETLABPCK_GET_BUFFER_POINT

參數(shù)含義:

pVtoolsD->dioc_dioc_OutBuf:指向 PACKET_BUFFER_POINT結(jié)構(gòu)的緩沖區(qū)指針,用來返回封包緩沖區(qū)的地址、讀/寫緩沖區(qū)的索引地址和封包緩沖區(qū)能容納封包記錄的最大個(gè)數(shù)。

作用:NETLAB.EXE通過這個(gè)控制代碼,從NETLABPCK取得封包緩沖區(qū)的地址。封包緩沖區(qū)由NETLABPCK生成和維護(hù),NETLAB.EXE負(fù)責(zé)提取信息并用來顯示、詢問、報(bào)警和保存日志。

(4) 控制代碼:IOCTL_NETLABPCK_DELETE_SPI_PORT

參數(shù)含義:

pVtoolsD->dioc_InBuf:指向WORD類型的指針,保存要?jiǎng)h除的SPI端口。

作用:NETLAB.DLL通過NETLABPCK刪除共享內(nèi)存的端口列表。當(dāng)經(jīng)過NETLAB.DLL過濾的端口完成通信而釋放時(shí),通過這個(gè)控制代碼刪除共享內(nèi)存的端口列表,告訴驅(qū)動(dòng)程序,這個(gè)端口已經(jīng)不再被NETLAB.DLL過濾,驅(qū)動(dòng)程序需要負(fù)責(zé)對(duì)這個(gè)端口進(jìn)行過濾。

(5) 控制代碼:IOCTL_NETLABPCK_GET_NAME_F ROM_IP

參數(shù)含義:pVtoolsD->dioc_InBuf: 要查詢的IP地址;

pVtoolsD->dioc_OutBuf: 用來返回查詢得到的網(wǎng)上鄰居名字。

作用:FITLER.EXE通過這個(gè)控制代碼,從IP地址查詢得到網(wǎng)上鄰居的名字。

4 總結(jié)

隨著Internet技術(shù)的發(fā)展,網(wǎng)絡(luò)安全將會(huì)面臨更加嚴(yán)峻的挑戰(zhàn)。本文從技術(shù)角度出發(fā),對(duì)防火墻內(nèi)部主要模塊間的通訊技術(shù)進(jìn)行了詳細(xì)的分析和介紹,希望能對(duì)不同的用戶提供參考。

[1] Keith E.Strassberg,Richard J.Gondek,Gary Rollie等著.李昂等譯.防火墻技術(shù)大全.北京:機(jī)械工業(yè)出版社.2003.

[2] Terry William Ogletree 著.李之棠等譯.防火墻的原理與實(shí)施.北京:電子工業(yè)出版社.2001.

[3] 博嘉科技.LINUX防火墻技術(shù)探秘.北京:國(guó)防工業(yè)出版社.2002.

[4] 周宏,劉克勤.新型主機(jī)防火墻模型的研究.現(xiàn)代電力.2003.

主站蜘蛛池模板: 成人日韩欧美| 国产日韩欧美中文| 国产毛片不卡| 亚洲欧洲国产成人综合不卡| 亚洲无码免费黄色网址| 亚洲国产第一区二区香蕉| 狠狠做深爱婷婷久久一区| 男人天堂伊人网| 无码中文字幕乱码免费2| 色噜噜狠狠色综合网图区| 久久久久亚洲av成人网人人软件| 日韩无码黄色网站| 国产在线视频导航| 亚洲天堂日本| 成人一级黄色毛片| 国产亚洲精品自在久久不卡| 国产福利不卡视频| 2022国产无码在线| аⅴ资源中文在线天堂| 动漫精品啪啪一区二区三区| 又污又黄又无遮挡网站| 久操中文在线| 国模私拍一区二区| 国产第一色| 手机精品福利在线观看| 国产精品视频a| 欧美成人一区午夜福利在线| 97色婷婷成人综合在线观看| 一级毛片免费不卡在线| 国内毛片视频| 日本亚洲成高清一区二区三区| 亚洲国产天堂在线观看| 国产69囗曝护士吞精在线视频| 国产成人精品综合| 久久久噜噜噜久久中文字幕色伊伊| 人人爽人人爽人人片| 亚洲av片在线免费观看| 丁香婷婷综合激情| 欧美色亚洲| 亚洲成a人片在线观看88| 国产免费怡红院视频| 无码高潮喷水专区久久| 波多野结衣一二三| 日韩精品无码免费一区二区三区| a天堂视频在线| 國產尤物AV尤物在線觀看| 免费在线国产一区二区三区精品| 亚洲毛片网站| 夜夜操狠狠操| 亚洲乱伦视频| 老司机午夜精品网站在线观看 | 亚洲男女在线| 亚洲天堂2014| 2021国产精品自产拍在线观看 | 一级黄色片网| 日韩二区三区无| 亚洲国产系列| 亚洲成人网在线观看| www.亚洲一区| 天天做天天爱夜夜爽毛片毛片| 亚洲一区二区在线无码| 久久一级电影| 女同国产精品一区二区| 亚洲精品国产精品乱码不卞| 在线观看视频一区二区| 国产精品一区二区无码免费看片| 亚洲第一黄片大全| 伊人久久大线影院首页| 亚洲男人天堂2020| 成人在线欧美| 91伊人国产| 夜夜操天天摸| 国产迷奸在线看| 成人在线第一页| 97精品久久久大香线焦| 国产一区二区网站| 国产精品亚洲五月天高清| 青青草a国产免费观看| 国内嫩模私拍精品视频| 国产人妖视频一区在线观看| 午夜一区二区三区| 色综合成人|