GNU/Linux >> Tutoriales Linux >  >> Linux

Linux obteniendo todos los nombres de interfaz de red

Puede verificar qué entradas de getifaddrs pertenecen a la familia AF_PACKET. En mi sistema que parece enumerar todas las interfaces:

struct ifaddrs *addrs,*tmp;

getifaddrs(&addrs);
tmp = addrs;

while (tmp)
{
    if (tmp->ifa_addr && tmp->ifa_addr->sa_family == AF_PACKET)
        printf("%s\n", tmp->ifa_name);

    tmp = tmp->ifa_next;
}

freeifaddrs(addrs);

getifaddrs() solo devolverá las direcciones de sus interfaces, no las interfaces en sí.

¿Qué sucede si alguna de sus interfaces no tiene dirección, o no tiene dirección de la familia solicitada, como se sugiere con la de 'AF_PACKET'?

Aquí, un ejemplo en el que tengo una interfaz de túnel (con una conexión OpenVPN) y en el que enumero todas las entradas de getifaddrs() para cada una de mis interfaces de red:

[0] 1: lo                address family: 17 (AF_PACKET) b4:11:00:00:00:01
                         address family: 2 (AF_INET)    address: <127.0.0.1>
                         address family: 10 (AF_INET6)  address: <::1>
[...]

[5] 10: tun0             address family: 2 (AF_INET)    address: <172.16.0.14>
[EOF]

Bam. No hay AF_PACKET en la interfaz "tun0", pero SÍ existe en el sistema.

En su lugar, debe usar if_nameindex() syscall, que hace exactamente lo que desea. En otras palabras, sin argumentos, devuelve una lista de todas las interfaces de su sistema:

#include <net/if.h>
#include <stdio.h>

int main (void)
{
    struct if_nameindex *if_nidxs, *intf;

    if_nidxs = if_nameindex();
    if ( if_nidxs != NULL )
    {
        for (intf = if_nidxs; intf->if_index != 0 || intf->if_name != NULL; intf++)
        {
            printf("%s\n", intf->if_name);
        }

        if_freenameindex(if_nidxs);
    }

    return 0;
}

Y listo.


Linux
  1. Cómo configurar una dirección IP estática en Debian Linux

  2. Configurar la interfaz de red como cliente DHCP en RHEL7 Linux

  3. Configuración de la interfaz de red con dirección IP estática en RHEL 7

  4. Guía IFTOP:Uso del ancho de banda de la interfaz de red de visualización en Linux

  5. Servicio de sistema operativo Linux 'red'

Una guía del administrador de sistemas para la administración de redes

Cómo configurar la interfaz de red virtual en Redhat 7 Linux

3 formas de configurar una interfaz de red en Linux

Uso de ifstat para estadísticas de red de Linux

Cómo cambiar la dirección MAC de la red en Linux

Comando ifconfig de Linux