Як я можу отримати IP-адресу клієнта віддаленого робочого столу? І як я можу запустити команду оболонки під час з'єднання RDP?


23

Чи є спосіб визначити IP-адресу віддаленого клієнта на робочому столі за допомогою PowerShell (або якогось іншого методу) на сервері? (Я використовую Windows Server 2008 R2 x64)

EDIT: Я знаходжу, що я можу зірвати stdout netstat, щоб отримати цю інформацію, яка дуже здійсненна, тож як я можу запустити скрипт / команду shell, коли клієнт підключається?


У якому контексті? Чи буде цей сценарій виконуватись як користувач, адміністратор чи хтось інший?
Зоредаче

Це все в мережі LAN, WAN або Інтернеті?
Заптовий

Я залишаю RDP відкритим для Інтернету, тому я знаю, що IP-адреси є моїми, а які ні. Я не впевнений, під ким він буде працювати, я думаю, що дозволяє мені отримати цю інформацію.
час

Я здійснив пошук, і ця публікація ( serverfault.com/questions/314386/listing-users-using-rdp ) виглядає дуже близькою до того, що вам потрібно. Я просто недостатньо досвідчений в Powershell, щоб зробити його цільовим / повернутим і IP
Скавт

Цей тип події та інформація, яку він надає, все ще не дає мені віддаленої IP-адреси. Найближче, що вона дає мені в журналі подій, - це "КОМП'ЮТЕР"
chaz

Відповіді:


21

З командного рядка ви можете запустити наступну команду, щоб отримати список віддалених IP-адрес, підключених до RDP (порт 3389).

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

Я впевнений, що це може бути написано в shellhell (або навіть просто звичайний старий пакетний файл). Я можу навести приклад завтра, якщо вам цікаво.


Я використовував це раніше, ніж це працює дуже ефективно, тепер мені просто потрібно знайти спосіб запустити сценарій, коли підключиться клієнт RDP.
час

12

Гаразд, я зрозумів, що task schedulerпрограма, що постачається з Windows, налаштовується на те, де я можу запустити пакетний сценарій, що спрацьовує при створенні події в журналі подій. Через користувальницький інтерфейс ви вибираєте тип події, джерело події та ідентифікатор події; в такому випадку я використовував 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,
Скотт R

5

Якщо вам не потрібно його сценарію, ви можете подивитися в журналі подій безпеки для ідентифікатора події 4624. Буде рядок:

Адреса джерела мережі: 192.168.xxx.xxx


4264 призначений для входу в систему та корисний для входу в систему активних контролерів домену. Мені потрібна поточна IP-адреса клієнта RDP для підключення, який увійшов до облікового запису не має значення, і я вважаю, що це можливо витягнути за допомогою стискання / трубопроводу виводу netstat. Я маю на увазі прямо зараз, якщо був би спосіб запустити виконання оболонки-команди / скрипта / програми на з'єднанні RDP, це було б чудово.
час

Насправді 4624 (помилка друку) правильна, на цьому ідентифікаторі події відображається кілька типів входу.
час
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.