105

是的,我读过这篇如何找到 MS SQL Server 2008 的端口?

没运气。

远程登录 1433

返回连接失败,所以我必须指定其他端口。

我试着用

网络统计 -abn

但我在这个列表中没有看到 sqlservr.exe 或类似的东西。

为什么这么难找到那个港口?:/

4

15 回答 15

175

试试这个:

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/

于 2012-09-06T10:04:09.820 回答
81

非常简单。记下来自 taskmanager 的 sqlsrvr.exe PID,然后运行以下命令:

netstat -ano | findstr *PID*

它将显示您的 SQL 服务器(包括端口)的 TCP 和 UDP 连接标准是 TCP 的 1433 和 UDP 的 1434

例子 : 在此处输入图像描述

于 2013-06-19T10:06:04.733 回答
70

这是对我有用的一个:

SELECT DISTINCT 
    local_tcp_port 
FROM sys.dm_exec_connections 
WHERE local_tcp_port IS NOT NULL 
于 2014-02-05T19:14:25.020 回答
52

如果您可以启动 Sql Server 配置管理器 > SQL Server 网络配置 > 您的实例 > TCP/IP > 属性

在此处输入图像描述

于 2015-08-03T15:06:59.913 回答
8

如果您已运行“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 网络库即可将客户端连接到服务。客户端还可以通过共享内存网络库(如果客户端在同一台机器上)或命名管道网络库进行连接。

于 2013-03-11T02:29:50.650 回答
3

也许它没有使用 TCP/IP

查看 SQL Server 配置管理器以了解它使用的协议。

于 2012-09-06T10:02:29.160 回答
3

这是我使用的另一个脚本:

-- 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
于 2018-09-05T17:22:42.683 回答
2

在我们的企业中,我无法访问 MSSQL Server,因此我无法访问系统表。

对我有用的是:

  1. 捕获网络流量Wireshark(以管理员身份运行,选择网络接口),同时打开与服务器的连接。
  2. 找到ip地址ping
  3. 过滤ip.dst == x.x.x.x

info端口在格式列中显示src.port -> dst.port

于 2016-08-09T14:23:21.843 回答
2

尝试一次:-

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
于 2018-07-06T12:08:52.793 回答
2
select * from sys.dm_tcp_listener_states 

更多: https ://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-tcp-listener-states-transact-sql?view=sql-server -2017

于 2018-10-16T09:27:32.840 回答
1

尝试通过以下方式启用协议: 配置管理器> SQL 服务器网络配置> MSSQLSERVER 的协议> TCP/IP的属性

于 2014-11-29T12:22:00.000 回答
0

SQL Server 2000 程序 | 微软 SQL 服务器 | 客户端网络实用程序 | 选择 TCP_IP,然后选择属性

SQL Server 2005 程序 | SQL 服务器 | SQL Server 配置管理器 | 选择 MSSQLSERVER 的协议或选择客户端协议并右键单击 TCP/IP

于 2013-03-08T20:37:40.200 回答
0

如果您不想查看 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

于 2021-09-03T16:53:17.083 回答
0

在 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)
于 2021-09-19T05:27:42.910 回答
-1

也许不是最好的选择,但另一种方法是读取主机中的 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,然后运行此代码。

高温高压

于 2020-04-07T18:37:31.247 回答