Jak mogę uzyskać adres IP klienta zdalnego pulpitu? Jak mogę uruchomić polecenie powłoki po połączeniu RDP?

23

Czy istnieje sposób ustalenia adresu IP klienta pulpitu zdalnego za pomocą programu PowerShell (lub innej metody) na serwerze? (Używam Windows Server 2008 R2 x64)

EDYCJA: Uważam, że mogę grep stdout netstat, aby pobrać te informacje, co jest bardzo wykonalne, więc jak mogę uruchomić skrypt / polecenie powłoki, gdy klient się łączy?

Chaz
źródło
W jakim kontekście? Czy ten skrypt będzie uruchamiany jako użytkownik, administrator lub ktoś inny?
Zoredache,
Czy działa to w sieci LAN, WAN lub Internecie?
Zapto,
Pozostawiam protokół RDP otwarty dla Internetu, więc wiem, które adresy IP są moje, a które nie. Nie jestem pewien, pod kogo to będzie, chyba wszystko, co pozwala mi odzyskać te informacje.
chaz
Przeprowadziłem pewne wyszukiwanie, a ten post ( serverfault.com/questions/314386/listing-users-using-rdp ) wydaje się być bardzo zbliżony do tego, czego potrzebujesz. Po prostu nie jestem wystarczająco biegły w Powershell, aby celować / wracać i IP
Skawt
Ten typ zdarzenia i dostarczane przez niego informacje nadal nie dają mi zdalnego adresu IP, najbliższą rzeczą, jaką daje mi w dzienniku zdarzeń, jest „KOMPUTER”
chaz

Odpowiedzi:

21

W wierszu polecenia można uruchomić następujące polecenie, aby uzyskać listę zdalnych adresów IP podłączonych do protokołu RDP (port 3389).

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

Jestem pewien, że można to zrobić w skrypcie PowerShell (lub nawet zwykłym starym pliku wsadowym). Mogę podać jutro przykład, jeśli jesteś zainteresowany.

John Homer
źródło
Użyłem tego wcześniej, bo działa bardzo skutecznie, teraz muszę tylko znaleźć sposób na uruchomienie skryptu, gdy łączy się klient RDP.
chaz
12

W porządku, zorientowałem się, że task scheduleraplikację dostarczaną z systemem Windows można skonfigurować w taki sposób, aby można było uruchomić skrypt wsadowy uruchamiany podczas generowania zdarzenia w dzienniku zdarzeń. Za pomocą interfejsu użytkownika wybierasz typ zdarzenia, źródło zdarzenia i identyfikator zdarzenia, w którym to przypadku użyłem 4264 (i tak przechwytuje wszystkie typy logowania). Tutaj użyłem prostego skryptu wsadowego:

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

Znalazłem też ten bardzo przydatny przykład, jak subskrybować / słuchać zapisów zdarzeń w .NET: http://msdn.microsoft.com/en-us/library/bb552514(v=vs.90).aspx I ' zamiast tego użyję tego do zapisania pewnych zdarzeń w bazie danych w celu zbadania przez Internet.

Jedyną wadą tego rozwiązania jest to, że jeśli masz włączone Usługi pulpitu zdalnego i podłączonych jest wiele osób, nie można ich rozróżnić w danych wyjściowych netstat.

Chaz
źródło
1
To właściwie dość eleganckie rozwiązanie, gdy wszystko się składa. Nie wiedziałem też o rozszerzonej funkcjonalności harmonogramu zadań. Dobra robota!
John Homer
w przypadku starszych wersji harmonogramu możesz to zrobić za pomocą pliku wsadowego i skryptu evtmon.vbs,
Scott R
5

Jeśli nie musisz go skryptować, możesz sprawdzić w dzienniku zdarzeń zabezpieczeń identyfikator zdarzenia 4624. Pojawi się wiersz:

Źródłowy adres sieciowy: 192.168.xxx.xxx

Tamerz
źródło
4264 służy do logowania i jest użyteczny do rejestrowania logowania typu aktywnego kontrolera domeny. Potrzebuję aktualnego adresu IP klienta RDP Connect, którego zalogowane konto jest nieistotne i uważam, że jest możliwe do odzyskania poprzez stdout grepping / piping netstat. Mam na myśli, że gdyby istniał sposób na uruchomienie komendy powłoki / skryptu / programu na połączeniu RDP, byłoby świetnie.
chaz
Właściwie 4624 (literówka) jest poprawny, istnieje wiele typów logowania wyświetlanych dla tego identyfikatora zdarzenia.
chaz 1'12