GNU/Linux >> Tutoriels Linux >  >> Linux

Linux récupère tous les noms d'interface réseau

Vous pouvez vérifier quelles entrées de getifaddrs appartiennent à la famille AF_PACKET. Sur mon système, cela semble répertorier toutes les 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() ne renverra que les adresses de vos interfaces, pas les interfaces elles-mêmes.

Que faire si l'une de vos interfaces n'a pas d'adresse, ou pas d'adresse de la famille demandée, comme suggéré avec celle 'AF_PACKET' ?

Ici, un exemple où j'ai une interface tunnel (avec une connexion OpenVPN), et où je liste toutes les entrées de getifaddrs() pour chacune de mes interfaces réseau :

[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. Pas d'AF_PACKET sur l'interface "tun0", mais il existe sur le système.

Vous devriez plutôt utiliser l'appel système if_nameindex(), qui fait exactement ce que vous voulez. En d'autres termes, sans arguments, il renvoie une liste de toutes les interfaces de votre système :

#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;
}

Et voilà.


Linux
  1. Configurer l'interface réseau en tant que client DHCP sur RHEL7 Linux

  2. Service de système d'exploitation Linux "réseau"

  3. Obtenir l'adresse IP d'une interface sous Linux

  4. Comment obtenir l'adresse MAC de l'interface réseau WiFi ?

  5. Caractères autorisés dans les noms d'interface réseau Linux ?

Guide de l'administrateur système pour la gestion du réseau

Comment configurer l'interface réseau virtuelle sur Redhat 7 Linux

3 façons de configurer une interface réseau sous Linux

Utilisation d'ifstat pour les statistiques réseau Linux

Comment changer l'adresse MAC du réseau sous Linux

Commande Linux ifconfig