我有应用程序想要获取用户机器名称,在这里我可以检索,它在localhost中工作正常.
string clientPCName;
string[] computer_name = System.Net.Dns.GetHostEntry(
Request.ServerVariables["remote_host"]).HostName.Split(new Char[] { '.' });
clientPCName = computer_name[0].ToString();
Run Code Online (Sandbox Code Playgroud)
在本地,它返回我的计算机名称.
但是在服务器上我得到的结果如下:0x57364794
任何解决方案?
Ahm*_*med 14
试试这个对我有用
string clientMachineName;
clientMachineName = (Dns.GetHostEntry(Request.ServerVariables["remote_addr"]).HostName);
Response.Write(clientMachineName);
Run Code Online (Sandbox Code Playgroud)
机器名称仅是本地网络的概念,也是本地AD网络/森林的概念.一旦您在互联网上公开您的网站机器名称不再有意义,而是获得DNS名称.
因此,例如,在我的工作网络上,我的笔记本电脑名称解析为bdorrans01.redmond.contoso.com.但如果我从家里浏览一个网站,我当前的IP地址解析为c-98-203-143-14.hsd1.wa.comcast.net.
您正在使用FQDN并在第一段/完全停止后丢弃所有内容.这适用于AD环境(有点),你的代码会在内部看到bdorrans01,但它会在外部看到c-98-203-143-14.
即使在多森林AD内部,如果您的网站托管在另一个森林中也是错误的,例如,如果您的网站位于example.europe.contoso.com上,您的代码将获得机器名称bdorrans01,但我的机器不会在同一个林中,如果你试图ping它,或者映射到网络驱动器,它将无法找到,因为你会在europe.contoso.com中寻找bdorrans01,而不是redmond.contoso. com实际上是哪里.
此外,您的代码假定解析一个IP地址将产生一个完全合格的域名,在很多情况下都不是这样,您可以只返回一个IP地址,所以您可能会看到1.2.3.4并且您的代码会给出一个机器名称1.更糟糕的是它对IPv6地址没有任何作用,因为它们使用冒号分隔,2001:db8:85a3:8d3:1319:8a2e:370:7348
所以你的前提是不正确的 - 你需要找到一种不同的方式去做你想做的事情.为什么你认为你还需要机器名?