是的,我读过这篇如何找到 MS SQL Server 2008 的端口?
没运气。
远程登录 1433
返回连接失败,所以我必须指定其他端口。
我试着用
网络统计 -abn
但我在这个列表中没有看到 sqlservr.exe 或类似的东西。
为什么这么难找到那个港口?:/
是的,我读过这篇如何找到 MS SQL Server 2008 的端口?
没运气。
远程登录 1433
返回连接失败,所以我必须指定其他端口。
我试着用
网络统计 -abn
但我在这个列表中没有看到 sqlservr.exe 或类似的东西。
为什么这么难找到那个港口?:/
试试这个:
USE master
GO
xp_readerrorlog 0, 1, N'Server is listening on'
GO
http://www.mssqltips.com/sqlservertip/2495/identify-sql-server-tcp-ip-port-being-used/
非常简单。记下来自 taskmanager 的 sqlsrvr.exe PID,然后运行以下命令:
netstat -ano | findstr *PID*
它将显示您的 SQL 服务器(包括端口)的 TCP 和 UDP 连接标准是 TCP 的 1433 和 UDP 的 1434
例子 :
这是对我有用的一个:
SELECT DISTINCT
local_tcp_port
FROM sys.dm_exec_connections
WHERE local_tcp_port IS NOT NULL
如果您已运行“netstat -a -b -n”(从提升的命令提示符)并且根本看不到“sqlservr.exe”,那么您的 SQL Server 服务未运行或其 TCP/IP 网络库正在运行禁用。
运行 SQL Server 配置管理器(开始 | 所有程序 | Microsoft SQL Server 2008 | 配置工具)。
导航到 SQL Server 服务。在右侧窗格中查找 SQL Server ()。它停止了吗?如果是这样,请启动它。
导航到 SQL Server 网络配置(或适当的 SQL Server 网络配置(32 位)),然后导航到 . 在右侧窗格中查找“TCP/IP”。它被禁用了吗?如果是这样,请启用它,然后重新启动 SQL Server 服务。
请注意,默认实例的实例 ID 将为 MSSQLSERVER。
另请注意,您不必启用 TCP/IP 网络库即可将客户端连接到服务。客户端还可以通过共享内存网络库(如果客户端在同一台机器上)或命名管道网络库进行连接。
也许它没有使用 TCP/IP
查看 SQL Server 配置管理器以了解它使用的协议。
这是我使用的另一个脚本:
-- Find Database Port script by Jim Pierce 09/05/2018
USE [master]
GO
DECLARE @DynamicportNo NVARCHAR(10);
DECLARE @StaticportNo NVARCHAR(10);
DECLARE @ConnectionportNo INT;
-- Look at the port for the current connection
SELECT @ConnectionportNo = [local_tcp_port]
FROM sys.dm_exec_connections
WHERE session_id = @@spid;
-- Look for the port being used in the server's registry
EXEC xp_instance_regread @rootkey = 'HKEY_LOCAL_MACHINE'
,@key =
'Software\Microsoft\Microsoft SQL Server\MSSQLServer\SuperSocketNetLib\Tcp\IpAll'
,@value_name = 'TcpDynamicPorts'
,@value = @DynamicportNo OUTPUT
EXEC xp_instance_regread @rootkey = 'HKEY_LOCAL_MACHINE'
,@key =
'Software\Microsoft\Microsoft SQL Server\MSSQLServer\SuperSocketNetLib\Tcp\IpAll'
,@value_name = 'TcpPort'
,@value = @StaticportNo OUTPUT
SELECT [PortsUsedByThisConnection] = @ConnectionportNo
,[ServerStaticPortNumber] = @StaticportNo
,[ServerDynamicPortNumber] = @DynamicportNo
GO
在我们的企业中,我无法访问 MSSQL Server,因此我无法访问系统表。
对我有用的是:
Wireshark
(以管理员身份运行,选择网络接口),同时打开与服务器的连接。ping
ip.dst == x.x.x.x
info
端口在格式列中显示src.port -> dst.port
尝试一次:-
USE master
DECLARE @portNumber NVARCHAR(10)
EXEC xp_instance_regread
@rootkey = 'HKEY_LOCAL_MACHINE',
@key =
'Software\Microsoft\Microsoft SQL Server\MSSQLServer\SuperSocketNetLib\Tcp\IpAll',
@value_name = 'TcpDynamicPorts',
@value = @portNumber OUTPUT
SELECT [Port Number] = @portNumber
GO
select * from sys.dm_tcp_listener_states
尝试通过以下方式启用协议: 配置管理器> SQL 服务器网络配置> MSSQLSERVER 的协议> TCP/IP的属性
SQL Server 2000 程序 | 微软 SQL 服务器 | 客户端网络实用程序 | 选择 TCP_IP,然后选择属性
SQL Server 2005 程序 | SQL 服务器 | SQL Server 配置管理器 | 选择 MSSQLSERVER 的协议或选择客户端协议并右键单击 TCP/IP
如果您不想查看 SQL Server Management (sqlservermanager15.msc),请在数据库中运行此查询,例如从 sqlcmd 或 ssms:
SELECT * FROM [sys].[dm_tcp_listener_states]
listener_id | IP地址 | is_ipv4 | 港口 | 类型 | type_desc | 状态 | state_desc | 开始时间 |
---|---|---|---|---|---|---|---|---|
1 | ::1 | 错误的 | 1433 | 0 | TSQL | 0 | 在线的 | 2021-01-01 00:00:00.000000 |
2 | 127.0.0.1 | 真的 | 1433 | 0 | TSQL | 0 | 在线的 | 2021-01-01 00:00:00.000000 |
感谢@vladimir-bashutin 指出这一点。这是另一个:
SELECT [name]
,[protocol_desc]
,[type_desc]
,[state]
,[state_desc]
,[is_admin_endpoint]
FROM [master].[sys].[endpoints]
姓名 | 协议描述 | type_desc | 状态 | state_desc | is_admin_endpoint |
---|---|---|---|---|---|
TSQL 本地机器 | SHARED_MEMORY | TSQL | 0 | 开始 | 错误的 |
TSQL 命名管道 | NAMED_PIPES | TSQL | 0 | 开始 | 错误的 |
TSQL 默认 TCP | TCP | TSQL | 0 | 开始 | 错误的 |
TSQL 默认 VIA | 通过 | TSQL | 0 | 开始 | 错误的 |
所以现在你有了端口和协议。如果您无权访问这些系统表,请考虑使用 SSRP 客户端,例如https://github.com/adzm/ssrpc。
在 PowerShell 中,您可以使用它来查看您的实例正在使用的端口:
您可以更改MSSQLSERVER
为您自己的实例名称。
$wmi = New-Object 'Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer' localhost
$tcp = $wmi.ServerInstances['MSSQLSERVER'].ServerProtocols['Tcp']
$ipAll = $tcp.IPAddresses | where { $_.Name -eq "IPAll" }
write-host ($ipAll.IPAddressProperties.value)
也许不是最好的选择,但另一种方法是读取主机中的 Windows 注册表,在提升的 PowerShell 提示符下,您可以执行以下操作:
#Get SQL instance's Port number using Windows Registry:
$instName = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server').InstalledInstances[0]
$tcpPort = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\$instName\MSSQLServer\SuperSocketNetLib\Tcp").TcpPort
Write-Host The SQL Instance: `"$instName`" is listening on `"$tcpPort`" "TcpPort."
确保在主机服务器(托管您的 SQL 实例/SQL Server 安装)中运行此 PowerShell 脚本,这意味着您必须首先 RDP 进入 SQL Server/Box/VM,然后运行此代码。
高温高压