如何从SQL Server 2008中的IP地址获取计算机名称?

时间:2013-04-08 06:58:30

标签: sql sql-server

我必须从SQL Server的IP地址获取机器名,我能做些什么来完成我的任务

8 个答案:

答案 0 :(得分:2)

您想要的是Reverse DNS lookup。有一些命令行工具可以执行此操作(nslookup.exe),或者您可以使用DnsQuery API。你没有从T-SQL做生意,所以不要试图这样做。解析IP以在客户端中命名。

答案 1 :(得分:2)

您无法在SQL语言中本地执行此操作,您最好的选择是:

1 / shell通过xp-cmdshell运行并运行nslookup,这将需要一些字符串操作来正确获取命令,然后清理输出以返回机器名称

2 /编写一个C#CLR函数,该函数将IP地址作为输入,并使用Dns.GetHostEntry方法来解析并返回名称。

请参阅此处获取文档:

Dns.GetHostEntry Method

我写了一个非常简单的简单CLR函数,用于从IP地址获取机器名称,请注意没有错误处理或输入检查以确保IP在尝试解决之前有效,并且它赢了'如果你传递一个主机名,给你IP地址,但它可以很容易地修改,包括所有这些东西,它只是为了让你知道它是如何工作的:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Net;

public partial class UserDefinedFunctions
{
    [Microsoft.SqlServer.Server.SqlFunction]
    public static SqlString dnsResolve(String ipAddress)
    {
        IPHostEntry host = Dns.GetHostEntry(ipAddress);
        return new SqlString(host.HostName.ToString());
    }
}

答案 2 :(得分:1)

我可能错了,但就我所知,SQL Server无法做到你想要的。从IP地址解析计算机名称是您的网络DNS服务器所做的事情。

我最想知道从SQL Server获取该信息是使用xp_cmdshell命令从SQL执行命令提示符命令。

xp_cmdshell 'NBTSTAT -A 10.10.10.10'

但请注意,首先需要在服务器上启用xp_cmdshell才能正常工作,而且通常不会出现安全问题。在http://msdn.microsoft.com/en-us/library/ms175046.aspx

了解有关xp_cmdshell的更多信息

此外,这样的结果就像从命令提示符那样,它需要一些解析才能从中获取确切的机器名称。请查看此主题以获取更多信息:Get Results from XP_CMDSHELL

我不知道您的解决方案架构以及如何获取IP地址,但如果它来自某些客户端应用程序,则可能更容易从客户端查询中找到执行SELECT HOST_NAME()的客户端计算机名称,或者.NET并直接发送机器名称。

答案 3 :(得分:0)

<强> DB:

IPAdd | MachineName

<强>查询:

select MachineName from DBTable where IPAdd='yourIPAddress'

试用:

SELECT SERVERPROPERTY('MachineName')

SELECT  
   CONNECTIONPROPERTY('net_transport') AS net_transport,
   CONNECTIONPROPERTY('protocol_type') AS protocol_type,
   CONNECTIONPROPERTY('auth_scheme') AS auth_scheme,
   CONNECTIONPROPERTY('local_net_address') AS local_net_address,
   CONNECTIONPROPERTY('local_tcp_port') AS local_tcp_port,
   CONNECTIONPROPERTY('client_net_address') AS client_net_address 

SELECT @@SERVERNAME;

<强>参见:

http://msdn.microsoft.com/en-us/library/ms187944.aspx

希望它有所帮助。

答案 4 :(得分:0)

您可以尝试使用此功能获取计算机的名称。

SELECT SERVERPROPERTY(N'MachineName');

可能在上面可以满足你的目的。

答案 5 :(得分:0)

--Im using command line for checking host name after IP
declare @IP as varchar(15)
declare @cmd as varchar(1000) 
set @IP='192.168.0.1' 
SET @cmd = 'ping -a -n 1 ' + @IP 
Create Table #Output (Output varchar(150) default(''))
INSERT INTO #Output 
EXEC xp_cmdshell @cmd 
Begin try 
Select top 1 Replace(LEFT([Output],CHARINDEX('[', [output])-2),'Pinging ','') as HostName from #Output where Output is not null 
End Try 
Begin catch 
Select 'Host name for:' + @IP +' could not be find'
End catch 
drop table #Output 

答案 6 :(得分:0)

这实际上有效:来自Sky Diver的修改后的答案

--Im using command line for checking host name after IP
    declare @IP as varchar(15)
    declare @cmd as varchar(1000) 
    set @IP='137.201.17.204' 
    SET @cmd = 'ping -a -n 1 ' + @IP 
    Create Table #Output (Output varchar(150) default(''))
    INSERT INTO #Output 
    EXEC xp_cmdshell @cmd 
    Begin try 
    Select top 1 Replace(LEFT([Output],CHARINDEX('[', [Output])-2),'Pinging ','') as HostName from #Output where Output like 'Pinging%'
    End Try 
    Begin catch 
    Select 'Host name for:' + @IP +' could not be find'
    End catch 
    --drop table #Output 

答案 7 :(得分:0)

试试这个你会得到一个系统名称.......

选择HOST_NAME()

问候:Rajsri Vyshnnavi