> 백엔드 개발 > C++ > 본문

C에서 로컬 IP 주소와 서브넷 마스크를 확인하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-11-10 02:38:02
원래의
690명이 탐색했습니다.

How to Determine the Local IP Address and Subnet Mask in C  ?

C에서 로컬 IP 주소 및 서브넷 마스크 검색

네트워크 프로그래밍 영역에서는 IP 주소와 서브넷을 결정해야 하는 경우가 많습니다. 로컬 컴퓨터의 마스크. 이 정보는 로컬 네트워크에서 메시지를 보내는 등 다양한 목적으로 사용될 수 있습니다.

로컬 IP 주소와 서브넷 마스크를 검색하는 작업은 간단해 보일 수 있지만 처음에 보이는 것보다 까다로울 수 있습니다. 많은 컴퓨터에는 서로 다른 네트워크 인터페이스에 여러 IP 주소가 할당되어 있을 수 있습니다. 따라서 특정 네트워크 컨텍스트와 관련된 IP 주소를 이해하는 것이 중요합니다.

어떤 경우에는 프로그램이 통신하는 원격 컴퓨터에서 IP 주소를 요청하는 것이 더 유리할 수 있습니다. 이 접근 방식을 사용하면 특정 컴퓨터에 표시되는 IP 주소를 확인하여 연결 맥락에서 관련성을 보장할 수 있습니다.

Unix/Mac 구현

Unix 및 Mac 시스템에서는 getifaddrs() 함수를 사용하여 로컬 시스템과 관련된 모든 IP 주소 목록을 검색하는 데 권장되는 접근 방식입니다. 다음은 예제 코드 조각입니다.

#include <ifaddrs.h>

void GetNetworkInterfaceInfos() {
  struct ifaddrs *ifaddr;
  int status = getifaddrs(&ifaddr);
  if (status != 0) {
    // Error handling
  }

  for (struct ifaddrs *ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
    if (ifa->ifa_addr == NULL) {
      continue;
    }
    if (ifa->ifa_addr->sa_family == AF_INET) { // IPv4 address
      struct sockaddr_in *in = (struct sockaddr_in *)ifa->ifa_addr;
      printf("IP address: %s\n", inet_ntoa(in->sin_addr));

      // Get subnet mask if available
      if (ifa->ifa_netmask != NULL) {
        struct sockaddr_in *mask = (struct sockaddr_in *)ifa->ifa_netmask;
        printf("Subnet mask: %s\n", inet_ntoa(mask->sin_addr));
      }
    } else if (ifa->ifa_addr->sa_family == AF_INET6) { // IPv6 address
      // Handle IPv6 addresses here
    }
  }

  freeifaddrs(ifaddr);
}
로그인 후 복사

Windows 구현

Windows에서는 GetAdaptersAddresses() 함수를 사용하여 유사한 기능을 구현할 수 있습니다.

#include <iphlpapi.h>

void GetNetworkInterfaceInfos() {
  PIP_ADAPTER_ADDRESSES adapter_addresses;
  ULONG size = 0;
  GetAdaptersAddresses(AF_UNSPEC, 0, NULL, adapter_addresses, &size);
  adapter_addresses = (PIP_ADAPTER_ADDRESSES)HeapAlloc(GetProcessHeap(), 0, size);
  GetAdaptersAddresses(AF_UNSPEC, 0, NULL, adapter_addresses, &size);

  for (PIP_ADAPTER_ADDRESSES adapter = adapter_addresses; adapter; adapter = adapter->Next) {
    printf("IP address: %s\n", adapter->IpAddressList.IpAddress.String);

    // Get subnet mask if available
    if (adapter->SubnetMaskList.IpAddress.String) {
      printf("Subnet mask: %s\n", adapter->SubnetMaskList.IpAddress.String);
    }
  }

  HeapFree(GetProcessHeap(), 0, adapter_addresses);
}
로그인 후 복사

추가 고려 사항

여러 IP 주소를 처리할 때 특정 요구 사항에 적합한 IP 주소를 고려하는 것이 중요합니다. 이 결정은 프로그램의 상황과 네트워크 구성에 따라 달라집니다. 로컬 IP 주소 검색의 미묘한 차이를 이해하면 다양한 네트워킹 애플리케이션에 이 정보를 효과적으로 활용할 수 있습니다.

위 내용은 C에서 로컬 IP 주소와 서브넷 마스크를 확인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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