[英]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.