man ifconfig
diz:
O ifconfig é usado para configurar as interfaces de rede residentes no kernel. Ele é usado no momento da inicialização para configurar interfaces conforme necessário. Depois disso, geralmente é necessário apenas quando depuração ou quando o ajuste do sistema é necessário.
If no arguments are given, ifconfig displays the status of the currently active interfaces.
Se um único argumento de interface for fornecido, ele exibirá o status da interface especificada apenas;
if a single -a argument is given, it displays the status of all interfaces, even those that are down.
Caso contrário, configura uma interface.
man netdevice
também pode compartilhar alguma luz sobre a questão. Usa a chamada do sistema ioctl ().
Outra técnica é usar strace
.
Ele fornece uma lista de todas as chamadas do sistema feitas por qualquer programa que você passe, junto com seus argumentos e valores de retorno. Se o seu programa apenas descarregar alguma informação e terminar em vez de ser executado por um longo período de tempo, pode ser bastante simples fazer apenas um homem em todas as chamadas do sistema que você vê que parecem fornecer as informações que você está procurando.
Quando eu corro
strace ifconfig
Algumas das chamadas interessantes são:
open("/proc/net/dev", O_RDONLY) = 6
seguido por um monte de ioctls:
ioctl(5, SIOCGIFFLAGS, {ifr_name="eth0", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0
ioctl(5, SIOCGIFHWADDR, {ifr_name="eth0", ifr_hwaddr=12:cd:4b:bb:7f:39}) = 0
ioctl(5, SIOCGIFMETRIC, {ifr_name="eth0", ifr_metric=0}) = 0
ioctl(5, SIOCGIFMTU, {ifr_name="eth0", ifr_mtu=9001}) = 0