애플리케이션을 실행하는 Linux 서버의 IP 주소를 프로그래밍 방식으로 얻는 방법 , 특히 외부(공용) 네트워크인가요?
Linux 서버에는 일반적으로 각각 고유한 IP 주소가 있는 여러 네트워크 인터페이스가 있습니다.
getifaddrs 기능을 사용하면 컴퓨터와 연결된 모든 IP 주소를 검색할 수 있습니다. ifaddrs 구조의 연결 목록을 제공합니다. C 예는 다음과 같습니다.
#include <stdio.h> #include <sys/types.h> #include <ifaddrs.h> #include <netinet/in.h> #include <string.h> #include <arpa/inet.h> using namespace std; int main() { struct ifaddrs *ifAddrStruct, *ifa; void *tmpAddrPtr; getifaddrs(&ifAddrStruct); for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) { if (!ifa->ifa_addr) { continue; } if (ifa->ifa_addr->sa_family == AF_INET) { tmpAddrPtr = &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr; char addressBuffer[INET_ADDRSTRLEN]; inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN); printf("%s IP Address: %s\n", ifa->ifa_name, addressBuffer); } else if (ifa->ifa_addr->sa_family == AF_INET6) { tmpAddrPtr = &((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr; char addressBuffer[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN); printf("%s IP Address: %s\n", ifa->ifa_name, addressBuffer); } } if (ifAddrStruct != NULL) freeifaddrs(ifAddrStruct); return 0; }
이 코드는 모든 네트워크 인터페이스를 반복하고 IPv4 및 IPv6 주소 모두에 대한 IP 주소를 인쇄합니다.
네트워크 인터페이스 이름(예: eth0)을 검사하여 , eth1 등)을 사용하면 외부(공용) IP 주소를 식별하고 이를 사용하여 애플리케이션을 바인딩할 수 있습니다.
위 내용은 C에서 Linux 서버의 공용 IP 주소를 프로그래밍 방식으로 얻는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!