【问题标题】:Check ip and dns name检查 ip 和 dns 名称
【发布时间】:2010-02-17 08:02:37
【问题描述】:

T-sql

是否可以检查 ip-address 和 dns name 是否相同?

【问题讨论】:

  • IP 地址和 DNS 名称永远不会相同。你在问如何检查一个苹果和一个橙子是否是同一种水果。你能澄清一下你想做什么吗?
  • 他在询问 IP 是否解析为 DNS 名称,反之亦然。在某些情况下(特别是对于经常连接和断开连接的 VPN 用户),如果您使用 IP 到 DNS 和 DNS 到 IP,它可能会不一样。但我想在他的情况下,他只是想知道如何将 IP 解析为 DNS 和 DNS 解析为 IP。
  • jamieb,好的,我有一些网络设备。用户可以通过 ip-address 或 dns name 设置此设备的地址。我不想有重复的地址(ip-address 对应于 dns-name,反之亦然)所以我必须检查它(t-sql)。
  • 这些答案对您有帮助吗?还是您在寻找其他/更多的东西?

标签: tsql


【解决方案1】:

将主机名解析为 IP 地址是可以在 CLR 存储过程中轻松完成的。

如果您是 CLR 新手,不妨从以下文章开始:

至于解析主机名的代码,在C#中可以很容易做到,如下:

string hostname = "stackoverflow.com";
IPAddress[] ipList = Dns.GetHostAddresses(hostname);

foreach (IPAddress ip in ipList)
{
   // ... check each ip with an IP address you pass
   //     as a parameter.
}

如果您想知道为什么会收到 IP 地址列表,您可能有兴趣查看以下 Stack Overflow 帖子:

【讨论】:

    【解决方案2】:

    HOST_NAME() 返回客户端的计算机名称。

    此代码使用pingxp_cmdshell 解析其IP 地址:

    set nocount on
    declare @ip varchar(255), @cmd varchar(100) 
    set @cmd = 'ping -n 1 ' + HOST_NAME() 
    create table #temptb (grabfield varchar(255)) 
    insert into #temptb exec master.dbo.xp_cmdshell @cmd 
    select @ip = substring(grabfield,  charindex('[',grabfield)+1,
     charindex(']',grabfield)-charindex('[',grabfield)-1) from #temptb  where left(grabfield,7) = 'Pinging' 
    print @ip 
    drop table #temptb
    set nocount off 
    

    来源:http://www.sqlservercentral.com/Forums/Topic150196-8-1.aspx

    【讨论】:

      【解决方案3】:

      您可以使用此查询来获取有关连接的大量信息:

      SELECT
          c.*,s.*
          FROM sys.dm_exec_sessions                 s
              INNER JOIN sys.dm_exec_connections    c ON s.session_id=c.session_id
          WHERE s.session_id = @@SPID
      

      sys.dm_exec_connections.client_net_address = 连接到此服务器的客户端的主机地址。

      sys.dm_exec_connections.local_net_address = 表示此连接所针对的服务器上的 IP 地址。仅适用于使用 TCP 传输提供程序的连接。

      您可以尝试使用这样的查询来查看是否有重复的 IP:

      SELECT
          c.client_net_address, COUNT(*) AS CountOf
          FROM sys.dm_exec_connections   c
          GROUP BY c.client_net_address
          HAVING count(*)>1
      

      【讨论】:

        猜你喜欢
        • 2011-06-14
        • 2011-07-24
        • 2012-06-07
        • 1970-01-01
        • 2018-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-12
        相关资源
        最近更新 更多