我必须从SQL Server的IP地址获取机器名,我能做些什么来完成我的任务
答案 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方法来解析并返回名称。
请参阅此处获取文档:
我写了一个非常简单的简单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