0

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

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

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

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

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

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

可能吗?如何?

4

1 回答 1

0

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

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

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

于 2012-08-25T20:34:48.743 回答