GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux erhält alle Netzwerkschnittstellennamen

Sie könnten überprüfen, welche Einträge von getifaddrs zur AF_PACKET-Familie gehören. Auf meinem System scheint das alle Schnittstellen aufzulisten:

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() gibt nur Ihre Schnittstellenadressen zurück, nicht die Schnittstellen selbst.

Was ist, wenn eine Ihrer Schnittstellen keine Adresse oder keine Adresse der angeforderten Familie hat, wie mit der 'AF_PACKET' vorgeschlagen?

Hier ein Beispiel, wo ich eine Tunnelschnittstelle habe (mit einer OpenVPN-Verbindung) und wo ich alle Einträge von getifaddrs() für jede meiner Netzwerkschnittstellen aufliste:

[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. Kein AF_PACKET auf der "tun0"-Schnittstelle, aber es existiert auf dem System.

Sie sollten stattdessen den Systemaufruf if_nameindex() verwenden, der genau das tut, was Sie wollen. Mit anderen Worten, es gibt ohne Argumente eine Liste aller Schnittstellen auf Ihrem System zurück:

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

Und voilà.


Linux
  1. Erste Schritte mit Linux-Firewalls

  2. So richten Sie eine statische IP-Adresse unter Debian Linux ein

  3. Benennen Sie alle Dateien und Verzeichnisnamen in Linux in Kleinbuchstaben um

  4. Wie erhalte ich die MAC-Adresse der WiFi-Netzwerkschnittstelle?

  5. Zulässige Zeichen in Namen von Linux-Netzwerkschnittstellen?

Ein Leitfaden für Systemadministratoren zur Netzwerkverwaltung

So konfigurieren Sie die virtuelle Netzwerkschnittstelle auf Redhat 7 Linux

3 Möglichkeiten, eine Netzwerkschnittstelle in Linux zu konfigurieren

Verwenden von ifstat für Linux-Netzwerkstatistiken

So ändern Sie die Netzwerk-MAC-Adresse in Linux

Linux ifconfig-Befehl