【问题标题】:Accept connection from outside of network behind a firewall接受来自防火墙后网络外部的连接
【发布时间】:2012-05-31 19:59:59
【问题描述】:

目前我已经编写了一个应用程序(一种通信应用程序),使用 TcpListener-TcpClient 将客户端相互连接并连接到服务器。 (客户端应该能够相互连接,同时也连接到服务器)。

问题在于用户拥有的防火墙应用程序。他们的防火墙应用程序完全阻止来自网络外部的传入连接。

(我尝试使用带有 CreateObject("HNetCfg.FwMgr") 的 vbscript 中的 windows 防火墙配置脚本来解决此问题,但它不适用于防火墙应用程序!)

我该怎么办? 有什么解决方法吗,或者我们只需要为每个防火墙编写手册!

补充说明:

防火墙应用程序,例如 kaspersky、node、zonealarm 和 ...

TeamViewer 就是一个很好的例子。他们是怎么做到的?

我们不希望客户端依赖于服务器。他们应该能够在不使用服务器的情况下相互连接。

【问题讨论】:

  • 您可以通过使用WiresharkTcpView 等监控程序来了解这些程序的运行情况

标签: c# networking tcp firewall tcplistener


【解决方案1】:

您可以做的是测试客户端的互联网连接,然后尝试从外部联系您的服务器或任何其他客户端,如果没有回复,然后询问或提示用户“您是否使用防火墙?大多数防火墙检测或通知“应用程序试图联系”服务器的用户

【讨论】:

  • 您的意思是“应用程序正在尝试充当服务器”消息,对吗?不,这也不起作用!防火墙仍会阻止该端口。
【解决方案2】:

如果您可以绕过所有防火墙,那么拥有它们将毫无用处。即使他们禁用了软件防火墙,他们仍然可以让路由器充当防火墙而不转发连接尝试。

如果您有一个专用服务器并允许客户端通过该服务器相互通信,那么防火墙应该不是问题,因为每个客户端都会发起到服务器的传出连接。

如果您希望客户端能够充当服务器,则该人必须确保允许该应用程序通过其防火墙。另外,请查看 UPnP 以打开路由器上的端口。

【讨论】:

  • 你有示例应用或开源项目的链接,看看它是如何实现的吗?
  • 关于那个项目的信息不多。无论如何,这意味着在客户端,我会告诉客户端路由器将特定端口流量转发到客户端电脑?这不会再次被防火墙阻止吗?
  • 是的。不同之处在于大多数软件防火墙都会提示用户允许或拒绝连接。使用一行代码对 Windows 防火墙进行例外处理是相当简单的,这是大多数人所拥有的。但是大多数人不知道如何在他们的路由器上打开端口,这就是 UPnP 有用的原因。
猜你喜欢
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多