Identificar os endereços IP de um servidor Linux é essencial para comunicação de rede e implantação de aplicativos. Este artigo apresenta uma solução programática em C para recuperar efetivamente os endereços IP de uma máquina Linux.
O objetivo é obter programaticamente os endereços IP de um servidor Linux dentro de um aplicativo C . O servidor pode ter vários endereços IP, incluindo um endereço de host local, um endereço interno (de gerenciamento) e um endereço externo (público). O objetivo é recuperar o endereço IP externo para vinculação do aplicativo.
A biblioteca C padrão fornece a função getifaddrs() para obter informações sobre as interfaces de rede e endereços IP de um sistema. Aqui está um exemplo que usa getifaddrs() para imprimir todos os endereços IPv4 e IPv6 da máquina local:
#include#include #include int main() { struct ifaddrs *ifAddrStruct = NULL; struct ifaddrs *ifa = NULL; void *tmpAddrPtr = NULL; getifaddrs(&ifAddrStruct); for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) { if (!ifa->ifa_addr) { continue; } if (ifa->ifa_addr->sa_family == AF_INET) { // IPv4 address tmpAddrPtr = &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr; char addressBuffer[INET_ADDRSTRLEN]; inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN); printf("IPv4 Address %s\n", addressBuffer); } else if (ifa->ifa_addr->sa_family == AF_INET6) { // IPv6 address tmpAddrPtr = &((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr; char addressBuffer[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN); printf("IPv6 Address %s\n", addressBuffer); } } if (ifAddrStruct != NULL) { freeifaddrs(ifAddrStruct); } return 0; }
Para recuperar o endereço IP externo, você pode usar uma abordagem semelhante, mas procurando especificamente a interface que se conecta à rede externa. Você pode usar siocgifaddr com SIOCGIFADDR para recuperar o endereço IP de uma interface específica.
A função getifaddrs() e siocgifaddr com SIOCGIFADDR fornecem métodos robustos para recuperar os endereços IP de uma máquina Linux em C. Essas abordagens permitem que os aplicativos se adaptem dinamicamente às mudanças na rede e estabeleçam as conexões de rede necessárias.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3