#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. То есть вы хотите сказать, что процесс терминального сервера не имеет возможности узнать, от имени какого клиента он запускает код? Это кажется неправильным, не так ли?