如何在SQLServer2008中从ip地址获取计算机名?

如何在SQLServer2008中从ip地址获取计算机名?,sql,sql-server,Sql,Sql Server,我必须从SQL Server中的IP地址获取机器名,是否可以做些什么来完成我的任务DB: 查询: 尝试: 或 或 参考: 希望对您有所帮助。您可以尝试此功能以获取您的机器名称 SELECT SERVERPROPERTY(N'MachineName'); 可能上面的内容可以满足您的需要。我可能错了,但据我所知,SQL Server不能满足您的需要。从IP地址解析计算机名称是您网络的DNS服务器所做的事情 我想到的从SQL Server获取这些信息的最佳方法是使用xp_cmdshell命令从SQL

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

DB:

查询:

尝试:

参考:


希望对您有所帮助。

您可以尝试此功能以获取您的机器名称

SELECT SERVERPROPERTY(N'MachineName');

可能上面的内容可以满足您的需要。

我可能错了,但据我所知,SQL Server不能满足您的需要。从IP地址解析计算机名称是您网络的DNS服务器所做的事情

我想到的从SQL Server获取这些信息的最佳方法是使用xp_cmdshell命令从SQL执行命令提示符命令

xp_cmdshell 'NBTSTAT -A 10.10.10.10'
但是,请注意,需要首先在服务器上启用xp_cmdshell才能正常工作,而且这通常不是可能出现安全问题的原因。有关xp_cmdshell的更多信息,请访问

另外,这个结果和命令提示符的结果一样,需要进行一些解析才能从中获得确切的机器名。有关详细信息,请查看此主题:


我不知道您的解决方案体系结构以及如何获取IP地址,但如果它来自某些客户端应用程序,则通过执行客户端查询中的SELECT HOST_name或使用.NET并直接发送机器名来查找客户端机器名可能会更容易。

您想要的是一个。有一些命令行工具可以做到这一点,也可以使用API。您不需要从T-SQL执行任何操作,所以不要尝试这样做。将IP解析为客户端中的名称。

在SQL语言中无法以本机方式执行此操作,最好的选择是:

--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 
1/shell通过xp cmdshell输出并运行nslookup,这将需要一些字符串操作来获得正确的命令,然后对输出进行一些清理以返回机器名

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

有关文档,请参见此处:

我编写了一个非常快速简单的CLR函数,用于从IP地址获取机器名,如下所示,请注意,在尝试解析之前,没有错误处理或输入检查来确保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());
    }
}

这实际上是可行的:修改的答案来自天空潜水员

--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 

试试这个,你会得到一个系统名

选择主机名


注意:Rajsri Vyshnnavi

实际上这不是我的情况,我有动态ip,我必须动态获取ip。然后你必须提到你正在使用的编程语言。我有一个ip地址,我需要从MSSQL中的ip地址获取机器名机器名存储在DB中?那么上面的查询有什么问题??你能分享[Paste]DB结构吗?很抱歉,这不是我想要的,我只是想解析机器名中的IP地址欢迎使用堆栈溢出。发布代码时,请确保设置了格式。请参阅:OP最初希望从登录到实例的IP中查找计算机地址或名称。
SELECT SERVERPROPERTY(N'MachineName');
xp_cmdshell 'NBTSTAT -A 10.10.10.10'
--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 
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());
    }
}
--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