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

Rufen Sie die IP-Adresse einer Schnittstelle unter Linux ab

Wenn Sie nach einer Adresse (IPv4) der spezifischen Schnittstelle suchen, sagen Sie wlan0 Probieren Sie dann diesen Code aus, der getifaddrs() verwendet:

#include <arpa/inet.h>
#include <sys/socket.h>
#include <netdb.h>
#include <ifaddrs.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char *argv[])
{
    struct ifaddrs *ifaddr, *ifa;
    int family, s;
    char host[NI_MAXHOST];

    if (getifaddrs(&ifaddr) == -1) 
    {
        perror("getifaddrs");
        exit(EXIT_FAILURE);
    }


    for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) 
    {
        if (ifa->ifa_addr == NULL)
            continue;  

        s=getnameinfo(ifa->ifa_addr,sizeof(struct sockaddr_in),host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);

        if((strcmp(ifa->ifa_name,"wlan0")==0)&&(ifa->ifa_addr->sa_family==AF_INET))
        {
            if (s != 0)
            {
                printf("getnameinfo() failed: %s\n", gai_strerror(s));
                exit(EXIT_FAILURE);
            }
            printf("\tInterface : <%s>\n",ifa->ifa_name );
            printf("\t  Address : <%s>\n", host); 
        }
    }

    freeifaddrs(ifaddr);
    exit(EXIT_SUCCESS);
}

Sie können wlan0 ersetzen mit eth0 für Ethernet und lo für lokales Loopback.

Die Struktur und detaillierte Erläuterungen zu den verwendeten Datenstrukturen finden Sie hier.

Um mehr über verkettete Listen in C zu erfahren, ist diese Seite ein guter Ausgangspunkt.


Zusätzlich zur ioctl()-Methode, die Filip demonstriert hat, können Sie getifaddrs() verwenden. Am Ende der Manpage befindet sich ein Beispielprogramm.


Versuchen Sie Folgendes:

#include <stdio.h>
#include <unistd.h>
#include <string.h> /* for strncpy */

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <net/if.h>
#include <arpa/inet.h>

int
main()
{
 int fd;
 struct ifreq ifr;

 fd = socket(AF_INET, SOCK_DGRAM, 0);

 /* I want to get an IPv4 IP address */
 ifr.ifr_addr.sa_family = AF_INET;

 /* I want IP address attached to "eth0" */
 strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);

 ioctl(fd, SIOCGIFADDR, &ifr);

 close(fd);

 /* display result */
 printf("%s\n", inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr));

 return 0;
}

Das Codebeispiel stammt von hier.


Linux
  1. Linux – Wie bekomme ich die IPv4-Adresse für eine Schnittstelle von /proc?

  2. Python:Erhalten Sie ein Standard-Gateway für eine lokale Schnittstelle/IP-Adresse in Linux

  3. Wie erhalte ich die Anzahl der CPUs in Linux mit C?

  4. C++ Linux:Holen Sie sich die Aktualisierungsrate eines Monitors

  5. Rufen Sie die MAC-Adresse mit Shell-Skript ab

So finden Sie die IP-Adresse unter Linux

3 Möglichkeiten, eine Netzwerkschnittstelle in Linux zu konfigurieren

So ändern Sie die IP-Adresse unter Linux

So erhalten Sie Ihre IP-Adresse unter Linux

Holen Sie sich die IP-Adresse der Website

Holen Sie sich eine IP-Adresse unter Linux:Entdecken Sie die vielen Möglichkeiten