Определение IP-адресов Linux-сервера необходимо для сетевого взаимодействия и развертывания приложений. В этой статье представлено программное решение на языке C для эффективного получения IP-адресов Linux-машины.
Цель состоит в том, чтобы программно получить IP-адреса сервера Linux в приложении C. . Сервер может иметь несколько IP-адресов, включая адрес локального хоста, внутренний (управляющий) адрес и внешний (публичный) адрес. Цель состоит в том, чтобы получить внешний IP-адрес для привязки приложения.
Стандартная библиотека C предоставляет функцию getifaddrs() для получения информации о сетевых интерфейсах и IP-адресах системы. Вот пример использования getifaddrs() для печати всех адресов IPv4 и IPv6 локального компьютера:
#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; }
Чтобы получить внешний IP-адрес, вы можете использовать аналогичный подход, но конкретно искать интерфейс, который подключается к внешней сети. Вы можете использовать siocgifaddr с SIOCGIFADDR для получения IP-адреса определенного интерфейса.
Функция getifaddrs() и siocgifaddr с SIOCGIFADDR предоставляют надежные методы для получения IP-адресов машины Linux в С. Эти подходы позволяют приложениям динамически адаптироваться к изменениям в сети и устанавливать необходимые сетевые соединения.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3