【问题标题】:Can I get the MAC address of a SQL Server connection?我可以获取 SQL Server 连接的 MAC 地址吗?
【发布时间】:2013-10-04 20:17:24
【问题描述】:

我知道我可以通过此查询获取 SQL Server 连接的 IPAddress 和 ConnectionID:

从 sys.dm_exec_connections 中选择 client_net_address、connection_id 其中 session_id = @@spid

但是有没有办法获取对应的MAC地址呢?

谢谢。

【问题讨论】:

  • 如果您知道客户端 具有 MAC address 并且它在同一个 IP 子网上只有一跳,那么您可以从ARP 缓存。并非每个设备都有 MAC 地址,也不能保证它们是全球唯一的。

标签: sql-server connection


【解决方案1】:

见下文:

select net_address from sysprocesses where spid = @@SPID

【讨论】:

  • 感谢您的提示。我试过了,但它给出的值似乎不是客户端机器或服务器的 MAC 地址。
  • 你只需要正确格式化:select MAC=substring(net_address,1,2)+'-'+substring(net_address,3,2)+'-'+substring(net_address,5 ,2)+'-'+substring(net_address,7,2)+'-'+substring(net_address,9,2)+'-'+substring(net_address,11,2) 来自 sysprocesses 其中 spid = @@SPID
  • 不,这绝对不是 MAC 地址。我还将它与“ifconfig /all”进行了比较,没有这样的id。
【解决方案2】:

以下部分是获取当前使用的网络的服务器MAC地址的sql命令:

declare @t table (i uniqueidentifier default newsequentialid(),  m as cast(i as char(36)))
insert into @t default values;
select substring(m,25,2) + '-' + substring(m,27,2) + '-' + substring(m,29,2) + '-' + substring(m,31,2) + '-' + substring(m,33,2) + '-' +  substring(m,35,2) AS MacAddress FROM @t
select * from @t

请注意,如果您有超过 1 个 NIC,此结果将只显示一个。

【讨论】:

  • Shai,这是一个代码转储。说几句吧。向我们展示你的赃物。
  • 对我来说没问题:我得到了与 IPConfig/ALL 相同的 MAC 地址
【解决方案3】:
    declare @t table
    (
    i uniqueidentifier default newsequentialid(),
    m as cast(i as char(36))
    )

    insert into @t default values;

    select
        substring(m,25,2) + '-' + 
        substring(m,27,2) + '-' + 
        substring(m,29,2) + '-' +
        substring(m,31,2) + '-' +
        substring(m,33,2) + '-' +
        substring(m,35,2) AS MacAddress
    FROM @t

CREATE FUNCTION [dbo].[GetCurrentIP] ()
RETURNS varchar(255)
AS
BEGIN
    DECLARE @IP_Address varchar(255);

    SELECT @IP_Address = client_net_address
    FROM sys.dm_exec_connections
    WHERE Session_id = @@SPID;

    Return @IP_Address;
END

此代码来自 [1]:http://www.codeproject.com/Tips/323721/How-to-get-Client-IP-Address-in-SQL-Server

【讨论】:

  • 这太棒了,我一生都无法理解它是如何工作的。但是,它似乎给出了服务器的 MAC 地址,而不是连接的客户端。
  • @NeilW NewSequentialGuid 通过将最后 12 个字符设置为 SQL 服务器的(第一个)MAC 地址来确保唯一性部分。
  • 一位同事给了我获取服务器 Mac 地址的代码,我问了他同样的问题,他确实向我解释了一些事情,但我不记得他给了我什么解释。周一见到他会再问他:)
  • 还有一件事,如果服务器上有 VMWare,则此代码 NewSequentialGuid() 可能会给出警告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-18
  • 2016-07-27
  • 2019-10-10
  • 2020-06-11
  • 2019-10-30
相关资源
最近更新 更多