繁体   English   中英

如何从JDBC连接中了解客户端IP端口

[英]how to know client ip port from jdbc connection

我正在测试有关MSSQL。 “连接后如何长时间建立会话信息?”

因此,尝试与MSSQL JDBC连接,然后选择具有客户端IP和端口的sys.dm_exec_session和sys.dm_exec_connection。

但是,我不知道如何从JDBC连接获取客户端IP和端口。

还是可以使用套接字创建JDBC连接?

显示我的测试代码。

try {
        DriverManager.registerDriver(
                new com.microsoft.sqlserver.jdbc.SQLServerDriver());
        DriverManager.setLoginTimeout(10);
    } catch (Exception ex) {
        System.out.println("Fail to register sqlserver driver.");
        return;
    }

    String url = "jdbc:sqlserver://";
    String ip = "10.1.1.1";
    String port = "1433";
    String catalog = "master";
    String user = "jtlee";
    String pwd = "123456789";

    url = url + ip + ":" + port + ";databasename=" + catalog;

    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;

    try {
        long startTime = System.nanoTime();

        conn = DriverManager.getConnection(url, user, pwd);
        pstmt = conn.prepareStatement(
                "SELECT "
                + "     count(*) "
                + "FROM "
                + "     sys.dm_exec_connections connections,"
                + "     sys.dm_exec_sessions sessions "
                + "WHERE "
                + "     connections.session_id = sessions.session_id "
                + "     and connections.client_net_address= ? "
                + "     and connections.client_tcp_port= ? ");

        /* I need this information... */
        String clientIp;
        int clientPort;

        pstmt.setString(1, clientIp);
        pstmt.setInt(2, clientPort);
        rs = pstmt.executeQuery();

        if (rs.next()) {
            ...

感谢您阅读我的英语。

如果要获取活动连接的IP和端口,则可以使用WHERE session_id=@@SPID查询sys.dm_exec_connections ,例如,

sql = 
        "SELECT client_net_address, client_tcp_port, local_net_address, local_tcp_port " + 
        "FROM sys.dm_exec_connections " + 
        "WHERE session_id=@@SPID";
try (
        Statement st = conn.createStatement();
        ResultSet rs = st.executeQuery(sql)) {
    while (rs.next()) {
        System.out.printf("Connection is between %s:%d on the server and %s:%d as the client.%n", 
                rs.getString("local_net_address"),
                rs.getInt("local_tcp_port"),
                rs.getString("client_net_address"),
                rs.getInt("client_tcp_port")
                );
    }
}

生产

Connection is between 192.168.1.12:1433 on the server and 192.168.1.101:49744 as the client.

暂无
暂无

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

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