狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當(dāng)前位置:系統(tǒng)之家 > 技術(shù)開發(fā)教程 > 詳細(xì)頁(yè)面

用C#開發(fā)網(wǎng)絡(luò)防火墻技術(shù)區(qū)分

用C#開發(fā)網(wǎng)絡(luò)防火墻技術(shù)區(qū)分

更新時(shí)間:2019-08-21 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

  N-Byte網(wǎng)絡(luò)守望者是一款單機(jī)版網(wǎng)絡(luò)安全工具,簡(jiǎn)言之,就是一個(gè)用.NET開發(fā)的個(gè)人版防火墻。在N-Byte網(wǎng)絡(luò)守望者1.0版的開發(fā)中,使用了NDIS Hook Driver技術(shù)來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)封包過(guò)濾功能,這使N-Byte網(wǎng)絡(luò)守望者能夠在網(wǎng)絡(luò)層過(guò)濾網(wǎng)絡(luò)封包,從而實(shí)現(xiàn)強(qiáng)大的功能。

  由于軟件的主程序是用C#寫的,C#中沒有提供具有類似DeviceIoControl函數(shù)功能的驅(qū)動(dòng)設(shè)備控制函數(shù),而NDIS Hook Driver技術(shù)下的驅(qū)動(dòng)程序是用DDK下的C語(yǔ)言寫的,為了能夠?qū)崿F(xiàn)主程序?qū)︱?qū)動(dòng)程序的控制和相互通信,采用了以下設(shè)計(jì)方案:

  在以上方案中,需要一個(gè)負(fù)責(zé)主程序與NDIS Hook Driver驅(qū)動(dòng)程序通信與控制的模塊DriverDll.dll,并用C#編寫的一個(gè)封裝驅(qū)動(dòng)程序中封包信息的模塊,可以發(fā)送這個(gè)驅(qū)動(dòng)程序信息到主程序,主程序可識(shí)別并操作模塊中的數(shù)據(jù)類型。

  在.NET應(yīng)用程序使用驅(qū)動(dòng)程序的問(wèn)題上,面臨著兩個(gè)問(wèn)題:

  1.怎樣實(shí)現(xiàn).NET應(yīng)用程序控制驅(qū)動(dòng)程序的功能?

  2.怎樣從驅(qū)動(dòng)程序向.NET應(yīng)用程序傳遞非托管的數(shù)據(jù)類型?

  以下是我們就這些問(wèn)題的詳細(xì)解決方法:

  怎樣實(shí)現(xiàn).NET應(yīng)用程序控制驅(qū)動(dòng)程序的功能?

  使用托管C++編寫的DriverDll.dll來(lái)實(shí)現(xiàn)對(duì)驅(qū)動(dòng)程序的直接控制,而主程序通過(guò)調(diào)用其中的方法來(lái)實(shí)現(xiàn)對(duì)驅(qū)動(dòng)程序的間接控制。比如在NByte.h文件中定義了START_IP_HOOK常數(shù)用來(lái)作為傳給驅(qū)動(dòng)程序用來(lái)開啟驅(qū)動(dòng)程序封包過(guò)濾功能的參數(shù),下面在托管C++模塊中定義了IoCtrl托管類并定義了下面的向緩沖區(qū)寫入?yún)?shù)的方法:

//向緩沖區(qū)寫入數(shù)據(jù)。

DWORD WriteIo(DWORD code,PVOID buffer,DWORD count)

{

if(hDriverHandle == NULL)

return ERROR_DRIVER_HANDLE;

DWORD bytesReturned;

BOOL returnCode = DeviceIoControl(hDriverHandle,

code,

buffer,

count,

NULL,

0,

&bytesReturned,

NULL);

 

if(!returnCode)

return ERROR_IO_CTRL;

return SUCCESS;

}

  當(dāng)然直接使用這個(gè)方法不太方便,所以定義一個(gè)公有函數(shù),用來(lái)提供給主程序調(diào)用:

//開始進(jìn)行封包過(guò)濾

bool StartIpHook()

