用C#开发网络防火墙技术分析

防火墙|网络

 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主程序对驱动程序中非托管数据类型的获取和处理。

 

 

时间: 2024-09-18 14:56:31

用C#开发网络防火墙技术分析的相关文章

多语言网站开发 不完全技术分析收录

语言是信息传播的主要障碍.多语言网站,顾名思义就是能够以多种语言(而不是单种语言)为用户提供信息服务,让使用不同语言的用户都能够从同个网站获得内容相同的信息.多语言网站实现方案 1,静态:就是为每种语言分别准备一套页面文件,要么通过文件后缀名来区分不同语言,要么通过子目录来区分不同语言.例如对于首页文件index_en.htm提供英语界面,index_gb.htm提供简体中文界面,index_big.htm提供繁体中文界面,或者是en/index.htm提供英语界面,gb/index.htm提供

抵御黑客入侵 认识防火墙技术

中介交易 SEO诊断 淘宝客 云主机 技术大厅 网络的安全不仅表现在网络的病毒防治方面,而且还表现在系统抵抗外来非法黑客入侵的能力方面.对于网络病毒,我们可以通过杀毒软件来对付,那么对于防范黑客的入侵我们能采取什么样的措施呢?在这样的情况下,网络防火墙技术便应运而生了.那么究竟什么叫防火墙呢?它有什么作用呢?请大家耐心往下看. 一.防火墙的基本概念 古时候,人们常在寓所之间砌起一道砖墙,一旦火灾发生,它能够防止火势蔓延到别的寓所.现在,如果一个网络接到了Internet上面,它的用户就可以访问外

网络防火墙防范溢出策略分析

"溢出"一直以来都是很多黑帽子黑客最常用(或者说是最喜欢用)的手段之一,随安全文化的逐步普及,大量的公开shellcode("溢出"代码)与溢出攻击原理都可以随意在各大的网络安全网站中找得到,由此衍生了一系列的安全隐患...小黑黑使用它们来进行非法的攻击.恶意程序员使用它们来制造蠕虫等等...而网络防火墙作为人们最喜欢的网络安全"设施"之一,它又能如何"拦截"这一类型的攻击呢? 目前大多的防火墙系统都是针对包过滤规则进行安全防

游戏安全资讯精选 2017年第十八期:富控互动拟13.668亿收购棋牌游戏公司百搭网络51%股权,游戏市场的收入超2千亿,阿里云与中国电信云堤达成DDoS防护领域重大合作,阿里云云盾 · 云防火墙技术解读

[游戏行业安全动态]富控互动拟13.668亿收购棋牌游戏公司百搭网络51%股权 概要:富控互动发布公告,拟13.668亿收购百搭网络51%股权.百搭网络成立于2016年10月,是一家专注于开发.运营移动端棋牌游戏的互联网游戏公司.目前,百搭网络在线运营的主要游戏有阿拉宁波麻将.阿拉浙江麻将.阿拉血战麻将.阿拉舟山麻将.阿拉江西麻将.阿拉跑得快.阿拉干瞪眼.阿拉斗牛.阿拉玩三张等棋牌游戏. 百搭网络2016年总营收25.82万元,净利润1.25万元:2017年前三个季度总营收1.25亿元,净利润9

评审技术在高质量软件开发中的应用分析(下)

接评审技术在高质量软件开发中的应用分析(上) 三.评审在高质量软件开发的实际应用 3.1 高质量软件开发项目介绍 高质量软件,如电信软件.金融证券类软件等,有较严格的要求:可用性要求非常高,并且不会因为系统维护和扩展而带来运营中断:支持使用现有管理工具和标准进行远程管理:能够提供更出色的性能以及运营在高可用性集群上的能力,减少任何单点的软硬件失效现象.五个九(99.999%)意味着一个系统的宕机时间一年不超过5分26秒.因此高质量软件项目是一种对可用性.可靠性.稳定性要求非常高的软件项目,要求软

web防火墙技术简介

防止网页被篡改是被动的,能阻断入侵行为才是主动型的,前边提到的IPS/UTM等产品是安全通用的网关,也有专门针对Web的硬件安全网关,国内的如:绿盟的Web防火墙,启明的WIPS(web IPS),国外的有imperva的WAF(Web Application Firewall)等. Web防火墙,主要是对Web特有入侵方式的加强防护,如DDOS防护.SQL注入.XML注入.XSS等.由于是应用层而非网络层的入侵,从技术角度都应该称为Web IPS,而不是Web防火墙.这里之所以叫做Web防火墙

Web安全(下) 主动类安全产品技术分析

1. Web防火墙产品: 防止网页被篡改与审计恢复都是被动的,能阻断入侵行为才是主动型的,前边提到的IPS/UTM等产品是安全通用的网关,也有专门针对Web的硬件安全网关,国内的如:绿盟的Web防火墙,启明的WIPS(web IPS),国外的有imperva的WAF(Web Application Firewall)等. 本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Network/Security/ Web防火墙,主要是对Web特

Internet防火墙技术简介

1. 引言 防火墙技术是建立在现代通信网络技术和信息安全技术基础上的应用性安全技术,越来越多地应用于专用网络与公用网络的互连环境之中,尤以Internet网络为最甚.Internet的迅猛发展,使得防火墙产品在短短的几年内异军突起,很快形成了一个产业:1995年,刚刚面市的防火墙技术产品市场量还不到1万套;到1996年底,就猛增到10万套;据国际权威商业调查机构的预测,防火墙市场将以173%的复合增长率增长,今年底将达到150万套,市场营业额将从1995年的1.6亿美元上升到今年的9.8亿美

智能防火墙技术详解

本文提出了智能防火墙,这种类型的防火墙更聪明更智能,克服了传统的防火墙的"一管就死,一放就乱"的状况,修正上述防火墙的重大假设为"拒绝保证安全,放行的也要保证安全".新的智能防火墙把"出口"的概念改变为"关口"的概念,所有经过"关口"的数据包都必须接受防火墙的检查.与传统防火墙采用的数据匹配检查的技术不同,新的智能防火墙采用人工智能识别技术来决定访问控制.智能防火墙比传统的防火墙,更安全,效率更高. 防火墙