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

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

Mary-Kate Olsen
풀어 주다: 2024-12-10 00:19:14
원래의
330명이 탐색했습니다.

How to Programmatically Retrieve a Linux Machine's IP Addresses in C  ?

C에서 Linux 시스템의 IP 주소를 검색하는 방법

문제:

Linux의 IP 주소 확인 특히 여러 잠재적인 공용 IP 주소를 대상으로 C를 사용하여 프로그래밍 방식으로 기계를 사용합니다.

해결책:

getifaddrs() 사용

getifaddrs() 함수는 Linux 및 POSIX에서 IP 주소를 검색하는 보다 안정적인 방법을 제공합니다. 호환 운영 체제. 이는 각각 네트워크 인터페이스 및 관련 주소를 나타내는 ifaddrs 구조의 연결된 목록을 반환합니다. 다음은 사용법을 보여주는 코드 예제입니다.

#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;
}
로그인 후 복사

코드에서 getifaddrs()는 ifAddrStruct 연결 목록을 네트워크 인터페이스 정보로 채웁니다. 각 ifaddrs 구조에는 IP 주소를 나타내는 소켓 주소 구조에 대한 포인터인 ifa_addr 멤버가 포함되어 있습니다. AF_INET은 IPv4 주소용이고 AF_INET6은 IPv6 주소용입니다.

코드는 연결된 목록을 반복하고 ifa_addr이 유효한지 확인한 다음 IP 주소 문자열을 인간 문자열로 변환하여 검색하고 인쇄합니다. inet_ntop()을 사용하여 읽을 수 있는 형식입니다.

공용 IP 주소를 식별하려면 네트워크 인터페이스 이름(예: "eth0") 또는 IP 주소를 비교하여 어느 주소가 외부 네트워크와 일치하는지 확인하세요.

위 내용은 C에서 Linux 시스템의 IP 주소를 프로그래밍 방식으로 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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