Tráfego de rede por janelas de processo / aplicativo

1

Eu sei que há muitos aplicativos para fazer isso (como o procexplorer), mas existe acesso ao winapi (qual método / referência é usado) para recuperar o tráfego da rede (TCP, UDP, etc) por aplicativo ou processo ?

    
por enginefree 12.07.2013 / 04:20

3 respostas

2

De seus comentários, percebo que você está tentando capturar o tráfego de rede gerado pelo aplicativo que você está desenvolvendo dentro do próprio aplicativo. Se assim for, acho que esta pode ser uma questão mais adequada ao StackOverflow, já que é uma comunidade de desenvolvedores. Essa introspecção provavelmente exigiria o uso do ETW (Event Tracing for Windows), mas novamente não posso ter certeza. Esta pergunta sobre SO pode ser de alguma ajuda.

Colocando isso de lado por um momento e focando no lado administrativo (que é o que você tende a receber se você fizer perguntas aqui), eu gostaria de voltar sua atenção para o comando netsh trace e Monitor de rede da Microsoft (Netmon) . Você pode capturar diretamente do NetMon no momento em que deseja fazê-lo ou pode obter mais flexibilidade com o comando netsh trace, ativando-o automaticamente.

Se isso for de interesse, você pode fazer:

netsh trace start capture=yes traceFile=c:\tracefolder\tracename.etl

para iniciar uma captura e, em seguida:

netsh trace stop

quando estiver pronto. Existem outras opções, então você pode ver o manual usando netsh trace /?

Depois de ter sua captura por qualquer meio, você pode usar o NetMon para filtrar o executável do seu aplicativo para examinar o tráfego de rede gerado por ele durante o período que você estava monitorando.

    
por 17.07.2013 / 23:19
0

Não tenho certeza sobre o winapi, mas o Wireshark é o principal analisador de protocolo de rede do mundo. Ele permite que você veja o que está acontecendo na sua rede em um nível microscópico.Ele é o padrão de fato (e muitas vezes de jure) em muitas indústrias e instituições educacionais. "

    
por 12.07.2013 / 04:39
0

Você pode usar libpcap . O Libpcap é uma biblioteca de código aberto que fornece uma interface de alto nível para o sistema de captura de pacotes de rede.

A API Libpcap foi projetada para ser usada a partir de C e C++ , no entanto, há muitos wrappers que permitem seu uso de idiomas como Perl , Python , Java , C# , Ruby .

O Libpcap é executado na maioria dos sistemas operacionais Unix, também existe uma versão Windows chamada Winpcap ( Win dows P acket Cap ture).

Veja a documentação do Winpcap .

Atualizar

Infelizmente, uma ferramenta de detecção de rede funciona no nível mais baixo da pilha de rede, tentando capturar tudo, é completamente inconsciente de processos em execução no sistema operacional. Seria extremamente difícil descobrir o que originou uma determinada chamada. Um sniffer de pacotes poderia descobrir (através do número da porta) um ID de processo.

Estas circunstâncias o que pode ser feito usando o pcap?

No caso de querermos apenas detectar tráfego específico (por exemplo: somente TCP/IP pacotes, somente pacotes que vão para a porta 23 , etc), devemos criar um conjunto de regras, compile it, e aplicá-lo. Este é um processo de três fases, que está intimamente relacionado.  O conjunto de regras é mantido em uma string e é convertido em um formato que o pcap pode ler (portanto, compilá-lo).

A compilação é feita apenas chamando uma função dentro do nosso programa; não envolve o uso de um aplicativo externo. Então nós dizemos ao pcap para aplicá-lo a qualquer sessão que desejamos que ele filtre.

Atualização 2

A primeira coisa a entender é o layout geral de um sniffer pcap. O fluxo de código é o seguinte:

  1. Começamos determinando em qual interface queremos farejar. No Linux isso pode ser algo como eth0 , no BSD pode ser xl1 , etc. Podemos definir este dispositivo em uma string, ou podemos pedir pcap para nos fornecer o nome de uma interface que fará o trabalho.

  2. Inicializa o pcap. É aqui que nós dizemos ao pcap qual dispositivo estamos detectando. Podemos, se quisermos, farejar vários dispositivos. Como podemos diferenciar entre eles? Usando identificadores de arquivo. Assim como abrir um arquivo para leitura ou escrita, devemos nomear nosso sniffing session para que possamos diferenciá-lo de outras sessões desse tipo.

  3. No caso de querermos apenas detectar tráfego específico (por exemplo: somente pacotes TCP / IP, apenas pacotes indo para a porta 23, etc) devemos criar um conjunto de regras, "compilá-lo" e aplicá-lo. Este é um processo de três fases, que está intimamente relacionado. O conjunto de regras é mantido em uma string e é convertido em um formato que o pcap pode ler (portanto, compilá-lo).

    A compilação é feita apenas chamando uma função dentro do nosso programa; não envolve o uso de um aplicativo externo. Então nós dizemos ao pcap para aplicá-lo a qualquer sessão que desejamos que ele filtre.

  4. Finalmente, dizemos ao pcap para entrar no loop de execução principal. Neste estado, pcap espera até que tenha recebido quantos pacotes quisermos. Toda vez que recebe um novo pacote, ele chama outra função que já definimos.

    A função que chama pode fazer o que quisermos; ele pode dissecar o pacote e imprimi-lo para o usuário, pode salvá-lo em um arquivo ou não fazer nada.

  5. Depois que nossas necessidades de sniffing forem satisfeitas, fechamos nossa sessão e estamos completos.

por 14.07.2013 / 22:16