亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

用C#開發網絡防火墻技術分析

2019-11-18 19:45:33
字體:
來源:轉載
供稿:網友

  N-Byte網絡守望者是一款單機版網絡安全工具,簡言之,就是一個用.NET開發的個人版防火墻。在N-Byte網絡守望者1.0版的開發中,使用了NDIS Hook Driver技術來實現網絡封包過濾功能,這使N-Byte網絡守望者能夠在網絡層過濾網絡封包,從而實現強大的功能。

  由于軟件的主程序是用C#寫的,C#中沒有提供具有類似DeviceIoControl函數功能的驅動設備控制函數,而NDIS Hook Driver技術下的驅動程序是用DDK下的C語言寫的,為了能夠實現主程序對驅動程序的控制和相互通信,采用了以下設計方案:

  在以上方案中,需要一個負責主程序與NDIS Hook Driver驅動程序通信與控制的模塊DriverDll.dll,并用C#編寫的一個封裝驅動程序中封包信息的模塊,可以發送這個驅動程序信息到主程序,主程序可識別并操作模塊中的數據類型。

  在.NET應用程序使用驅動程序的問題上,面臨著兩個問題:

  1.怎樣實現.NET應用程序控制驅動程序的功能?

  2.怎樣從驅動程序向.NET應用程序傳遞非托管的數據類型?

  以下是我們就這些問題的詳細解決方法:

  怎樣實現.NET應用程序控制驅動程序的功能?

  使用托管C++編寫的DriverDll.dll來實現對驅動程序的直接控制,而主程序通過調用其中的方法來實現對驅動程序的間接控制。比如在NByte.h文件中定義了START_ip_HOOK常數用來作為傳給驅動程序用來開啟驅動程序封包過濾功能的參數,下面在托管C++模塊中定義了IoCtrl托管類并定義了下面的向緩沖區寫入參數的方法:

//向緩沖區寫入數據。

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;

}

  當然直接使用這個方法不太方便,所以定義一個公有函數,用來提供給主程序調用:

//開始進行封包過濾

bool StartIpHook()

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

  這樣,只要在主程序中聲明IoCtrl的對象ic,就可以通過ic.StartIpHook()就可以實現對驅動程序過濾功能的開啟,用同樣的方法也可以實現對驅動程序進行其它操作,比如添加、修改封包過濾規則等。

  怎樣從驅動程序向.NET應用程序傳遞非托管的數據類型?

  為了能夠輸出安全日志,必須讓主程序獲得驅動程序中的封包信息。使用信號量機制可以很方便的實現驅動程序和非托管代碼間的信息傳遞,那么對托管代碼呢?這需要向.NET應用程序傳遞非托管的數據類型access_INFO。在NByte.h中,是這樣定義這個ACCESS_INFO結構的:

typedef struct _ACCESS_INFO

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

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

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

  然后,在GetAccessInfo()函數中來給這些參數賦值:

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類中獲得了這些信息,但是需要把它們封裝成主程序容易處理的數據類型,這樣,用C#實現了InfoEvent類用來封裝這些信息:

//本類封裝了數據包的詳細信息,可以通過事件實現對它的模塊間傳遞。

public class InfoEvent:EventArgs
{
 string sInfo; //用來存放輸出信息的私有成員
 public int pLength; //CommonFunction.sPort數組的長度
 public ushort protocol; //網絡通信協議類型
 public uint sourceIp; //數據包的源IP
 public uint destinationIp; //數據包的目的IP
 public ushort sourcePort; //數據包的源端口
 public ushort destinationPort; //數據包的目的端口
 ………………………………
}

  下面在用托管C++實現的InfoProvider驅動程序信息提供者類中把個InfoEvent類的對象傳遞給主程序,需要使用一個委托生成一個事件:

//聲明委托事件,用來向主程序傳遞數據。

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

//聲明響應事件函數。

__event DriverInfo* OnDriverInfo;

  然后在InfoProvider驅動程序信息提供者類中定義一個方法,在主程序中以線程的方式運行這個方法,在這個方法中使用了事件函數OnDriverInfo:

//用來獲得驅動程序信息的進程,在主程序中將開啟該進程。

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();
  //定義一個主程序可以識別的對象,通過OnDriverInfo傳給主程序。
  InfoEvent*ie=new InfoEvent(ic->protocol,ic->sourceIp,ic->destinationIp,ic->sourcePort,ic->destinationPort);

  OnDriverInfo(this,ie);
 }

 ic->CloseDriverHandle();
 return;
}

  在主程序中,會開啟這個進程并定義了OnDriverInfo的處理函數DealWithInfo:

pInfo=new InfoProvider();

