2009-03-10 18 views
11

Tôi muốn tìm hiểu quy trình nào đang sử dụng mạng của mình. Điều này là khá dễ dàng trong Linux, nhưng tôi stumped như thế nào để làm điều này trong Windows.Lập trình các thống kê mạng cho mỗi quá trình trên Windows?

Về bản chất, tôi muốn, đối với mỗi quy trình, để biết số byte đã đọc/ghi vào mạng trong một khoảng thời gian. Nếu tôi có thể biết địa chỉ IP/số cổng, v.v., điều đó thật tuyệt vời.

Mọi con trỏ? Windows Vista/Windows 2008 dường như có thể thực hiện điều này trong Resource Monitor. Họ làm nó như thế nào? Chi phí là gì?

Tôi muốn làm điều này trong mã của riêng mình, vì vậy các tiện ích (TCPView, PerfMon) không hữu ích đối với tôi. Tôi cũng muốn có các bộ đếm I/O đĩa và mạng riêng biệt, do đó các bộ đếm hiệu suất mặc định là không đủ.

Windows XP, 2003, Vista, 2008 và 7 được ưu tiên. Win32 hoặc COM OK.

+0

Từ các câu trả lời cho đến nay, có vẻ như mọi người nghĩ rằng bạn đang tìm kiếm một tiện ích để làm điều này với. Bạn đang tìm kiếm một công cụ hay tự mình tìm kiếm chương trình này trong ứng dụng của riêng mình? Tôi khuyên bạn nên làm rõ và cho chúng tôi biết môi trường lập trình bạn đang sử dụng nếu thích hợp, v.v. – Jay

Trả lời

1

Tôi đã viết giải pháp cho điều này.

Trình điều khiển bộ lọc TDI để thu thập số liệu thống kê, dịch vụ liên lạc với người lái xe và nhận số liệu thống kê mỗi giây một lần. Vì bộ lọc nằm ở lớp TDI, tôi biết ổ cắm nào thuộc về ứng dụng nào. Dịch vụ này là một máy chủ cho dữ liệu này, cung cấp cho nó thông qua bộ nhớ chia sẻ cho các máy khách bên thứ ba tùy ý thông qua một API mà tôi đã viết. Tôi đã viết một GUI và một máy khách dòng lệnh.

Bạn cũng có thể gửi hình dạng băng thông (trên mỗi giao diện và/hoặc ứng dụng và/hoặc ổ cắm) và xem dữ liệu truyền qua ổ cắm trong thời gian thực, trong cửa sổ.

+1

giải pháp của bạn ở đâu ???? – mustafabar

+0

Tôi biết! Tôi cũng tự hỏi tại sao tôi có "giải pháp được chấp nhận". –

+2

Tôi sẽ nói rằng bạn đã xem xét vấn đề này và quyết định rằng "viết trình điều khiển bộ lọc TDI tùy chỉnh" là giải pháp tốt nhất. Tôi giả định rằng nếu bạn có một số mã bạn có thể đã xuất bản, bạn sẽ làm được, và tôi không phải là một trong những người nói "hiển thị m3 c0deZ!". Chỉ cho tôi đúng hướng là rất nhiều, cảm ơn. –

1

Bạn sẽ ngạc nhiên trước những thứ bạn có thể nhận được từ Perfmon.

Làm nổi bật, nhấp chuột phải vào khu vực biểu đồ và chọn "Thêm bộ đếm ...". Lướt qua và xem liệu có bất cứ điều gì bạn muốn không.

Từ khi đọc những gì bạn đang hỏi, tôi sẽ chọn "Xử lý" làm đối tượng hiệu suất của mình và bắt đầu chọn thủ phạm có khả năng tìm kiếm từ danh sách quy trình, có thể đang xem quầy IO Data Bytes/sec. Nếu bạn lộn xộn xung quanh trong đó bạn có thể tìm thấy một cái gì đó hữu ích hơn cho bạn để xem xét mặc dù.

Sửa: Tôi nhận thấy rằng nó nói "Programatically" (sao nó nói hôm qua rằng?)

Vâng, bạn thực sự có thể nhận được khá nhiều tất cả các thông tin nhận được từ Perfmon registry với phím HKEY_PERFORMANCE_DATA. Tôi nghĩ đó là những gì Perfmon liệt kê và sử dụng, vì vậy bạn sẽ có thể poke xung quanh với perfmon để xem những gì có và làm việc cho bạn, sau đó viết mã để đọc nó ra trong thời gian thực trong chương trình của riêng bạn.

Một trong những điều thực sự thú vị về phương pháp này, là nó thậm chí hoạt động từ xa, nếu bạn có quyền riêng tư.

+2

-1: IO byte trong perfom sẽ cuộn lên đĩa và mạng IO cùng nhau. –

