我有一个用Java写的带有ServerSocket的服务器。
我有一个客户端,它越过了一个企业防火墙,阻止了除公共端口以外的所有东西。
我已经在SMTP端口(#25)上启动了服务器。
有防火墙的用户连接到它,到目前为止一切正常。
然后,服务器处理ServerSocket.accept()。据我所知,它会在一个随机端口上创建一个套接字(每次端口号都不同)。并且因为防火墙而失败。
我的问题是-如何让ServerSocket.accept()从我的白名单中为套接字选择端口?我知道它不适合海量在线,但我想让一个我的朋友,以便能够连接到我的服务器。
有可能吗?又是如何做到的?
发布于 2012-08-26 04:34:49
服务器套接字不会随机选择端口。是客户端套接字选择了随机端口。我的猜测是你的防火墙是智能的,它知道检测连接是否被某种dpi (深度包检测)批准。
如果你想误导它,你可以尝试在前2-3个包中运行看起来像smtp的数据,然后切换到你的协议。
另一种选择是在系统外部使用一种连接器,在这种情况下,两台机器都是通过第三个客户端连接的客户端(有许多这样的代理)
https://stackoverflow.com/questions/12125339
复制相似问题