//開啟與驅動交換信息的進程

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

  這樣主程序就可以在DealWithInfo函數中加入對InfoEvent對象的處理了??梢?,通過中間模塊IoCtrl的轉換,便實現了.NET主程序對驅動程序中非托管數據類型的獲取和處理。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品午夜国产小视频| 中文字幕日韩欧美在线| 日韩亚洲一区二区| 久久精品电影网站| 国产精品影院在线观看| 成人激情免费在线| 91性高湖久久久久久久久_久久99| 欧美在线xxx| 在线观看视频亚洲| 不卡中文字幕av| 91精品久久久久久久久青青| 欧美有码在线视频| 欧美视频13p| 亚洲夜晚福利在线观看| 日韩高清人体午夜| 国产精品免费看久久久香蕉| 久久久久久久久久久久久久久久久久av| 97人洗澡人人免费公开视频碰碰碰| 欧美日韩国产一区中文午夜| 少妇久久久久久| 一区二区三区视频在线| 97国产成人精品视频| 亚洲国产精品小视频| 裸体女人亚洲精品一区| 欧美电影在线免费观看网站| 国产日韩专区在线| 综合136福利视频在线| 国产精品综合不卡av| 欧美成年人视频网站欧美| 欧美在线观看一区二区三区| 亚洲一二在线观看| 成人精品视频99在线观看免费| 美女国内精品自产拍在线播放| 国产噜噜噜噜久久久久久久久| 欧美一区二区视频97| 日韩av网址在线观看| 亚洲综合视频1区| 92国产精品视频| 亚洲视频视频在线| 国产伦精品免费视频| 青草青草久热精品视频在线网站| 乱亲女秽乱长久久久| 久久久天堂国产精品女人| 97在线看福利| 精品亚洲va在线va天堂资源站| 欧美日韩亚洲网| 欧美老妇交乱视频| 中文字幕久久久| 国产美女精品视频| 国产福利视频一区| 欧美日韩国产精品| 中文字幕亚洲第一| 69视频在线播放| 国产999精品| 在线看片第一页欧美| 久热精品视频在线| 欧美日韩国产精品一区二区不卡中文| 秋霞午夜一区二区| 中文字幕日韩专区| 色综合天天综合网国产成人网| 欧美激情一区二区三区久久久| 亚洲欧美激情另类校园| 97国产成人精品视频| 亚洲欧美综合区自拍另类| 亚洲国产精品电影| 国产综合香蕉五月婷在线| 国产精品久久久久免费a∨| 欧美高清在线播放| 亚洲欧洲在线视频| 亚洲精品电影网在线观看| 91av在线精品| 日本一区二区三区在线播放| 亚洲男人的天堂在线播放| 国内外成人免费激情在线视频网站| 欧美高清videos高潮hd| 欧美一级电影在线| 国产精品激情自拍| 亚洲电影免费观看高清完整版在线观看| 欧美午夜久久久| 久久久精品日本| 亚洲图中文字幕| 亚洲区bt下载| 国产香蕉97碰碰久久人人| 国产精品1区2区在线观看| 国产精品欧美亚洲777777| 秋霞午夜一区二区| 97精品免费视频| 欧美午夜久久久| 国产精品99久久99久久久二8| 91情侣偷在线精品国产| 日韩欧美一区二区在线| 成人两性免费视频| 欧美香蕉大胸在线视频观看| 91色视频在线导航| 欧美在线日韩在线| 国产精品网址在线| 亚洲第一偷拍网| 九九精品在线观看| 久久理论片午夜琪琪电影网| 午夜精品久久久久久99热| 日本中文字幕不卡免费| 国产成人精品日本亚洲专区61| 国产精品美女久久| 欧美精品videossex88| 国产视频自拍一区| 亚州欧美日韩中文视频| 91禁外国网站| 亚洲毛片在线观看.| 国产精品极品尤物在线观看| 欧美性高跟鞋xxxxhd| 亚洲三级 欧美三级| 亚洲自拍欧美另类| 中文字幕亚洲二区| 国产日韩欧美自拍| 一区二区福利视频| 欧美电影免费观看网站| 国产精品美女www爽爽爽视频| 成人精品久久一区二区三区| 亚洲精品久久久久中文字幕二区| 亚洲精品乱码久久久久久金桔影视| 国产精品入口免费视频一| 亚洲成人久久一区| 这里只有精品视频在线| 日本免费一区二区三区视频观看| 亚洲自拍偷拍区| 国产精品久久久999| 欧美日韩成人在线视频| 亚洲图片在区色| 红桃视频成人在线观看| 久久精品国产欧美激情| 亚洲sss综合天堂久久| 日韩av综合网| 亚洲一级片在线看| 欧美多人爱爱视频网站| 久久久久99精品久久久久| 91精品在线观看视频| 久久久久久免费精品| 91在线免费看网站| 精品人伦一区二区三区蜜桃网站| 亚洲aⅴ男人的天堂在线观看| 成人免费高清完整版在线观看| 久久久999成人| 久久久天堂国产精品女人| 亚洲性生活视频在线观看| 91精品国产91久久久久久| 成人国产精品色哟哟| 911国产网站尤物在线观看| 亚洲欧美精品一区二区| 日韩有码视频在线| 尤物99国产成人精品视频| 国产精品三级在线| 青草青草久热精品视频在线观看| 久久久天堂国产精品女人| 欧美电影免费观看高清| 日韩欧美精品免费在线| www.日韩免费| 日韩在线视频国产| 亚洲a∨日韩av高清在线观看| 成人黄色网免费| 日韩av大片免费看| 欧美日韩福利视频| 亚洲韩国欧洲国产日产av| 国产精品视频yy9099| 91精品国产综合久久久久久蜜臀|