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