2010-05-17 94 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> 
相关问题