2010-05-17 150 views
3

如何在Web應用程序中獲取客戶端的計算機名稱。網絡中的用戶。如何獲取計算機名稱(在Web應用程序中的主機名)?

問候

//已經tryed此選項

string IP = System.Web.HttpContext.Current.Request.UserHostAddress; 
string compName = DetermineCompName(IP); 

System.Net.IPHostEntry teste = System.Net.Dns.GetHostEntry(IP); 
ssresult = IP + " - " + teste.HostName; 

// TODO: Write implementation for action 

private static string DetermineCompName(string IP) 
{ 
    IPAddress myIP = IPAddress.Parse(IP); 
    IPHostEntry GetIPHost = Dns.GetHostEntry(myIP); 
    string[] compName = GetIPHost.HostName.ToString().Split('.'); 
    return compName[0]; 
} 

所有這一切,讓我只有IP:/

+0

是的,這給人的服務器名稱在客戶端 – Filipe 2010-05-17 16:05:47

回答

0

你可以用Windows的機器名 - 統環境。 MachineName

+0

,和我想要客戶名稱 – Filipe 2010-05-17 16:11:33

+0

哎呀抱歉誤讀你的問題。你可以使用這裏描述的win api - http://www.codeproject.com/KB/IP/ListNetworkComputers。aspx 我知道這不是一個好的選擇,因爲它需要你緩存網絡中所有機器的列表。 – ClearCarbon 2010-05-17 16:17:24

+0

只是進一步看,你可以運行nslookup與 System.Diagnostics.Process process = new System.Diagnostics.Process(); System.Diagnostics.ProcessStartInfo sInfo = new System.Diagnostics.ProcessStartInfo(「nslookup.exe」); result = process.StandardOutput.ReadToEnd(); – ClearCarbon 2010-05-17 16:21:10

0

是啊,需要你繼續請求和緩存電腦效率非常低,是一個壞主意。

我會去在我還沒有測試此代碼後臺運行的NSLOOKUP和也不是處理錯誤的故障,但基本上,你可以這樣做:

System.Diagnostics.Process process = new System.Diagnostics.Process(); 
System.Diagnostics.ProcessStartInfo sInfo = new System.Diagnostics.ProcessStartInfo("nslookup.exe", "192.168.1.100"); 
string result = process.StandardOutput.ReadToEnd(); 

然後,只需解析結果值。

+0

好吧對不起,我沒有時間更詳細地看看這個,但這可能會幫助你 - http://stackoverflow.com/questions/353601/capturing-nslookup-shell-output-with-c – ClearCarbon 2010-05-18 08:38:21

3

你不能以保證工作的方式做到這一點。

最近你將能夠得到的是沿着使用System.Net.Dns.GetHostEntry進行反向dns查找的路線,這是你已經嘗試過的。

問題是,您的機器無法單獨通過IP地址知道遠程Web客戶機的主機名(除非它位於同一子網上,在這種情況下您可以檢索它)。

你必須回退你的DNS基礎設施,才能將IP映射回主機名[這是nslookup在你鍵入主機名時的作用],並且很多地方不會打擾設置反向IP記錄。

另外,經常如果他們這樣做,他們將不匹配主機名。看到「1.2.3.4」的反向查找返回爲「machine-1.2.3.4」行而非實際的主機名是很常見的。

如果客戶端支持任何類型的網絡地址轉換,使得許多客戶端計算機從外部角度具有單個IP,則此問題會進一步惡化。自從您聲明「網絡中的用戶」後,這可能不是您的情況。

順便說一句,如果你去到服務器並輸入,在命令提示符下,

nslookup <some ip> 

(其中爲這些客戶機的一個示例),你得到一個主機名了?

如果你這樣做,那麼System.Net.Dns.GetHostEntry應該能夠,如果不是那麼它可能不能出於上述原因。

0

假設您的客戶端基於Windows運行IE,你可以使用此客戶端代碼來獲取名稱和它們傳回給服務器:

<script type="text/javascript"> 
     function create() 
     { 
      var net = new ActiveXObject("wscript.network"); 
      document.write(net.ComputerName); 
     } 
</script> 
相關問題