检查ip和dns名称

时间:2010-02-17 08:02:37

标签: tsql

T-SQL

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

3 个答案:

答案 0 :(得分:4)

将主机名解析为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帖子:

答案 1 :(得分: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

答案 2 :(得分:-1)

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

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