java - 查找开放端口 TCP 通信

标签 java sockets networking tcp serversocket

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

最佳答案

创建 ServerSocket 可以打开服务器端的端口(假设该端口也没有被防火墙阻止)。在许多系统上,<1024 的端口号不会被防火墙阻止,因此通常不需要自定义配置。然而,由于许多 ISP 对阻止网络内的端口越来越严格,因此许多软件已转为通过端口 80 运行。为什么选择端口 80?它是用于 HTTP 的端口,因此对于在网络上运行的任何服务来说,几乎 100% 的时间都处于开放状态(在防火墙处)。

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

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

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

关于java - 查找开放端口 TCP 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7410214/

相关文章:

python - 如何在 Python 3 中将 asyncore 与多处理 IPC 模块一起使用?

java安全套接字无需身份验证?

java - java中字符串引用的相等性

c - 用于补偿 TCP 流套接字的示例 C 代码?

c - 在套接字(windows)上启用 SO_DEBUG 时如何查看套接字信息?

amazon-web-services - 在 self 管理的 Kubernetes 上获取 Istio 网关的外部 IP

Python 套接字错误 35

java - 远程 View 和非基本操作

java - 如何以编程方式刷新 TextView 中的文本?

c - ad hoc 网络中的 UDP 套接字 (Ubuntu 9.10)