如何获取计算机名称(Web应用程序中的主机名)?

时间:2010-05-17 16:02:25

标签: c#

如何在Web应用程序中获取客户端的计算机名称。网络中的用户。

此致

//已经尝试过这个选项

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

4 个答案:

答案 0 :(得分: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也应该能够,如果没有,那么由于上述原因,它可能不会。

答案 1 :(得分:0)

您可以使用--System.Environment.MachineName

获取Windows计算机名称

答案 2 :(得分: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(); 

然后只解析结果值。

答案 3 :(得分:0)

假设您的客户端是基于Windows的运行IE,您可以使用此客户端代码获取名称并将其传递回服务器:

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