2009-05-04 5 views
2

다양한 응용 프로그램에서 네트워크로 보내고받은 바이트 수를 계산해야합니다. 처음에는 LSP 사용에 대해 생각했지만 LSP를 전혀 사용하지 않는 응용 프로그램 (예 : SMB)이 많이 있습니다. 이것이 내가 작은 스니퍼를 쓴 이유입니다. 이 응용 프로그램은 IP 수준에서 작동하며 recvfrom을 사용하여 데이터를 수집합니다.Windows의 소켓 번호에있는 PID?

그래서 원격 호스트, 로컬 및 원격 포트 주소가 있습니다. 이것은 꽤 멋지지만, 또한 로컬 소켓 소유자의 PID를 가져야합니다. 그래서, 그러한 PID를 얻을 수있는 간단한 방법이 있습니까? 해결 방법은 GetTcpTable, GetUdpTable 또는 AllocateAndGetUdpExTableFromStack 및 AllocateAndGetTcpExTableFromStack을 사용하고 ... 그래서

및 결과 테이블을 조회하는 (이 2K, XP, XP SP2와 비스타 사이의 이러한 기능의 차이의 많은입니다)하지만 우아하고 비효율적 인 것 같습니다 어떤 종류의 "GetPIDOfSocket"함수가 있습니까? 다양한 언어 (예 : C++, Delphi)를 사용할 수 있으므로 WinAPI (.net)에서만 해결할 수 있습니다.

+1

최근에 가입 한 것처럼 보였으므로 힌트를 주어도됩니다. 일반적으로 사용중인 프로그래밍 언어를 제공하는 것이 좋습니다. 아직 채울 빈 태그 슬롯이 하나 있습니다. :) –

답변

2

말해 줄 것이지만, GetTcpTable 또는 AllocateAndGetTcpExTableFromStack을 사용하는 것은 해결책이되지 않습니다. 실제로 다른 netstat 유형 응용 프로그램이 어떻게 작동하는지 알려드립니다. AFAIK에는 Win32 "GetPIDOfSocket" 함수가 없으므로 유일한 옵션은 포트 테이블 함수를 사용하여 폴링하는 것입니다. 하지만 최소한 코드를 작성하여 netstat 프로세스를 생성 할 필요가 없습니다.

netstatphere에 대한 SysInternals C 소스 코드를 참조하십시오. 많은 것은 없으며 한 번 볼만한 가치가 있습니다.