GNU/Linux >> Linux Esercitazione >  >> Linux

Linux ottiene tutti i nomi delle interfacce di rete

Puoi controllare quali voci da getifaddrs appartengono alla famiglia AF_PACKET. Sul mio sistema sembra elencare tutte le interfacce:

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() restituirà solo gli indirizzi delle tue interfacce, non le interfacce stesse.

Cosa succede se una qualsiasi delle tue interfacce non ha indirizzo, o nessun indirizzo della famiglia richiesta, come suggerito con quella 'AF_PACKET'?

Qui, un esempio in cui ho un'interfaccia tunnel (con una connessione OpenVPN) e dove sto elencando tutte le voci da getifaddrs() per ciascuna delle mie interfacce di rete:

[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. Nessun AF_PACKET sull'interfaccia "tun0", ma esiste nel sistema.

Dovresti, invece, usare if_nameindex() syscall, che fa esattamente quello che vuoi. In altre parole, senza argomenti, restituisce un elenco di tutte le interfacce sul tuo 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;
}

E voilà.


Linux
  1. Configura l'interfaccia di rete come client DHCP su RHEL7 Linux

  2. Rinomina tutti i file e i nomi delle directory in minuscolo in Linux

  3. Guida IFTOP:visualizzazione dell'utilizzo della larghezza di banda dell'interfaccia di rete su Linux

  4. Sistema operativo Linux Servizio "rete"

  5. Come ottenere l'indirizzo MAC dell'interfaccia di rete WiFi?

Una guida per l'amministratore di sistema alla gestione della rete

Come configurare l'interfaccia di rete virtuale su Redhat 7 Linux

3 modi per configurare un'interfaccia di rete in Linux

Utilizzo di ifstat per le statistiche di rete Linux

Come modificare l'indirizzo MAC di rete in Linux

Comando ifconfig di Linux