Как вы можете получить имя клиентского компьютера службы терминалов из javascript?

#internet-explorer #activex #terminal-services

Вопрос:

Можно ли получить имя компьютера, IP-адрес или MAC-адрес (в основном информацию о клиентской сети) из javascript, работающего в Internet Explorer?

Я нашел следующий код, который, похоже, выполняет эту задачу:

 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, который, по-видимому, установлен вместе с ОС. Возможно ли сделать что-то подобное из сеанса обслуживания терминала? Чтобы получить информацию о сети клиента службы терминалов? (Не информация о сети терминального сервера, что делает приведенный выше код при запуске из сеанса службы терминалов).

Я думаю, может быть, для этого есть другой активный объект X, доступный для этого?

Ответ №1:

В принципе, есть две возможности узнать имя/адрес клиента, которые приходят на ум:

  • Используйте MFCOM, а именно MetaFrameSession объект.
  • Используйте WMI, MetaFrame_ICA_Client класс в rootCitrix выглядит многообещающе.

Недостатком обоих решений является то, что они требуют большего количества разрешений пользователя, чем вы, возможно, захотите предоставить. Из того, что я прочитал, в 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);
 

Ответ №2:

Если пользователь вошел на сервер терминалов и посещает страницу в Internet Explorer в этом сеансе TS, то Internet Explorer (и любые элементы управления ActiveX, которые он создает) выполняются на оборудовании сервера терминалов, а не на клиентском оборудовании.

С этой точки зрения единственным кодом, выполняемым на клиентском оборудовании, является клиентское программное обеспечение служб терминалов. Чтобы получить сетевую информацию о клиентском оборудовании служб терминалов/сети/и т.д., вам придется запустить код на клиентском оборудовании.

Комментарии:

1. То есть вы хотите сказать, что процесс терминального сервера не имеет возможности узнать, от имени какого клиента он запускает код? Это кажется неправильным, не так ли?