如何从javascript获取终端服务客户端机器名?

时间:2008-10-10 19:58:04

标签: internet-explorer activex terminal-services

是否可以从运行Internet Explorer的javascript获取计算机名称,IP或MAC地址(基本上是客户端网络信息)?

我发现以下代码似乎可以实现此目的:

function Button1_onclick() {
  var locator = new ActiveXObject("WbemScripting.SWbemLocator");
  var service = locator.ConnectServer(".");
  var properties = service.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration");
  var e = new Enumerator (properties);
  document.write("<table border=1>");
  dispHeading();
  for (;!e.atEnd();e.moveNext ())
  {
        var p = e.item ();
        document.write("<tr>");
        document.write("<td>" + p.Caption + "</td>");
        document.write("<td>" + p.IPFilterSecurityEnabled + "</td>");
        document.write("<td>" + p.IPPortSecurityEnabled + "</td>");
        document.write("<td>" + p.IPXAddress + "</td>");
        document.write("<td>" + p.IPXEnabled + "</td>");
        document.write("<td>" + p.IPXNetworkNumber + "</td>");
        document.write("<td>" + p.MACAddress + "</td>");
        document.write("<td>" + p.WINSPrimaryServer + "</td>");
        document.write("<td>" + p.WINSSecondaryServer + "</td>");
        document.write("</tr>");
  }
  document.write("</table>");

}

所以它正在使用一个似乎与操作系统一起安装的ActiveX对象来完成此任务。在终端服务会话中可以做类似的事吗?获取终端服务客户端网络信息? (不是终端服务器网络信息,这是上述代码在从终端服务会话运行时将执行的操作)。

我想也许还有另一个Active X对象可以实现这个目标吗?

2 个答案:

答案 0 :(得分:1)

基本上,有两种方法可以抓住想到的客户名称/地址:

  • 使用MFCOM,即MetaFrameSession对象。
  • 使用WMI,MetaFrame_ICA_Client中的root\Citrix类看起来很有希望。

这两种解决方案的市长缺点是,它们需要的用户权限比您愿意提供的更多。根据我的阅读,Citrix中至少需要“帐户视图”权限,但我现在无法对其进行测试。我无法以普通用户的身份工作。

为了给你一个想法,使用MFCOM访问信息看起来像这样:

var MetaFrameSessionObject = 6;

var oShell   = new ActiveXObject("WScript.Shell");
var oSession = new ActiveXObject("MetaFrameCOM.MetaFrameSession");

oSession.Initialize(
  MetaFrameSessionObject, 
  oShell.ExpandEnvironmentStrings("%COMPUTERNAME%"), 
  oShell.ExpandEnvironmentStrings("%SESSIONNAME%"), 
  -1
);

alert(oSession.ClientAddress);

答案 1 :(得分:0)

如果用户登录到终端服务器并在该TS会话中访问Internet Explorer中的页面,则Internet Explorer(以及它实例化的任何ActiveX控件)正在终端服务器硬件上运行,而不是客户端硬件。

从这个角度来看,客户端硬件上运行的唯一代码是终端服务客户端软件。要检索有关终端服务客户端硬件/网络/等的网络信息,您必须在客户端硬件上运行代码。