Получить имя хоста клиентского компьютера RDP
У меня есть вопрос, который, я уверен, имеет простое решение, но он все время ускользает от меня.
На рисунке изображен сервер, которым пользуются несколько человек.
Все они используют одну и ту же учетную запись для входа в систему.
Единственный способ разграничить сессии - по имени хоста или IP.
Итак - Как посмотреть, на удаленном компьютере, имя хоста подключенного клиента?
Например, я RDP в сервер 256.12.13.1
с моего IP 256.12.13.7
,
Есть ли команда, которую я мог бы запустить на сервере в этом удаленном сеансе, который будет выводить 256.12.13.7
?
Я спрашиваю, потому что было бы хорошо, если бы эта команда выводила 256.12.13.9
когда человек подключается с этого другого IP.
Так что я могу поместить его в автозагрузку, и всякий раз, когда кто-то подключает скрипт, он запускается
gethostname >> rdplog.txt<br>
date /t >> rdplog.txt <br>
time /t >> rdplog.txt
Так что это может в основном равняться очень простому логину входа.
4 ответа
Вы можете написать пакетный скрипт как:
netstat -na | find "3389" | find "ESTABLISHED" >> C:\path_to_rdplog.txt
date /T >> C:\path_to_rdplog.txt
time /T >> C:\path_to_rdplog.txt
echo. >> C:\path_to_rdplog.txt
echo ----------- >> C:\path_to_rdplog.txt
echo. >> C:\path_to_rdplog.txt
Вам просто нужно убедиться, что входящий пользователь имеет права на запись в C:\path_to_rdplog.txt
Очень старая тема, но все равно. Мы использовали для проверки переменной среды CLIENTNAME, которая установлена в сеансе RDP. У нас было старое приложение, которое не могло легко использовать Windows API или Powershell, и проверило эту переменную среды. Эта переменная содержит имя хоста клиентского компьютера, устанавливающего соединение RDP.
Новый ответ Powershell на довольно старый вопрос
(Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational';ID=1149;StartTime=(Get-Date).AddDays(-31);} | ForEach-Object {[PSCustomObject] @{User=$_.Properties[0].Value;ClientName=$_.Properties[1].Value;IPAddress=$_.Properties[2].Value; TimeCreated=$_.TimeCreated;}} | Where-Object User -eq $env:USERNAME | Sort-Object -Property TimeCreated -Descending | Select-Object -First 1).ClientName
Этот фрагмент собирает все события из журнала событий служб терминалов за последний 31 день и создает пользовательские объекты с именем пользователя, именем клиента, IP-адресом и меткой времени входа в систему. Затем он фильтрует настраиваемые объекты по имени текущего пользователя, затем сортирует настраиваемые объекты в порядке убывания даты входа в систему и, наконец, выбирает самые верхние (т. е. самую последнюю запись в журнале событий) и извлекает имя клиента из настраиваемого объекта. Я буквально прохожу по коду и последовательно объясняю каждый фрагмент кода — на самом деле в коде не так уж и много.
Важно отметить, что в журнале событий есть запись об успешных RDP-соединениях с интересующими нас данными. Анализ, фильтрация, сортировка и извлечение соответствующих данных для превращения их в полезную информацию — вот суть игры!
Microsoft MVP Шей Леви сделал PSTerminalServices
Модуль PowerShell с командлетами служб терминалов.
Его нужно установить, его нет по умолчанию.
Я еще не использовал это, я только нашел это.