2012-03-11 7 views
5

TCPView가 수행 할 수있는 것과 유사한 프로세스 별 네트워크 사용 통계를 결정해야합니다. 당신이 this question, 또는 this question의 중복을 게시 저를 촬영하기 전에연결 대역폭 통계 가져 오기

Example http://img513.imageshack.us/img513/861/6601f15814544055a590e26.png

그래서, 나는 그 중 어느 것도 나를 실제로 이렇게 도울 수있는 철저한 답변을 지적하고 싶습니다.

저는 연구를 해왔고 netstat 또는 기타 Windows API와 같이 활성 연결과 관련 프로세스를 나열하는 방법이 분명히 많습니다 (IpHlpAPI.dll). 이제

는 Google'ing 내가 무슨 짓을했는지부터, 나는 많이 발견하지 않았습니다 -이 모호한 용어를 제외하고 : GetPerTcpConnectionEStatsGetPerTcp6ConnectionEStats. 아마도 IPv4와 IPv6을 통한 TCP에 대한 것입니다. 지금 내가 어디에서 해야할지 할 수있는 그 책을 읽고 있었다. 그러나 여전히 UDP는 제외됩니다. 또한 TCPViewer가 작동하는 XP 시스템에서는 이러한 기능을 사용할 수 없습니다.

TCP를 사용하여 만족 스럽지만 문제는 C#에서 사용하는 방법을 찾을 수없는 것입니다.

그래서 나는 모든이 몇 가지 질문으로 귀결 같아요

  • 사람은 실제로 TCPView는 어떻게하는지 알고 있나요?
  • TCP에 GetPerTcpConnectionEStats를 어떻게 사용합니까? 아니면 제가 제안하고있는 것을 성취 할 수 있습니까?
  • UDP에 사용할 수있는 또 다른 알려진 대체 방법이 있습니까?

전체적인 요점은 프로세스 자체의 독립적 인 대역폭 사용량을 확인하는 것입니다. 총 시스템 대역폭 사용량을 계산하지 않습니다.

미리 답변 해 주셔서 감사합니다.

+0

당신은 WMI/성능 카운터를 통해이 작업을 수행 할 수 있지만, 개인적으로는 그 API를 직접 찾지 마십시오. 다만 좋은 답변을 얻지 못하고 Google에 대한 추가 키워드를 찾고자 할 때 유용합니다. –

+0

이것에 대한 해결책은 무엇입니까? –

+0

@TomerPeled : 솔루션을 찾지 못했고 프로젝트를 포기한 적이 없었습니다 (어쨌든 개인적 이었기 때문에). 그래도 개별 프로세스의 대역폭 사용량을 결정하는 방법을 찾지 못하면 대답으로 게시하여 내 오래된 프로젝트를 마칠 수있는 동기를 유발할 수 있습니다 :) – caesay

답변

1

내가 비슷한 것을 (대기 시간 대 대역폭) 어떻게 할 것인지 생각하려고 노력했지만 시간 투자 부족으로 포기해야했습니다. 나는 우리가 결국 대답을 얻기를 희망하면서 여기에 나의 발견을 추가 할 것이라고 생각했다.

분명히 PInvoke를 사용해야 할 것입니다. 세부 사항이 내 경험을 훨씬 뛰어 넘는 것 같습니다.

Wrapper Library on CodeProject은 Windows XP 및 Server 2003에서만 작동하는 AllocateAndGetTcpExTableFromStack을 사용합니다. 여전히 미안하지만 대역폭을 얻지는 못합니다.

시작 지점 (Vista/Server 2008 이상)에서 찾을 수있는 가장 가까운 정보는 GetExtendedTcpTable의 pinvoke.net에 대한 예입니다.

도구 PInvoke Interop Assistant은 관리되지 않는 코드를 호출하는 방법을 결정하는 데 도움이 될 수 있습니다. 나는 다음이 내가 알아 내기 위해 노력하겠다고 계속 노력한다면

:

  1. 어떻게 적절한 TCP_ESTATS_TYPE를 통해 TcpConnectionEstatsBandwidth의 수집을 가능하게 SetPerTcpConnectionEStats를 호출합니다.
  2. 을 사용하면 MIB_TCPROW을 만드는 데 필요한 정보를 얻을 수 있습니다.
  3. GetPerTcpConnectionEStats을 호출하여 데이터를 모니터링하는 방법을 결정하십시오.