> 백엔드 개발 > C++ > C에서 Linux 시스템의 공용 IP 주소를 프로그래밍 방식으로 얻는 방법은 무엇입니까?

C에서 Linux 시스템의 공용 IP 주소를 프로그래밍 방식으로 얻는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-10 09:18:14
원래의
467명이 탐색했습니다.

How to Programmatically Get a Linux Machine's Public IP Address in C  ?

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(&amp;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=&amp;((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=&amp;((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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