Pergunta

Eu preciso contar quantidade de bytes enviados e recebidos da rede por várias aplicações. Primeiro eu pensei em usar LSP, mas há um monte de aplicativos que não usam o LSP em tudo (SMB por exemplo). É por isso que eu escrevi um pequeno sniffer. Esta aplicação funciona em nível e recolhe dados IP usando recvfrom.

Então, eu tenho endereço do host remoto, local e portas remotas. Isso é muito legal, mas eu também precisa ter PID do proprietário socket local. Então, há alguma maneira simples de obter tal PID? A solução é usar GetTcpTable, GetUdpTable Ou AllocateAndGetUdpExTableFromStack e AllocateAndGetTcpExTableFromStack (há muitas diferenças nessas funções entre 2k, XP, XP SP2 e Vista) e para pesquisa de tabelas de resultados, mas parece deselegante e ineficiente ...

Assim há qualquer tipo de função "GetPIDOfSocket"? A resolução sholud ser WinAPI (sem .NET) única, como várias línguas pode ser utilizado, por exemplo, C ++, Delphi.

Foi útil?

Solução

Desculpe ter que dizer-lhe, mas usando GetTcpTable ou AllocateAndGetTcpExTableFromStack não é uma solução, é realmente como as outras aplicações do tipo netstat trabalho. AFAIK não há nenhuma função "GetPIDOfSocket" Win32, sua única opção é pesquisar usando as funções de tabela porto. Mas pelo menos você pode codificar-lo a si mesmo e não tem que gerar o processo netstat.

código fonte Ver SysInternals C para netstatp aqui . Não há um monte de ele e ele é olhar um bem a pena.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top