Maison >développement back-end >C++ >Comment obtenir l'adresse IP et le masque de sous-réseau de l'ordinateur local en C ?

Comment obtenir l'adresse IP et le masque de sous-réseau de l'ordinateur local en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-10 03:34:02385parcourir

How to Get the Local Computer's IP Address and Subnet Mask in C  ?

Détermination de l'adresse IP et du masque de sous-réseau de l'ordinateur local en C

L'acquisition de l'adresse IP et du masque de sous-réseau de l'ordinateur local est essentielle pour diverses opérations de mise en réseau. En C , ce processus peut être accompli en tirant parti des appels système spécifiques à la plate-forme.

1. Unix/MacOS

Pour les systèmes Unix et macOS, la fonction getifaddrs permet de récupérer une liste chaînée d'adresses d'interface réseau. Parcourir cette liste permet d'accéder à l'adresse IP, au masque de sous-réseau et à d'autres informations connexes de chaque interface :

#include <sys/types.h>
#include <ifaddrs.h>

struct ifaddrs *ifaddr;
int s;

if ((s = getifaddrs(&ifaddr)) == -1) {
    // Error handling
}

for (struct ifaddrs *ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
    if (ifa->ifa_addr->sa_family == AF_INET) {
        char addr[INET_ADDRSTRLEN];
        inet_ntop(AF_INET, &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr, addr, INET_ADDRSTRLEN);
        printf("IP Address: %s\n", addr);

        char netmask[INET_ADDRSTRLEN];
        inet_ntop(AF_INET, &((struct sockaddr_in *)ifa->ifa_netmask)->sin_addr, netmask, INET_ADDRSTRLEN);
        printf("Subnet Mask: %s\n", netmask);
    }
}

2. Windows

Pour les systèmes Windows, la fonction GetAdaptersAddresses fournit une fonctionnalité similaire. Cette fonction remplit un tampon avec des informations pour toutes les cartes réseau de l'ordinateur local :

#include <iphlpapi.h>

PIP_ADAPTER_ADDRESSES addresses;
ULONG outBufLen = 0;
DWORD res = GetAdaptersAddresses(AF_INET, 0, NULL, addresses, &outBufLen);

if (res != ERROR_SUCCESS) {
    // Error handling
}

for (PIP_ADAPTER_ADDRESSES adapter = addresses; adapter != NULL; adapter = adapter->Next) {
    char ip[MAX_PATH + 1];
    InetNtopA(AF_INET, &adapter->FirstUnicastAddress->Address.Ipv4.sin_addr, ip, MAX_PATH + 1);
    printf("IP Address: %s\n", ip);

    char netmask[MAX_PATH + 1];
    InetNtopA(AF_INET, &adapter->FirstUnicastAddress->NetMask.Ipv4.sin_addr, netmask, MAX_PATH + 1);
    printf("Subnet Mask: %s\n", netmask);
}

En suivant ces étapes, vous pouvez récupérer à la fois l'adresse IP et le masque de sous-réseau de l'ordinateur local en C , vous permettant de établir des connexions réseau et effectuer efficacement diverses opérations de communication.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn