2011-01-03 5 views
4

내 컴퓨터/서버의 특정 응용 프로그램이 특정 시점에 인터넷 연결을 사용하고 가능한 경우 얼마나 많은 대역폭을 사용하고 있는지 확인하기 위해 C#에서 메소드를 작성하려고합니다. 누구든지이 일을 시작할 수 있도록 도와 주실 수 있습니까?.net에서 인터넷 사용을 모니터링합니다.

+1

이것은 도움이 될 수 있습니다 -> http://stackoverflow.com/questions/566139/detecting-network-connection-speed-and-bandwidth-usage-in-c – digEmAll

+1

또한이 q & a를보십시오 : http : //stackoverflow.com/questions/442409/c-bandwidth – digEmAll

+0

통찰력을 위해 @dig에게 감사드립니다. 나는 이것이 유용한 출발이라고 생각한다. 이것을 하나의 답으로 표시 할 수 있도록 답안으로 변환 할 수 있습니다. – samar

답변

0

찾았습니다. 프로세스 모니터 매우 유용한 도구로 사용되었습니다. 그래서 내 응용 프로그램에서 사용할 수있는 API를 제공하는지 여부를 아직 확인하지 않았지만 코드를 작성하지 않아도되었습니다. 필요한 정보.

나를 도와 주신 모든 분들께 감사드립니다.

+0

안녕하세요, 아무것도 찾았습니까? –

3

의견이 너무 작기 때문에 답변을 작성하기로했습니다.

음, stackoverflow에서 다른 Q & A를 읽고 인터넷을 둘러 보면서 나는 당신의 문제에 대한 간단한 해결책을 찾지 못했습니다.

는 사실, 정말 간단 .NET 프로세스, 당신은 단지 에서 정보를 검색해야 ".NET CLR 네트워킹 -받은 바이트/보낸 바이트" 성능 카운터,이 Q&A

에 그러나 일반적으로 같이 , 프로세스 별 사용 대역폭을 얻는 것은 쉬운 일이 아닙니다. 예를 를 들어

는 "Microsoft 네트워크 모니터"아마도 그들 (또는 유사한 것을 사용하여 프로세스와 IP 포트 쌍을 매핑하기 때문에, 단지 TCP 트래픽에 대한 인터넷 패킷을 생성하는 과정을 추적 할 수 스니퍼, TCP 그래서 그것을 connected protocol입니다 더 간단합니다.)
어쨌든 노출시키려는 API를 사용할 수 있습니다 (일부 힌트는 this 블로그 항목 참조).

그러나 이러한 질문에 제안 & A의 (LINK 1, LINK 2), 권리, 그리고 아마도 유일한 방법은, 네트워크 트래픽과에 .NET 호출 API를 노출을 가로 챌 수있는 NDIS/TDI 드라이버를 작성하는 것입니다 .

문제는 이러한 드라이버는 관리되는 코드로 작성할 수 없으므로 C/C++로 구현해야한다는 것입니다.
분명히 이미 작성된 드라이버/스니퍼가 호출 가능한 API를 노출하는 것을 발견하면이를 사용할 수 있습니다.
예를 들어, WinPCap에는 하나 (그리고 SharpPCap 또는 PCap.Net과 같은 일부 .NET 래퍼)가 있지만 패킷의 소스 프로세스 정보를 얻을 수 있다고는 생각하지 않습니다.

0

digEmAll이 언급했듯이 Vista 이전 버전의 Windows에서는 드라이버를 직접 작성하거나 제 3자를 사용하지 않습니다. Vista, 2008 및 Windows 7에서는 GetPerTcpConnectionEStats API를 사용할 수 있습니다 (MSDN 페이지에서 큰 사용 예가 있음). 리소스 모니터는 확장 된 네트워크 통계를 위해 이전 API 인 GetTcpTable/GetTcpRow API와 함께이 API를 사용합니다.

관련 문제