我能否在不连接端口的情况下检查IP端口是否打开?

3

我要做的是扫描本地网络中的特定端口(4444),然后返回该端口是否开放。我目前正在执行以下操作:

    private static boolean portIsOpen(String ip, int port, int timeout) {
        try {
            Socket socket = new Socket();
            socket.connect(new InetSocketAddress(ip, port), timeout);
            socket.close();
            return true;
        } catch (Exception ex) {
            return false;
        }
    }

我将使用这种方法在我的本地网络中搜索服务器(类似于Minecraft的多人游戏,它会扫描本地网络以查找开放的游戏)。我的问题是,当我使用这种方法时,服务器端会出现问题,因为当任何东西连接到它时,服务器立即发送数据。有可能在不连接到端口的情况下检查端口是否开放吗?


这不应该破坏服务器端。它应该对流氓客户端具有容错能力。 - user207421
1个回答

1

不连接端口,能否检查其是否开放?

简而言之,不行。

目前没有标准机制支持此功能。唯一的方法是设计、实现和部署一个自定义服务来检查本地网络上所有计算机的端口状态。


正如EJP所指出的那样,一个写得好的服务应该能够处理客户端立即关闭TCP连接而不发送或接收数据的情况。
但是如果你的目标是在没有人注意到探测的情况下做到这一点...祝你好运!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接