C에서 Linux 시스템의 IP 주소를 프로그래밍 방식으로 얻는 방법
소개:
이 기사에서는 C로 작성된 애플리케이션을 실행하는 Linux 시스템의 IP 주소를 결정하는 일반적인 프로그래밍 문제를 다룹니다. 여기서 초점은 서버의 외부 또는 공용 IP 주소를 얻는 것입니다.
문제 설명:
과제는 IP 주소를 검색하는 C 프로그램을 개발하는 것입니다. Linux 시스템, 특히 지정된 네트워크(공용 IP)에 할당된 시스템입니다. 이렇게 하면 애플리케이션이 네트워크 통신을 위해 원하는 외부 주소에 자신을 바인딩할 수 있습니다.
해결책:
이 문제를 해결하기 위해 getifaddrs() 함수 호출을 활용합니다. 이는 POSIX 표준의 일부이므로 Linux에서 사용할 수 있습니다. 이 함수는 모든 네트워크 인터페이스를 반복하고 해당 IP 주소를 검색하는 편리한 방법을 제공합니다.
구현:
다음 C 코드는 getifaddrs()를 사용하는 방법을 보여줍니다. 함수:
#include <stdio.h> #include <sys/types.h> #include <ifaddrs.h> #include <netinet/in.h> #include <string.h> #include <arpa/inet.h> int main (int argc, const char * argv[]) { 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) { // check it is IP4 // is a valid IP4 Address 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) { // check it is IP6 // is a valid IP6 Address 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; }
설명:
이 코드는 ifa 루프를 사용하여 모든 네트워크 인터페이스를 반복하고 각 인터페이스의 주소 계열을 확인합니다. IPv4 또는 IPv6인 경우 주소를 문자열로 변환하여 인터페이스 이름과 함께 인쇄합니다.
이 접근 방식을 사용하면 Linux 시스템에 할당된 모든 IP 주소를 감지하고 바인딩을 위해 원하는 공용 IP를 식별할 수 있습니다. 목적입니다.
위 내용은 C에서 Linux 시스템의 공용 IP 주소를 프로그래밍 방식으로 얻는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!