[英]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.