2009-08-18 125 views
1

我需要能够阻止任何和所有连接到我的电脑从一个特定的IP地址,我知道这是可能的防火墙,但我需要在c#中做到这一点。任何想法如何(需要代码)。阻止连接通过IP

更新: 它是一种通用的C#应用​​程序不asp.net,目标平台是WinXp下,直到Win7的

+0

您是否问如何在C#中编写通用防火墙应用程序?或者你是否在IIS下运行ASP.Net应用程序的情况下提出这个问题?或者是什么? – jsight 2009-08-18 15:00:07

+1

您是否想要从代码更新防火墙,或只是忽略来自特定IP地址的代码请求?如果是后者,那么它不是一个很好的做事方式,你的系统将主动接收来自IP的数据并忽略它,而不是让防火墙在第一时间阻止它。另外,目标平台是什么?最后,你有没有提供你想要的任何代码?如果是这样,那么请张贴它并告诉我们它是如何工作的。 – Lazarus 2009-08-18 15:01:24

回答

4

需要了解更多信息......如果你说的socket通信,你可以简单地关闭与客户端的连接如果IP地址被阻止,则一旦它连接,或处理连接请求并在那里评估。

编辑:最简单的方法可以让你很可能只是Windows防火墙的API互动......这里是如何:

http://www.shafqatahmed.com/2008/01/controlling-win.html

+0

这听起来不错,如果不完全是我需要的,只是不知道如何去做,文章/代码将有所帮助 – RC1140 2009-08-18 15:06:05

0

你的问题还不清楚,但我会尽量回答最好我可以,在我的理解。

  1. 是否要控制机器连接到机器上的任何端口?如果是这样,您需要控制内置的Windows防火墙或找到自己可以控制的过滤驱动程序。为了编写你自己的过滤器驱动程序,你必须离开托管代码的土地,所以我猜这不是一个选项。

要了解如何控制防火墙,这里有一个链接:

http://www.shafqatahmed.com/2008/01/controlling-win.html

更多的谷歌。

  1. 是否要控制远程计算机与应用程序拥有的计算机上的端口的连接?你也不能这样做(参见上面的#1)。但是,您可以在连接后采取措施,并在不喜欢远程IP的情况下关闭连接(检查远程端点的IP)。

两个警告这种方法:

它不会从DoS攻击拯救你。 您将需要小心,如果你需要IPv6的支持(你不能只检查在这种情况下,IPV4地址)

HTH

+0

我不介意进入unmanged代码,只是更喜欢使用托管代码 – RC1140 2009-08-19 06:41:17

0

“防火墙”在C#中?

首先你必须访问一个低层的网络接口,例如:http://msdn.microsoft.com/en-us/library/ms817945.aspx

然后,你必须分析所有传入数据包,也许丢弃。

这不是一件容易的事情,我不建议您在C#中编写驱动程序和防火墙,因为每次启动计算机时都会加载.NET Framework。 此外,流量解析可能会非常棘手......前段时间,我在C#中实现了一个路由器/流量分析器,并花了我大约一年的时间来获得网络编程的经验,以获取相关知识。