1

是否可以从运行 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 对象可以用来完成这个?

4

2 回答 2

1

基本上,有两种可能性可以获取想到的客户名称/地址:

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

Mayor drawback of both solutions is, that they require more user permissions than you might be willing to give. From what I read, at least "Account View" permissions are required within Citrix, but I have no way to test it right now. I could not get either to work as a normal user.

To give you an idea, accessing the info with MFCOM would look something like this:

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);
于 2008-10-12T11:08:09.227 回答
0

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

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

于 2008-10-10T21:30:05.180 回答