{
 return (WriteIo(START_IP_HOOK, NULL, 0)==SUCCESS);
}

  這樣,只要在主程序中聲明IoCtrl的對(duì)象ic,就可以通過(guò)ic.StartIpHook()就可以實(shí)現(xiàn)對(duì)驅(qū)動(dòng)程序過(guò)濾功能的開啟,用同樣的方法也可以實(shí)現(xiàn)對(duì)驅(qū)動(dòng)程序進(jìn)行其它操作,比如添加、修改封包過(guò)濾規(guī)則等。

  怎樣從驅(qū)動(dòng)程序向.NET應(yīng)用程序傳遞非托管的數(shù)據(jù)類型?

  為了能夠輸出安全日志,必須讓主程序獲得驅(qū)動(dòng)程序中的封包信息。使用信號(hào)量機(jī)制可以很方便的實(shí)現(xiàn)驅(qū)動(dòng)程序和非托管代碼間的信息傳遞,那么對(duì)托管代碼呢?這需要向.NET應(yīng)用程序傳遞非托管的數(shù)據(jù)類型ACCESS_INFO。在NByte.h中,是這樣定義這個(gè)ACCESS_INFO結(jié)構(gòu)的:

typedef struct _ACCESS_INFO

{
 USHORT protocol;
 ULONG sourceIp;
 ULONG destinationIp;
 USHORT sourcePort;
 USHORT destinationPort;
}ACCESS_INFO;

  顯然,直接傳遞非托管數(shù)據(jù)類型是不可以的,需要轉(zhuǎn)換一下。首先,在IoCtrl類中定義了幾個(gè)要傳遞的封包信息參數(shù):

public __gc class IoCtrl
{
 public:
  USHORT protocol; //網(wǎng)際協(xié)議類型
  ULONG sourceIp; //源IP地址
  ULONG destinationIp; //目的IP地址
  USHORT sourcePort; //源端口
  USHORT destinationPort; //目的端口
  ………………
}

  然后,在GetAccessInfo()函數(shù)中來(lái)給這些參數(shù)賦值:

