繁体   English   中英

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

[英]How to get the computer name (hostname in a web aplication)?

如何在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:/

你不能以保证工作的方式做到这一点。

你能得到的最接近的是沿着使用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应该能够,如果没有那么它可能不会出于上面提到的原因。

您可以使用--System.Environment.MachineName获取Windows计算机名称

是的,要求你继续请求和缓存计算机非常低效,这是一个坏主意。

我会在后台运行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(); 

然后只需解析结果值。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM