【问题标题】:Java + ServerSocket + FirewallJava + ServerSocket + 防火墙
【发布时间】:2012-08-25 20:19:33
【问题描述】:

我有一个使用 ServerSocket 用 Ja​​va 编写的服务器。

我有一个客户端,它通过公司防火墙阻止除公共端口之外的所有内容。

我已经在 SMTP 端口 (#25) 上启动了服务器。

有防火墙的用户连接到它,到目前为止一切正常。

然后服务器处理ServerSocket.accept()。据我了解,它会在随机端口上创建一个套接字(每次端口号都不同)。并且由于防火墙而失败。

我的问题是 - 我怎样才能让 ServerSocket.accept() 从我的白名单中为套接字选择一个端口?我知道它不适合大规模在线,但我想让我的一个朋友能够连接到我的服务器。

有可能吗?怎么做?

【问题讨论】:

  • 我认为你需要在你朋友的身边使用类似 SOCKS 的东西:en.wikipedia.org/wiki/SOCKS。假设您的家庭路由器没有配置问题,您必须允许有出站服务器流量。

标签: java sockets firewall serversocket


【解决方案1】:

服务器套接字不选择随机端口。选择随机端口的是客户端套接字。我的猜测是你的防火墙很聪明,它知道检测连接是否被某种 dpi(深度数据包检测)批准。

如果你想误导它,你可以尝试在前2-3个数据包中运行看起来像smtp的数据,然后切换到你的协议。

另一种选择是在系统外部使用一种连接器,在这种情况下,两台机器都是通过第三个客户端连接的客户端(有很多这样的代理)

【讨论】:

  • 我不同意,@soulbuner 假设是正确的,定义的端口仅用于建立连接。接受第二个随机端口后,1024以上用于数据传输。
  • 作为一个DPI引擎的前开发者我相信它是正确的,你可以使用wireshark记录一些http流量例如看看。有一些协议使用多个通道,如 FTP,但事实并非如此。
  • 那么我们中的一个人没有正确理解这个问题,因为我的经历与@soulburner 解释的一样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多