1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Recolher dados de uma interface de rede em linux

Discussão em 'Programação' iniciada por jae686, 14 de Outubro de 2008. (Respostas: 4; Visualizações: 692)

  1. jae686

    jae686 Power Member

    Bom dia. Pretendo escrever uma ferramenta em C que me permita, em linux, a obtenção de varios dados sobre o trafego que percorre uma dada interface de rede (tx, rx, MAC, uptime da interface, etc).

    Alguma sugestão sobre como o fazer da forma mais eficiente e com pouca overhead ?

    Cumprimentos
     
  2. zbenta

    zbenta Power Member

    Boas,

    Eu nunca fiz nada de semelhante, mas acho que podes utilizar o protocolo snmp para fazeres uma "query" ao interface. O C tem a função system("some command"); que te permite enviar comandos ao sistema operativo, podes usar esta função para enviar pedidos snmp.
     
  3. countzero

    countzero Power Member

    Olá.

    Consulta o ficheiro /proc/net/dev, podes fazer um parser simples para retirar parte da informação que precisas.

    Código para veres o MAC address, retirado daqui:

    Código:
    #include <stdio.h>
    
    #include <string.h> /* for strncpy */
    
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <sys/ioctl.h>
    #include <netinet/in.h>
    #include <net/if.h>
    
    int
    main()
    {
     int fd;
     struct ifreq ifr;
    
     fd = socket(AF_INET, SOCK_DGRAM, 0);
    
     ifr.ifr_addr.sa_family = AF_INET;
     strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);
    
     ioctl(fd, SIOCGIFHWADDR, &ifr);
    
     close(fd);
    
     /* display result */
     printf("%.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
             (unsigned char)ifr.ifr_hwaddr.sa_data[0],
             (unsigned char)ifr.ifr_hwaddr.sa_data[1],
             (unsigned char)ifr.ifr_hwaddr.sa_data[2],
             (unsigned char)ifr.ifr_hwaddr.sa_data[3],
             (unsigned char)ifr.ifr_hwaddr.sa_data[4],
             (unsigned char)ifr.ifr_hwaddr.sa_data[5]);
    
     return 0;
    
    }

    Deixo, também, o código das net-tools que incluem, entre outras ferramentas, o famoso ifconfig: http://www.tazenda.demon.co.uk/phil/net-tools/net-tools-1.60.tar.bz2.

    Cumps,
    JP
     
  4. slack_guy

    slack_guy Power Member

    Já exploraste a biblioteca pcap?
    Código:
    $ man pcap
    NAME
           pcap - Packet Capture library
    
    SYNOPSIS
           #include <pcap.h>
    
           char errbuf[PCAP_ERRBUF_SIZE];
    ......
    DESCRIPTION
           The  Packet  Capture  library provides a high level interface to packet capture systems. All packets on the network, even those destined
           for other hosts, are accessible through this mechanism.
    .......
    
     
  5. jae686

    jae686 Power Member

    Muito Obrigado pelas respostas!

    Vou estudar as opçoes e irei mostrar o progresso a medida que este surgir.

    P.S. Nao fazia ideia que existia uma lib so para isso!

    Thx!
    :D
     

Partilhar esta Página