Bagaimana saya bisa mendapatkan alamat IP klien desktop jarak jauh? Dan bagaimana saya bisa memicu perintah shell pada koneksi RDP?

23

Apakah ada cara untuk menentukan alamat IP klien desktop jarak jauh menggunakan PowerShell (atau metode lain) di server? (Windows Server 2008 R2 x64 adalah yang saya gunakan)

EDIT: Saya menemukan bahwa saya dapat menangkap stdout netstat untuk mengambil informasi ini yang sangat layak, jadi bagaimana saya bisa memicu skrip / perintah shell ketika klien terhubung?

chaz
sumber
Dalam konteks apa? Apakah skrip ini dijalankan sebagai pengguna, administrator, atau orang lain?
Zoredache
Apakah ini dalam LAN, WAN, atau internet?
Zapto
Saya membiarkan RDP terbuka untuk internet, jadi saya tahu IP mana yang menjadi milik saya dan yang bukan. Saya tidak yakin siapa yang menjalankannya di bawah, saya kira apa pun memungkinkan saya mengambil informasi itu.
chaz
Saya melakukan pencarian, dan posting ini ( serverfault.com/questions/314386/listing-users-using-rdp ) terlihat sangat dekat dengan apa yang Anda butuhkan. Saya tidak cukup mahir di Powershell untuk menjadikannya target / return dan IP
Skawt
Jenis acara itu dan informasi yang diberikannya masih belum memberi saya IP jarak jauh, hal terdekat yang diberikannya pada log acara adalah 'KOMPUTER'
chaz

Jawaban:

21

Dari prompt perintah, Anda dapat menjalankan perintah berikut untuk mendapatkan daftar IP jarak jauh yang terhubung ke RDP (port 3389).

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

Saya yakin ini dapat ditulis dalam PowerShell (atau bahkan hanya file batch lama). Saya dapat memberikan contoh besok jika Anda tertarik.

John Homer
sumber
Saya telah menggunakan ini sebelum ini bekerja sangat efektif, sekarang saya hanya perlu menemukan cara untuk memicu skrip ketika klien RDP terhubung.
chaz
12

Baiklah saya tahu bahwa task scheduleraplikasi yang datang dengan windows dapat dikonfigurasi di mana saya dapat menjalankan skrip batch, dipicu ketika suatu peristiwa dalam log peristiwa dihasilkan. Melalui UI Anda memilih jenis acara, sumber acara dan ID peristiwa, dalam hal ini saya menggunakan 4264 (dan ya adalah menangkap semua jenis masuk). Di sini saya menggunakan skrip kumpulan sederhana sebagai gantinya:

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

Saya juga menemukan contoh super berguna tentang cara berlangganan / mendengarkan acara menulis di .NET: http://msdn.microsoft.com/en-us/library/bb552514(v=vs.90).aspx I ' Saya akan berakhir menggunakan itu sebagai gantinya untuk menulis acara tertentu ke database untuk pemeriksaan berbasis web.

Satu-satunya kelemahan dari solusi ini adalah bahwa jika Anda memiliki Remote Desktop Services diaktifkan dan banyak orang terhubung, Anda tidak dapat membedakan di antara mereka dalam output netstat.

chaz
sumber
1
Itu sebenarnya solusi yang cukup elegan ketika Anda menggabungkan semuanya. Saya juga tidak mengetahui fungsionalitas penjadwal tugas yang ditingkatkan. Kerja bagus!
John Homer
untuk penjadwal versi yang lebih lama Anda dapat melakukannya dengan file batch dan skrip evtmon.vbs
Scott R
5

Jika Anda tidak perlu membuat skrip, Anda dapat melihat di log peristiwa keamanan untuk ID 4624 acara. Akan ada baris:

Sumber Jaringan Alamat: 192.168.xxx.xxx

Tamerz
sumber
4264 untuk login dan berguna untuk masuk log tipe pengontrol domain aktif. Saya memerlukan IP saat ini dari klien RDP yang terhubung, yang akunnya login tidak relevan dan saya percaya layak untuk didapatkan melalui grepping / piping ststout netstat. Maksud saya sekarang jika ada cara untuk memicu eksekusi shell-command / script / program pada koneksi RDP, itu akan bagus.
chaz
Sebenarnya 4624 (salah ketik) sudah benar, ada beberapa tipe masuk yang muncul di ID peristiwa itu.
chaz