void GetAccessInfo()
{
 ACCESS_INFO ai;
 bool result=(ReadIo(GET_INFO,&ai,sizeof(ai))==SUCCESS);
 this->protocol=ai.protocol;
 this->sourceIp=ai.sourceIp;
 this->destinationIp=ai.destinationIp;
 this->sourcePort=ai.sourcePort;
 this->destinationPort=ai.destinationPort;

  既然在IoCtrl類中獲得了這些信息,但是需要把它們封裝成主程序容易處理的數(shù)據(jù)類型,這樣,用C#實(shí)現(xiàn)了InfoEvent類用來(lái)封裝這些信息:

//本類封裝了數(shù)據(jù)包的詳細(xì)信息,可以通過(guò)事件實(shí)現(xiàn)對(duì)它的模塊間傳遞。

public class InfoEvent:EventArgs
{
 string sInfo; //用來(lái)存放輸出信息的私有成員
 public int pLength; //CommonFunction.sPort數(shù)組的長(zhǎng)度
 public ushort protocol; //網(wǎng)絡(luò)通信協(xié)議類型
 public uint sourceIp; //數(shù)據(jù)包的源IP
 public uint destinationIp; //數(shù)據(jù)包的目的IP
 public ushort sourcePort; //數(shù)據(jù)包的源端口
 public ushort destinationPort; //數(shù)據(jù)包的目的端口
 ………………………………
}

  下面在用托管C++實(shí)現(xiàn)的InfoProvider驅(qū)動(dòng)程序信息提供者類中把個(gè)InfoEvent類的對(duì)象傳遞給主程序,需要使用一個(gè)委托生成一個(gè)事件:

//聲明委托事件,用來(lái)向主程序傳遞數(shù)據(jù)。

__delegate void DriverInfo(Object* sender, InfoEvent* e);

//聲明響應(yīng)事件函數(shù)。

__event DriverInfo* OnDriverInfo;

  然后在InfoProvider驅(qū)動(dòng)程序信息提供者類中定義一個(gè)方法,在主程序中以線程的方式運(yùn)行這個(gè)方法,在這個(gè)方法中使用了事件函數(shù)OnDriverInfo:

//用來(lái)獲得驅(qū)動(dòng)程序信息的進(jìn)程,在主程序中將開啟該進(jìn)程。

void GetInfoThreadProc()
{
 this->hEvent=OpenEvent(SYNCHRONIZE,FALSE,"NBEvent");
 if(!ic->GetDriverHandle())
 {
  return;
 }

 while(true)
 {
  f(!hEvent)
  ExitThread(0);
  WaitForSingleObject(this->hEvent,INFINITE);
  nPackets++;
  ic->GetAccessInfo();
  ic->ResetEvent();
  //定義一個(gè)主程序可以識(shí)別的對(duì)象,通過(guò)OnDriverInfo傳給主程序。
  InfoEvent*ie=new InfoEvent(ic->protocol,ic->sourceIp,ic->destinationIp,ic->sourcePort,ic->destinationPort);

  OnDriverInfo(this,ie);
 }

 ic->CloseDriverHandle();
 return;
}

  在主程序中,會(huì)開啟這個(gè)進(jìn)程并定義了OnDriverInfo的處理函數(shù)DealWithInfo:

pInfo=new InfoProvider();

//開啟與驅(qū)動(dòng)交換信息的進(jìn)程

FilterThread=new Thread(new ThreadStart(pInfo.GetInfoThreadProc));
FilterThread.IsBackground=true;
FilterThread.Start();
pInfo.OnDriverInfo+=new InfoProvider.DriverInfo(DealWithInfo); 

  這樣主程序就可以在DealWithInfo函數(shù)中加入對(duì)InfoEvent對(duì)象的處理了。可見,通過(guò)中間模塊IoCtrl的轉(zhuǎn)換,便實(shí)現(xiàn)了.NET主程序?qū)︱?qū)動(dòng)程序中非托管數(shù)據(jù)類型的獲取和處理。

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
国产精品伦一区| 国产色综合一区| 亚洲欧美日韩另类精品一区二区三区| 紧缚奴在线一区二区三区| 欧美日韩精品一区| 久久久精品免费观看| 午夜日韩av| 91色在线porny| 高清视频一区二区| 成人黄色小视频| 激情综合五月婷婷| 国产精品69毛片高清亚洲| 麻豆精品一区二区av白丝在线| 亚洲一区在线观看免费观看电影高清| 精品999久久久| 欧美成ee人免费视频| 日韩影院在线观看| 欧美精品一二三四| 久久福利资源站| 精品欧美乱码久久久久久 | 成a人片亚洲日本久久| 亚洲精品一区二区三区精华液| a级高清视频欧美日韩| 日韩精品中文字幕一区| 久久久久久亚洲精品杨幂换脸| 日韩午夜电影| 极品中文字幕一区| 久久久夜精品| 91黄色免费版| 欧美岛国在线观看| 久久久亚洲精品一区二区三区 | 午夜成人免费视频| 亚洲国产成人av| 国产激情一区二区三区四区| 国产a久久麻豆| 欧美人与禽猛交乱配视频| 亚洲国产欧美日韩| 久久国产精品久久w女人spa| 欧美另类变人与禽xxxxx| 91精品在线一区二区| 精品国产乱码久久久久久久久 | 国产色婷婷亚洲99精品小说| 久久精品免费在线观看| 亚洲四区在线观看| 美女视频黄久久| 丁香桃色午夜亚洲一区二区三区| 日韩成人免费看| 国产精品自在在线| 国产精品v欧美精品v日韩| 噜噜噜在线观看免费视频日韩| 一本色道**综合亚洲精品蜜桃冫| 欧美日韩国产一区二区三区地区| 精品国产一区二区亚洲人成毛片| 亚洲桃色在线一区| 久久国产麻豆精品| 国产成人在线网站| 激情久久久久久久| 91精彩视频在线| 精品99一区二区| 亚洲综合色噜噜狠狠| 国产一区91精品张津瑜| 国产在线一区二区三区四区 | 男人的天堂久久精品| 99在线热播精品免费| bt欧美亚洲午夜电影天堂| 99精品视频一区二区三区| www.性欧美| 国产在线精品一区二区中文| 亚洲性视频h| 欧美性受极品xxxx喷水| 日韩一级视频免费观看在线| 国产欧美精品区一区二区三区| 欧美特黄视频| 亚洲成人资源| 欧美日本一区二区| 亚洲午夜电影在线| av电影天堂一区二区在线观看| 精品成人国产| 久久这里只有精品首页| 日韩av不卡一区二区| 在线观看福利一区| 日韩精品中文字幕在线不卡尤物| 日韩一级欧美一级| 蜜桃精品视频在线| 亚洲高清在线播放| 欧美激情综合五月色丁香| 狠狠色伊人亚洲综合成人| 韩国久久久久| 精品日产卡一卡二卡麻豆| 日韩福利视频导航| 亚洲一区精彩视频| 国产日韩欧美不卡在线| 91亚洲精品乱码久久久久久蜜桃| 在线观看成人小视频| 最新成人av在线| 91免费在线播放| 日韩一级片网址| 国产91在线|亚洲| 在线观看免费一区| 国产精品久久久久一区| 国产精品久久久对白| 国产精品天美传媒| 欧美日韩在线播放一区二区| 日韩美女一区二区三区| 成人h动漫精品一区二| 欧美欧美欧美欧美首页| 精品一区二区三区在线视频| 久久久久久一区二区| 日韩视频中午一区| 成人中文字幕电影| 日韩一二三四区| av亚洲精华国产精华精华| 91精品中文字幕一区二区三区| 国产精品伊人色| 欧美日韩精品系列| 亚洲国产一区视频| 久久婷婷丁香| 日韩和欧美的一区| 欧美久久一区二区| 国产精品一二二区| 国产午夜精品福利| 91免费国产视频网站| 国产中文一区二区| 欧美精品一区二区三| 久久三级视频| 亚洲成av人片观看| 一本久道中文字幕精品亚洲嫩| 亚洲欧美国产77777| 色乱码一区二区三区88| 国产麻豆精品视频| 亚洲视频在线一区二区| 在线欧美日韩国产| 99精品欧美一区二区蜜桃免费| 亚洲www啪成人一区二区麻豆| 91在线观看视频| 99re在线精品| 亚洲午夜在线观看视频在线| 亚洲欧美日本日韩| 国产精品一区不卡| 精品国产91亚洲一区二区三区婷婷| 91视频免费看| 亚洲精品免费看| 欧美日韩一区二区三区在线看| 久久爱另类一区二区小说| 一本色道a无线码一区v| 日日夜夜免费精品| 6080午夜不卡| 亚洲国产网站| 蜜臀av国产精品久久久久| 久久精品视频网| 国产精品亚洲一区| 国产福利一区二区三区在线视频| 国产精品日韩| 久久超碰97人人做人人爱| 国产精品高潮呻吟久久| 免播放器亚洲| 欧美精品一区在线| 精品一区二区免费在线观看| 久久午夜免费电影| 欧美在线一区二区| 97久久超碰国产精品电影| 青青草国产成人av片免费| 欧美中文字幕一区二区三区亚洲| 成人午夜在线免费| 美女尤物国产一区| 久久久久亚洲综合| 欧美裸体bbwbbwbbw| 99精品1区2区| 日韩国产高清影视| 亚洲欧洲精品一区二区三区 | 成人久久视频在线观看| 一区二区三区在线免费| 日韩免费福利电影在线观看| 色婷婷亚洲综合| 亚洲男帅同性gay1069| 日韩1区2区日韩1区2区| 午夜精品一区二区在线观看| 久久久福利视频| 欧美一区二区三区在| 日本一区二区免费在线| 中文字幕不卡三区| 久久久夜夜夜| 欧美日韩国产精品成人| 91精品国产乱| 亚洲丝袜制服诱惑| 亚洲福利一区二区三区| 免费三级欧美电影| 雨宫琴音一区二区在线| 国外成人免费视频| 国产成人午夜电影网| 日本成人在线网站| 亚洲女同一区二区| 中文字幕一区在线观看| 欧美在线观看视频一区二区| 免费亚洲视频| 色综合久久九月婷婷色综合| 国产一区视频在线观看免费| 欧美日韩亚洲一区二区三区在线观看| 一区二区在线看| 一区二区在线观看免费视频播放|