java - 如何仅使用 java 原始套接字验证 DB 远程服务器是否正在运行 [Telnet]

标签 java mysql oracle db2

我想探索一个选项来编写最少的代码来检查 db2 服务器是否正在使用纯 java 套接字运行。就像 telnet 到服务器一样。看来 db2 未配置为响应 telnet 连接。有什么帮助吗? 下面的代码适用于 mysql,但不适用于 db2。

This code is equivalent to telnet ip port

Below is the java code

    import java.io.IOException;
    import java.io.InputStream;
    import java.net.Socket;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    public class myApp {
        public static void main(String[] args) throws IOException {
            Socket socket = new Socket("192.168.8.142", 50000);
            String pattern = "mysql|oracle|db2";
            Pattern r = Pattern.compile(pattern);
            InputStream in = socket.getInputStream();
            byte[] b = new byte[512];
            in.read(b);
            String response = new String(b);
            in.close();
            socket.close();
            Matcher m = r.matcher(response);
            System.out.println(m.find(0));
        }
    }

For mysql2, telnet return some characters with mysql text, version and some encoded ascii characters. But for db2, its seems like telnet is stuck without any response.

最佳答案

如果您在正确的端口上远程登录到 Db2 服务器(适用于 Linux/Unix/Windows 的 Db2),并且远程登录显示“已连接到”,则意味着有某些东西正在该主机上的该端口上监听。

如果某个端口正在监听,则 telnet 将首先显示 Connected to ... ,并且 Escape character is ... 。如果它是正在监听该端口的 Db2-LUW 服务器,您将看不到任何其他内容(看起来像是挂起)。然后您可以中止该过程。

如果您没有获得连接(并收到错误消息),则可能是防火墙阻止了该端口,或者地址不正确,或者此时指定端口上没有任何内容正在监听。

如果它是正在监听端口的 Db2-LUW 服务器,则在获得连接后,您的代码不应在套接字上执行读取操作,因为它会挂起(我相信只要 TCP 超时),就像telnet一样。

Db2 知识中心应该是 look 的第一个地方了解详情。

如果 Db2 服务器参与发现解决方案,这会有所帮助。否则,连接到数据库是了解 Db2 服务器是否正在运行的方法。这意味着,除了驱动程序之外,您还需要提前了解主机/端口、身份验证机制和任何配置的加密,以及身份验证所需的任何相关凭证 token / key /证书/uid+pwd。

您还可以查看 Apache Derby 源代码,因为它实现了 DRDA 协议(protocol),也可以看看是否可以模拟连接尝试。

请记住,企业通常拥有高可用性配置的生产 Db2 服务器,并且通常拥有监控和警报系统来不断验证 Db2 服务器是否运行正常。所以考虑重新发明轮子是否有用。

关于java - 如何仅使用 java 原始套接字验证 DB 远程服务器是否正在运行 [Telnet],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61799069/

相关文章:

java - 使用streamtokenizer导致EOL异常?

java - performItemClick 在另一个 View 中

java - 多模块maven项目: Failed to execute goal on project,无法解析项目的依赖关系,无法找到 Artifact

php - 插入后获取id并将其作为值保存到另一个表中

mysql - 在一对多上构建 SQL 查询

sql - 减少在 Oracle 中使用 AND 运算符,同时比较不同列中的多个 NULL 值

sql - ORA-00907 缺少右括号问题 - 在插入查询中按顺序选择

java - 如何得到whenComplete和thenCompose的组合效果?

php - 不要单独处理行,也不包含表元数据

oracle - oracle 11gr1 中 xmltype 列的最大大小?