2010-02-17 70 views
1

T-sql检查ip和DNS名称

是否可以检查IP地址和DNS名称是否相同?

+0

IP地址和DNS名称是绝不相同。你在问如何检查苹果和橙子是否是同一种水果。你能否澄清你想要做什么? – jamieb 2010-02-17 08:13:21

+1

他询问IP是否解析为DNS名称,反之亦然。在某些情况下(特别是对于经常连接和断开连接的VPN用户),如果您将IP转换为DNS并将DNS转换为IP,则可能会不一样。但我想他的情况下,他只是想知道如何解决IP到DNS和DNS到IP。 – MadBoy 2010-02-17 08:55:41

+0

jamieb, 好吧,我有一些网络设备。用户可以通过ip-address或dns名称来设置该设备的地址。我不想有重复的地址(IP地址对应于DNS名称,反之亦然),所以我必须检查它(T-SQL)。 – 2010-02-17 09:05:42

回答

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

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地址列表,你可能有兴趣在检查出下面的堆栈溢出后:

-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