Làm cách nào tôi có thể nhận địa chỉ IP của máy khách máy tính từ xa? Và làm cách nào tôi có thể kích hoạt lệnh shell khi kết nối RDP?


23

Có cách nào để xác định địa chỉ IP của máy khách máy tính từ xa bằng PowerShell (hoặc một số phương pháp khác) trên máy chủ không? (Windows Server 2008 R2 x64 là những gì tôi đang sử dụng)

EDIT: Tôi thấy rằng tôi có thể gdout ststout của netstat để lấy thông tin này rất khả thi, vậy làm cách nào tôi có thể kích hoạt tập lệnh / lệnh shell khi máy khách kết nối?


Trong bối cảnh nào? Tập lệnh này sẽ được chạy với tư cách là người dùng, quản trị viên hay người khác?
Zoredache

Đây có phải là trong một mạng LAN, WAN hoặc internet?
Chuyển sang

Tôi để RDP mở cho internet, vì vậy tôi biết IP nào là của tôi và cái gì không. Tôi không chắc nó sẽ chạy theo ai, tôi đoán bất cứ điều gì cho phép tôi lấy thông tin đó.
chaz

Tôi đã thực hiện một số tìm kiếm và bài đăng này ( serverfault.com/questions/314386/listing-users-USE-rdp ) có vẻ rất gần với những gì bạn cần. Tôi chỉ không đủ thành thạo Powershell để thực hiện mục tiêu / trả lại và IP
Skawt

Loại sự kiện đó và thông tin mà nó cung cấp vẫn không cung cấp cho tôi IP từ xa, thứ gần nhất mà nó cung cấp cho tôi trong nhật ký sự kiện là 'MÁY TÍNH'
chaz

Câu trả lời:


21

Từ một dấu nhắc lệnh, bạn có thể chạy lệnh sau để có danh sách các IP từ xa được kết nối với RDP (cổng 3389).

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

Tôi chắc chắn điều này có thể được viết theo kịch bản trong powershell (hoặc thậm chí chỉ là một tệp bó cũ đơn giản). Tôi có thể cung cấp một ví dụ vào ngày mai nếu bạn quan tâm.


Tôi đã sử dụng điều này trước khi nó hoạt động rất hiệu quả, bây giờ tôi chỉ cần tìm cách kích hoạt tập lệnh khi máy khách RDP kết nối.
chaz

12

Được rồi, tôi nhận ra rằng task schedulerứng dụng đi kèm với windows có thể định cấu hình để tôi có thể chạy tập lệnh bó, được kích hoạt khi một sự kiện trong nhật ký sự kiện được tạo. Thông qua giao diện người dùng, bạn chọn loại sự kiện, nguồn sự kiện và ID sự kiện, trong trường hợp đó tôi đã sử dụng 4264 (và có là bắt tất cả các loại đăng nhập). Ở đây tôi đã sử dụng một tập lệnh bó đơn giản thay thế:

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

Ngoài ra, tôi đã tìm thấy một ví dụ siêu hữu ích này về cách đăng ký / nghe sự kiện viết bằng .NET: http://msdn.microsoft.com/en-us/l Library / bb552514 (v = vs.90) .aspx I ' Thay vào đó, tôi sẽ sử dụng nó để viết một số sự kiện vào cơ sở dữ liệu để kiểm tra dựa trên web.

Hạn chế duy nhất của giải pháp này là nếu bạn đã bật Dịch vụ Máy tính Từ xa và nhiều người được kết nối, bạn không thể phân biệt giữa họ trong đầu ra netstat.


1
Đó thực sự là một giải pháp tao nhã khi bạn kết hợp tất cả lại. Tôi cũng không nhận thức được chức năng lập lịch tác vụ nâng cao. Lam tôt lăm!
John Homer

đối với trình lập lịch trình phiên bản cũ hơn, bạn có thể thực hiện với tệp bó và tập lệnh evtmon.vbs
Scott R

5

Nếu bạn không cần phải viết kịch bản, bạn có thể xem nhật ký sự kiện Bảo mật cho ID sự kiện 4624. Sẽ có một dòng:

Địa chỉ mạng nguồn: 192.168.xxx.xxx


4264 là để đăng nhập và rất hữu ích để ghi nhật ký loại bộ điều khiển miền hoạt động. Tôi cần IP hiện tại của ứng dụng khách RDP kết nối, tài khoản đã đăng nhập không liên quan và tôi tin rằng có thể truy xuất được thông qua thiết bị xuất chuẩn / đường ống của netstat. Ý tôi là ngay bây giờ nếu có một cách để kích hoạt việc thực thi lệnh shell / script / chương trình trên kết nối RDP, điều đó thật tuyệt.
chaz

Trên thực tế 4624 (lỗi đánh máy) là chính xác, có nhiều loại đăng nhập hiển thị trên ID sự kiện đó.
chaz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.