简体   繁体   English

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

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

I am testing about MSSQL. 我正在测试有关MSSQL。 "how to long session information created after after connection?" “连接后如何长时间建立会话信息?”

So, try to connection with MSSQL JDBC, then select the sys.dm_exec_session and sys.dm_exec_connection with client Ip and port. 因此,尝试与MSSQL JDBC连接,然后选择具有客户端IP和端口的sys.dm_exec_session和sys.dm_exec_connection。

But, I don't have any idea, how to get Client Ip and port from JDBC connection. 但是,我不知道如何从JDBC连接获取客户端IP和端口。

or is it possible create JDBC connection using socket? 还是可以使用套接字创建JDBC连接?

show my test code. 显示我的测试代码。

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()) {
            ...

thanks for reading my strange English. 感谢您阅读我的英语。

If you want to get the IP and port for an active connection you can just query sys.dm_exec_connections with WHERE session_id=@@SPID , eg, 如果要获取活动连接的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")
                );
    }
}

producing 生产

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.

相关问题 在 Netty 上,如何在客户端(Boostrap)连接上使用相同的 ServerBootstrap IP/PORT? - On Netty, how to use same IP/PORT of ServerBootstrap on a client (Boostrap) connection? 如何从MySQL JDBC驱动程序获取客户端本地套接字端口? - How to obtain the client local socket port from MySQL JDBC driver? 异步UDP如何从java中的客户端获取ip和端口? - Asynchronous UDP how to get ip and port from client in java? 如何控制 Java 中 JDBC 连接的传出 IP? - How to control the outgoing IP of a JDBC connection in Java? com.microsoft.sqlserver.jdbc.SQLServerException:与主机本地主机端口1433的TCP / IP连接失败 - com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host localhost, port 1433 has failed 如何在jdbc连接上传递用户名或用户ip地址? - How to pass user name or user ip adress on jdbc connection? 服务器未从正确的IP和端口打开的客户端接收消息 - Server not receiving message from client with correct IP and port opened 如何检查mysql连接的默认端口号? 连接不工作! jdbc 连接 - How to check the default port number for mysql connection? Connection not working! jdbc connection 如何动态更改Java Database Connection类的IP和PORT? - How to change IP and PORT of Java Database Connection class dynamically? 如何在Apache Ignite中查找正在运行的服务器或客户端ip及其端口 - How to find running server or client ip and its port in Apache Ignite
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM