检查ip和DNS名称
答
HOST_NAME()
返回客户端的计算机名称。
此代码解决使用ping
和xp_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
答
将主机名解析为IP地址可以在CLR存储过程中轻松完成。
如果你是新来的CLR,你可能想从下面的文章开始:
至于代码解析主机名,这可能是轻松在C#中完成如下:
string hostname = "*.com";
IPAddress[] ipList = Dns.GetHostAddresses(hostname);
foreach (IPAddress ip in ipList)
{
// ... check each ip with an IP address you pass
// as a parameter.
}
如果你想知道为什么你收到的IP地址列表,你可能有兴趣在检查出下面的堆栈溢出后:
答
您可以使用此查询来获取大量的信息有关的连接:
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
IP地址和DNS名称是绝不相同。你在问如何检查苹果和橙子是否是同一种水果。你能否澄清你想要做什么? – jamieb 2010-02-17 08:13:21
他询问IP是否解析为DNS名称,反之亦然。在某些情况下(特别是对于经常连接和断开连接的VPN用户),如果您将IP转换为DNS并将DNS转换为IP,则可能会不一样。但我想他的情况下,他只是想知道如何解决IP到DNS和DNS到IP。 – MadBoy 2010-02-17 08:55:41
jamieb, 好吧,我有一些网络设备。用户可以通过ip-address或dns名称来设置该设备的地址。我不想有重复的地址(IP地址对应于DNS名称,反之亦然),所以我必须检查它(T-SQL)。 – 2010-02-17 09:05:42