GNU/Linux >> Znalost Linux >  >> Linux

Linux získává všechny názvy síťových rozhraní

Můžete zkontrolovat, které položky z getifaddrs patří do rodiny AF_PACKET. Zdá se, že v mém systému jsou uvedena všechna rozhraní:

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() vrátí pouze adresy vašich rozhraní, nikoli samotná rozhraní.

Co když kterékoli z vašich rozhraní nemá žádnou adresu nebo žádnou adresu požadované rodiny, jak je navrženo s 'AF_PACKET'?

Zde je příklad, kdy mám rozhraní tunelu (s připojením OpenVPN) a kde uvádím všechny položky z getifaddrs() pro každé z mých síťových rozhraní:

[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. Žádný AF_PACKET na rozhraní "tun0", ale v systému EXISTUJE.

Místo toho byste měli použít if_nameindex() syscall, který dělá přesně to, co chcete. Jinými slovy, bez argumentů vrátí seznam všech rozhraní ve vašem systému:

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

A voilà.


Linux
  1. Průvodce IFTOP:Využití šířky pásma rozhraní Display Network v systému Linux

  2. Jak získat MAC adresu WiFi síťového rozhraní?

  3. Povolené znaky v názvech síťových rozhraní Linuxu?

  1. Začínáme s linuxovými firewally

  2. Jak vymažu statistiky rozhraní v systému Linux

  3. Jak nastavit preferované síťové rozhraní v linuxu

  1. Jak nastavit statickou IP adresu na Debian Linuxu

  2. Nakonfigurujte síťové rozhraní jako klienta DHCP na RHEL7 Linux

  3. Konfigurace síťového rozhraní se statickou IP adresou na RHEL 7