簡體   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