2012-10-15 26 views
5

Tôi muốn lấy danh sách các dịch vụ cửa sổ và các cổng của chúng trong C#. Tôi có thể nhận tất cả các dịch vụ cửa sổ bằng cách sử dụng ServiceController nhưng tôi không thể nhận được các cổng của các dịch vụ này.Làm cách nào để mở các cổng do Dịch vụ Windows mở?

+2

làm bạn có nghĩa là các cổng TCP/UDP? –

+0

Có, Cổng TCP/UDP –

Trả lời

0

Câu trả lời cho các câu hỏi tương tự luôn đề xuất sử dụng Iphlpapi nhưng không rõ ràng bạn sẽ nhận được RpcSs (tên dịch vụ) trong bản sao netstat -ban này như thế nào: TCP 0.0.0.0:135 0.0.0.0:0 NGHE RpcSs [svchost.exe]

Hoặc Schedule ở đây:

TCP [::]: 49.154 [::]: 0 NGHE Schedule [svchost.exe]

tôi nhìn cho giải pháp này và không vây d bất cứ điều gì (-easy). Netstat gọi vào một số chức năng không có giấy tờ trong Iphlpapi nhưng không rõ liệu nó có tên dịch vụ từ Iphlpapi hay bằng cách nào đó sử dụng pid từ Iphlpapi và sử dụng cái gì khác để lấy tên dịch vụ. Tôi không thực sự bị cám dỗ dành thời gian với một trình gỡ lỗi để trả lời câu hỏi này vì ..:

Tuy nhiên, lý tưởng nhất là không muốn sử dụng cách tiếp cận kiểu bỏ phiếu từ C#. Sẽ thích hợp hơn khi sử dụng ETW. Tôi nghĩ rằng việc thiếu các ví dụ về việc sử dụng nó từ C# là vì có một số chi phí để bắt đầu với nó và các ví dụ xung quanh có thể là cụ thể đối với các kiểu truy tìm/theo dõi khác.

Tóm tắt: Nếu bạn thiếu thời gian để thực hiện việc này, chỉ cần lưu đầu ra netstat có vẻ là "giải pháp". Lý tưởng nhất là tôi sẽ thích tìm một đơn giản để sử dụng C# ví dụ để theo dõi bất kỳ kết nối mạng và tìm ra những dịch vụ hoặc quá trình xử lý/khởi xướng chúng cùng với những thay đổi tường lửa có thể. Tôi tin rằng làm cả hai là có thể với ETW nhưng đối với nhu cầu hiện tại của tôi khó khăn của nó để biện minh cho số lượng không rõ thời gian cần thiết để có được rằng làm việc. Tôi có ít nhất đã tìm ra rằng "nhà cung cấp truy vấn logman" liệt kê các nhà cung cấp, sau đó bạn cần phải làm điều gì đó để cho phép nhà cung cấp (và trình điều khiển hỗ trợ truy tìm trong một số trường hợp như chụp gói). Có một dự án C# để sử dụng ETW xung quanh. Nhưng nó không phải là rõ ràng bao nhiêu nỗ lực nó sẽ được để tái sản xuất netstat với ETW.

1

Sau rất nhiều tìm kiếm xung quanh, tôi thấy rằng không có giấy tờ "OwningModuleInfo" trong cấu trúc MIB_TCPROW_OWNER_MODULE.

Sau đó tìm kiếm mà tôi tìm thấy nhận xét này:

Weird issue regarding GetOwnerModuleFromTcpEntry when targeting x64

"Tôi đã đi đến kết luận rằng mục đầu tiên trong mảng là chỉ số của dịch vụ trong danh sách các dịch vụ đang chạy, .. "

Vì vậy, câu trả lời cho câu hỏi sau đó sẽ là sử dụng để nhận thông tin tên mà netstat -b hiển thị (tên dịch vụ và địa chỉ + cổng), lọc cho dịch vụ bạn muốn. Tôi đã tìm thấy thư viện https://github.com/Loriowar/IpHlpApidotnet lib này có nhiều mã liên quan đã được thiết lập ngoại trừ tính năng này.

liên kết hữu ích khác:

Marshalling Struct with Array of Struct Member

https://msdn.microsoft.com/en-us/library/windows/desktop/aa366911(v=vs.85).aspx

Các vấn đề liên quan