Как я могу получить IP-адрес клиента удаленного рабочего стола? И как я могу запустить команду оболочки при подключении RDP?

23

Есть ли способ определить IP-адрес клиента удаленного рабочего стола, используя PowerShell (или другой метод) на сервере? (Windows Server 2008 R2 x64 - это то, что я использую)

РЕДАКТИРОВАТЬ: я нахожу, что я могу grep netstat stdout для получения этой информации, которая является очень выполнимой, так как я могу вызвать команду script / shell при подключении клиента?

Чез
источник
В каком контексте? Будет ли этот скрипт запускаться от имени пользователя, администратора или кого-то еще?
Зоредаче
Это внутри локальной сети, глобальной сети или интернета?
Запто
Я оставляю RDP открытым для интернета, так что я знаю, какие у меня IP, а какие нет. Я не уверен, с кем это будет работать, я думаю, что позволит мне получить эту информацию.
Chaz
Я провел небольшой поиск, и этот пост ( serverfault.com/questions/314386/listing-users-using-rdp ) выглядит очень близко к тому, что вам нужно. Я просто недостаточно опытен в Powershell, чтобы сделать его целью / возвращением и IP
Skawt
Этот тип события и информация, которую он предоставляет, по-прежнему не дает мне удаленный IP-адрес. Самая близкая вещь, которую он дает мне в журнале событий, - это «КОМПЬЮТЕР»
chaz

Ответы:

21

В командной строке вы можете выполнить следующую команду, чтобы получить список удаленных IP-адресов, подключенных к RDP (порт 3389).

netstat -n | find ":3389" | find "ESTABLISHED"

Я уверен, что это может быть написано в PowerShell (или даже просто старый пакетный файл). Я могу привести пример завтра, если вам интересно.

Джон Гомер
источник
Я использовал его до того, как он работает очень эффективно, теперь мне просто нужно найти способ запуска сценария при подключении RDP-клиента.
Chaz
12

Хорошо, я понял, что task schedulerприложение, которое идет с окнами, настраивается так, чтобы я мог запустить пакетный скрипт, запускаемый при создании события в журнале событий. Через пользовательский интерфейс вы выбираете тип события, источник события и идентификатор события, в этом случае я использовал 4264 (и да, это захватывает все типы входа в систему). Здесь я использовал простой пакетный скрипт вместо:

SET logfile="rdp_ip_logs.log"
date /T>>%logfile%
time /T>>%logfile%
netstat -n | find ":3389" | find "ESTABLISHED">>%logfile%

Также я нашел этот очень полезный пример того, как подписаться / прослушать записи событий в .NET: http://msdn.microsoft.com/en-us/library/bb552514(v=vs.90).aspx I ' Я собираюсь использовать это вместо того, чтобы записывать определенные события в базу данных для веб-экспертизы.

Единственный недостаток этого решения заключается в том, что если у вас включены службы удаленных рабочих столов и подключено несколько человек, вы не сможете различить их в выводе netstat.

Чез
источник
1
Это на самом деле довольно элегантное решение, когда вы все это вместе. Я не знал о расширенных функциях планировщика задач. Отличная работа!
Джон Гомер
для более ранних версий планировщика вы можете сделать это с помощью пакетного файла и сценария evtmon.vbs,
Скотт Р.
5

Если вам не нужно его писать, вы можете посмотреть в журнале событий безопасности идентификатор события 4624. Там будет строка:

Адрес исходной сети: 192.168.xxx.xxx

Tamerz
источник
4264 предназначен для входа в систему и полезен для регистрации активных входов в систему контроллера домена. Мне нужен текущий IP-адрес подключенного RDP-клиента, учетная запись которого не имеет значения, и я считаю, что его можно извлечь с помощью стандартного вывода netstat. Я имею в виду прямо сейчас, если бы был способ запустить команду-команду / скрипт / программу-оболочку в RDP-соединении, это было бы здорово.
Chaz
На самом деле 4624 (опечатка) является правильным, есть несколько типов входа, которые отображаются на этом событии ID.
Chaz