Определить IP-адрес клиента RDP

1. Angealtor А (Angealtor) 10 09.03.16 11:32 Сейчас в теме
Просмотрел несколько тем на мисте:
http://www.forum.mista.ru/topic.php?id=524473
http://www.forum.mista.ru/topic.php?id=481072
Сейчас пользуюсь компонентой SendToLocalHost. Работает отлично, но хотелось решения без использования компонент, например, через vbs-скрипт. Кто-нибудь сталкивался с другими решениями такой задачи? Нужно тоже самое, что возвращает компонента SendToLocalHost и я так понимаю, что это значение одного из полей виндового класса WTSQuerySessionInformation.
Ответы
2. Xer shi (Xershi) 248 09.03.16 11:38 Сейчас в теме
(1) Angealtor, можно использовать компоненту работы с пауршел. У меня публикация есть. Или зачем вообще скрипт использовать? Чтобы заказчику не нужно было ставить компоненту? Тогда сохранить сценарий в макет и потом его запускать, что тоже самое, только программно работать сложнее.
3. Канат Джумадылов (Fox-trot) 52 09.03.16 11:42 Сейчас в теме
(2)
только программно работать сложнее
зависит от компетенции программиста
4. Angealtor А (Angealtor) 10 09.03.16 11:50 Сейчас в теме
Под vbs-скриптом имел в виду что-то в виде такого:

Функция getIPAddress() 
Попытка
 sc=Новый COMОбъект("MSScriptControl.ScriptControl"); 
 sc.language="VBscript"; 
 strFunc="function getIPAddress() 
| Set objShell = CreateObject (""WSCript.Shell"") 
| Set objWshScriptExec = objShell.Exec(""C:\GETTSCIP.exe"") 
| Set objStdOut = objWshScriptExec.StdOut 
| While Not objStdOut.AtEndOfStream 
|    strLine = objStdOut.ReadLine 
|    If InStr(strLine,""WTSClientAddress"") Then 
|      getIPaddress = Trim(Right(strLine, Len(strLine) - InStr(strLine,"":""))) 
|    End If 
| Wend 
|End Function";

sc.addCode(strFunc); 
Исключение Возврат("0") КонецПопытки; 

Возврат sc.run("getIPAddress"); 
КонецФункции
...Показать Скрыть


В этом примере тоже используется внешний файл. Но надеюсь на помощь в поиске решения именно такого плана.
5. Xer shi (Xershi) 248 09.03.16 11:53 Сейчас в теме
(4) Angealtor, т.е. вы хотите не использовать внешний файл и внешнюю компоненту?
6. Angealtor А (Angealtor) 10 09.03.16 12:01 Сейчас в теме
(5) Xershi, Да. Под "неиспользованием внешней компоненты" имел в виду, что не использовать что-то нестандартное, что нужно доустанавливать, а стандартные объекты и классы Windows.
7. Xer shi (Xershi) 248 09.03.16 12:25 Сейчас в теме
(6) Angealtor, тогда я вам уже ответил в (2). Хотя может есть какие-то методы через ком-объекты, это уже погуглите.
8. Канат Джумадылов (Fox-trot) 52 09.03.16 12:30 Сейчас в теме
если по-быстрому то мона так
1. netstat -n > list.txt
2. парсим list.txt на наличие локального ip и порта RDP
9. Канат Джумадылов (Fox-trot) 52 10.03.16 07:42 Сейчас в теме
(6) Angealtor, https://blogs.msdn.microsoft.com/alejacma/2008/03/04/how-to-get-the-logged-on-user-with-wmi-vbscript/
использован vbscript. там оч много чего понаписано, а если кратко , то
Function Get-LoggedOn ($Comp = $env:computername)
{
Get-WmiObject -computername $Comp -query `
"Sel ect * fr om Win32_LogonSession where logontype = 2 or logontype = 10" |
foreach {Get-WmiObject -computername $Comp -query `
"Associators of {Win32_LogonSession.LogonId=$($_.logonid)} Where AssocClass=Win32_LoggedOnUser Role=Dependent"}
}
10. Angealtor А (Angealtor) 10 10.03.16 15:14 Сейчас в теме
(9) Fox-trot, спасибо. Посмотрю, попробую разобраться.
11. Дмитрий Захаров (DWZ2) 11.03.16 06:39 Сейчас в теме
(8) Fox-trot,

А если пользователей несколько? Как мы узнАем, какой IP из них наш?
12. Тим К (nbv8608) 1 28.12.16 04:22 Сейчас в теме
У себя сделал так, может кому пригодится:

&НаКлиенте
Процедура Команда1(Команда)
	 	WshShell = Новый COMОбъект("WScript.Shell");
	WshSysEnv = WshShell.Environment("Process");
	ИмяКомпьютера = WshSysEnv.Item("CLIENTNAME"); 
	АдресКомпьютера = ПолучитьIpАдресПКПоИмениХоста(ИмяКомпьютера);
КонецПроцедуры

&НаКлиенте
Функция ПолучитьIpАдресПКПоИмениХоста(АдресХоста) Экспорт 
    
   Результат = "127.0.0.0";
    oLoc = Новый COMОбъект("WbemScripting.SWbemLocator");
    oSrv = oLoc.ConnectServer(0,"/root/cimv2");
    ePng = oSrv.ExecQuery("SEL ECT * FR OM Win32_PingStatus WHERE Address = """ + АдресХоста + """");
    Для Каждого СтатусХоста из ePng Цикл 
        Результат = СтатусХоста.ProtocolAddress;
    КонецЦикла;
    
    Возврат Результат;
    
КонецФункции
...Показать Скрыть
Оставьте свое сообщение