+0

Điều đó đúng. Tuy nhiên, nếu bạn không chạy bất cứ thứ gì có bất kỳ lý do nào để làm nhiều I/O đĩa, nó sẽ làm khá tốt cho bạn. –

1

Bạn sẽ cần phải sử dụng API IPHelper.

Đây là một bài viết tốt quy định chi tiết việc sử dụng nó từ NET: http://www.codeproject.com/KB/IP/iphlpapi.aspx

Thưởng thức.

+0

Điều đó dường như không chứa thống kê cho mỗi quá trình. –

+0

Không, nhưng nó liên kết quá trình với kết nối mạng. Đó là một mảnh ghép của câu đố. –

+0

Một số chi tiết sẽ được đánh giá cao. –

3

Sau khá nghiên cứu ở đây là những gì tôi đã đi lên với:

  1. Có một số bài viết trên các diễn đàn khác nhau yêu cầu thông tin này giống nhau.
  2. Chỉ có thể giải pháp lập trình mà tôi thấy là sử dụng Theo dõi sự kiện cho Windows (ETW). Điều đó sẽ có một cuốn sách nhỏ để giải thích/hiểu.
  3. Các bộ đếm PERF, có thể lấy từ sổ đăng ký, không phải là Powershell thân thiện. Họ sử dụng các cấu trúc dữ liệu được thiết kế để được tiêu thụ bởi các chương trình C/C++. URL của một ví dụ hoàn chỉnh: http://msdn.microsoft.com/en-us/library/windows/desktop/aa372138(v=vs.85).aspx
  4. SysInternals có TCPVIEW hiển thị mức sử dụng mạng theo quy trình. Khi bạn bắt đầu, hầu hết các quy trình không hiển thị bất kỳ cách sử dụng nào. Dường như nó chỉ thu thập thông tin sử dụng trong khoảng thời gian mà nó đang chạy. Điều này cho thấy trọng lượng cho ý tưởng rằng ETW đang được sử dụng.
  5. Nếu tôi duyệt các trang web bằng IE9, tôi sẽ thấy các quy trình được tạo trong TCPVIEW. Trong hầu hết các trường hợp, các quá trình sẽ biến mất (chấm dứt) trong vòng một phút hoặc lâu hơn - cùng với số liệu thống kê của quy trình.
  6. Tương tự như ProcessExplorer, khi quy trình được tạo, chúng được đánh dấu màu xanh lục và khi chúng bị hủy, chúng được đánh dấu màu đỏ.
  7. Quy trình được đánh dấu màu đỏ biến mất sau Bản cập nhật tiếp theo. Tần suất cập nhật có thể là 1, 2 hoặc 5 giây. Tuy nhiên có một thiết lập đăng ký, HKEY_CURRENT_USER \ Software \ Sysinternals \ TCPView \ Settings có thể được sửa đổi để thiết lập tần số làm mới khác. Nếu là một DWORD tại offset 0x98, và bằng mili giây.
  8. TCPVIEW có mục menu "Lưu"/"Lưu dưới dạng". Đầu ra là tệp văn bản được phân tách bằng dấu cách có số liệu thống kê sử dụng cho mỗi quy trình hiện được hiển thị trong GUI. Dưới đây là một dòng mẫu từ tệp. Những con số vào cuối dòng được nhận pkts/giây, nhận được byte/giây, pkts truyền/giây và byte/giây, (không nhất thiết phải theo thứ tự) iexplore.exe 864 TCP tin 61207 a96-17-203-64.deploy.akamaitechnologies.com http ESTABLISHED 2 12,928 8 9,420

Vậy ...

Một giải pháp có thể là sử dụng TCPVIEW và kiểm soát nó thông qua các nét chính được tạo lập trình từ một tập lệnh. Bạn có thể đặt khoảng thời gian làm mới thành 1, 10, 30, v.v. và có kịch bản gửi các lần nhấn phím để làm cho TCPVIEW lưu đầu ra vào một tệp. Bạn có thể muốn kịch bản để gửi các tổ hợp phím ở một nửa hoặc một phần ba của khoảng thời gian làm mới, để đảm bảo rằng bạn đang nhận được một ảnh chụp nhanh ít nhất là 1/2 hoặc 2/3 khoảng thời gian làm mới. Bạn có thể nhập tệp bằng cách sử dụng Nhập-CSV và dễ dàng thao tác nó trong tập lệnh.

Hoặc ...

Bạn có thể bị bạo lực và sử dụng ETW.

Hoặc ...

Bạn có thể đi ra khỏi cuối sâu và cảng hệ thống tập tin proc Linux (trong đó, như bạn đã nói, là dễ dàng hơn nhiều để sử dụng từ kịch bản) Windows :-)

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