确定客户端的计算机名称

时间:2009-09-18 13:36:00

标签: c# asp.net-mvc

我正在构建一个内部网站点,它将根据计算机名称显示不同的列表,因为不同的计算机位于不同的区域,是否有办法(在控制器或模型中)确定客户端的计算机名称?

我尝试过system.environment.machinename,但只返回服务器的名称,还有其他想法吗?

7 个答案:

答案 0 :(得分:48)

我使用以下方法开始工作:

string IP = Request.UserHostName;
string compName = CompNameHelper.DetermineCompName(IP);
来自compnamehelper的

代码:

public static string DetermineCompName(string IP)
{
    IPAddress myIP = IPAddress.Parse(IP);
    IPHostEntry GetIPHost = Dns.GetHostEntry(myIP);
    List<string> compName = GetIPHost.HostName.ToString().Split('.').ToList();
    return compName.First();
}

答案 1 :(得分:4)

VB中的

代码:

Dim myIP As IPAddress = IPAddress.Parse(Request.UserHostName)
    Dim GetIPHost As IPHostEntry = Dns.GetHostEntry(myIP)
    Dim compName As List(Of String) = GetIPHost.HostName.ToString.Split("").ToList

    return(compName.First)

答案 2 :(得分:3)

没有。客户端的计算机名称在服务器上无法以任何方式提供。这是http请求 - 响应的本质。您只能拥有其IP地址。

解决方法可能是从Flash / Silverlight(我怀疑JavaScript)检索客户端上的计算机并将其放入服务器上随每个请求提供的cookie中。但是这种方法存在一大堆问题。

答案 3 :(得分:1)

我认为您最好使用其中一种方法将用户绑定到某个位置:

  • 用户自行选择其位置后设置的Cookie
  • 让用户登录该站点,以便您可以这样独特地跟踪它们
  • 通过IP地址记住用户

无法确保远程主机名是唯一的。由于代理,动态IP等原因,IP也会出现同样的问题,但我认为它会更可靠一些。此外,您可以通过IP地址进行地理定位。

答案 4 :(得分:1)

试试这个:

string name = Request.UserHostName;

答案 5 :(得分:0)

我知道检查客户端的唯一方法是通过Request对象上的ServerVariables集合(应该可用于MVC代码)。

有关详细信息,请参阅http://www.4guysfromrolla.com/webtech/092298-3.shtml。 REMOTE_HOST和REMOTE_ADDR看起来像候选人。

答案 6 :(得分:-2)

这是一个仅限IE的解决方案。它适用于IE8,具有多个安全警告。

<script type="text/javascript" language="javascript">
   var ax = new ActiveXObject("WScript.Network");
   document.write(ax.UserName + '<br />'); //logged in account name
   document.write(ax.ComputerName + '<br />'); //Windows PC name
</script>