繁体   English   中英

查找开放端口TCP通讯

[英]Finding Open Port TCP Communication

我正在编写一个像AIM这样的Java应用程序,我想要一个查找服务器来帮助两个客户端使用ServerSocket类相互连接。 不幸的是,服务器插槽需要开放的端口,否则它将被防火墙阻止。 在没有让客户端手动更改防火墙设置的情况下,我可以找到一个开放的端口,再打开一个端口(如果需要许可就可以),我只是不希望每个客户端都必须手动更改防火墙设置。 谢谢!

创建ServerSocket就是在服务器端打开端口的情况(假设防火墙上的端口也没有被阻塞)。 在许多系统上,防火墙不会阻止端口号<1024的防火墙,因此通常不需要自定义配置。 但是,由于许多ISP对其网络中阻塞的端口的要求越来越严格,因此许多软件已转移到通过80端口进行操作。为什么选择80端口? 它是用于HTTP的端口,因此,对于任何在Web上运行的服务,几乎100%的时间是在防火墙上打开的。

为了回答如何查找开放端口的问题,端口扫描程序执行此功能。 基本上,他们所做的只是尝试在一系列端口(例如端口1-1024)上建立连接。 连接成功后(在Java中,您会认为这是通过Socket的良好连接),您可以将该端口视为“开放”。 您无需交换任何数据即可建立连接,只需建立连接,然后将其关闭即可。

另外,如果服务器上没有任何类型的服务器软件在运行,即使没有被阻止,它也不会显示为“打开”。 没有成功的套接字(TCP)连接,您将不知道用户的防火墙没有阻止哪些端口。

重申一下,我在两个相关但独立的概念之间来回切换。 防火墙可以阻止/打开端口,或者具有端口转发功能。 这与为给定机器上的连接“打开”端口不同。 为了使机器接受给定端口上的连接,必须有一个软件在侦听该端口上的连接,否则无法建立连接。

我建议查看一些较不麻烦的替代解决方案-扫描开放的端口可能会花费很多时间,可能会引起受到攻击的防火墙的惊慌反应,等等。 有两种技术正在积极使用中,并且已经专门开发了一些技术来解决防火墙后面的服务器问题。

  1. UDP打孔 ,需要零用户端配置。 有关Skype如何使用此技术的简单说明,请参见此处
  2. UPnP / IGD可以用作替代方案,但是由于安全问题,如今开箱即用的设备数量较少。
  3. STUN具有客户端和服务器端的Java实现,称为JSTUN

无论选择哪种解决方案,都要与不同的Internet服务提供商进行全面测试,您可能会遇到许多限制端口的局限性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM