簡體   English   中英

如何從SQL Server 2008中的IP地址獲取計算機名稱?

[英]How to get machine name from ip address in SQL Server 2008?

我必須從SQL Server的IP地址獲取計算機名稱,我可以做些什么來完成我的任務

您想要的稱為反向DNS查找 有一些命令行工具可以做到這一點( nslookup.exe ),也可以使用DnsQuery API。 您從T-SQL都沒有業務要做,所以不要嘗試這樣做。 解析IP以在客戶端中命名。

您不能使用SQL語言本身執行此操作,最好的選擇是:

1 /通過xp-cmdshell外殼並運行nslookup,這將需要一些字符串操作以正確獲得命令,然后對輸出進行一些清理以返回機器名稱

2 /編寫一個C#CLR函數,該函數將IP地址作為輸入並利用Dns.GetHostEntry方法解析並返回名稱。

有關文檔,請參見此處:

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());
    }
}

D B:

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

希望對您有所幫助。

我可能是錯的,但據我所知,SQL Server無法完成您想要的操作。 從IP地址解析計算機名稱是您網絡的DNS服務器所做的事情。

我想出了從SQL Server獲取該信息的最佳方法是使用xp_cmdshell命令從SQL執行命令提示符命令。

xp_cmdshell 'NBTSTAT -A 10.10.10.10'

但是,請注意,必須先在服務器上啟用xp_cmdshell才能正常工作,通常這並不是因為可能存在安全問題。 http://msdn.microsoft.com/zh-cn/library/ms175046.aspx上了解有關xp_cmdshell的更多信息

同樣,由此產生的結果將與命令提示符中的結果一樣,並且需要進行一些解析才能從中獲取確切的計算機名稱。 檢查此主題以獲取更多信息: 從XP_CMDSHELL獲取結果

我不知道您的解決方案體系結構以及如何獲取IP地址,但是如果它是從某些客戶端應用程序中獲得的,則從客戶端查詢或使用.NET執行SELECT HOST_NAME()來查找客戶端的計算機名稱可能會更容易機器名稱直接。

您可以嘗試此操作以獲取計算機的名稱。

SELECT SERVERPROPERTY(N'MachineName');

可能以上可以達到您的目的。

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

這實際上有效: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 

試試這個,你會得到一個系統名稱……。

選擇HOST_NAME()

問候:拉傑斯里·維什納維

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM