C でのローカル IP アドレスとサブネット マスクの取得
ネットワーク プログラミングの領域では、IP アドレスとサブネットを決定することが必要になることがよくあります。ローカルコンピュータのマスク。この情報は、ローカル ネットワーク上でのメッセージの送信など、さまざまな目的に使用できます。
ローカル IP アドレスとサブネット マスクを取得するタスクは簡単そうに見えますが、最初に思ったよりも複雑な場合があります。多くのコンピュータでは、異なるネットワーク インターフェイスに複数の IP アドレスが割り当てられている場合があります。したがって、どの IP アドレスが特定のネットワーク コンテキストに関連しているかを理解することが重要です。
場合によっては、プログラムが通信しているリモート コンピューターから IP アドレスを要求する方が有益な場合があります。このアプローチにより、特定のコンピューターから認識される IP アドレスを決定し、接続のコンテキストでの関連性を確保できます。
Unix/Mac の実装
Unix およびMac システムでは、ローカル マシンに関連付けられているすべての IP アドレスのリストを取得するには、getifaddrs() 関数を使用することをお勧めします。コード スニペットの例を次に示します。
#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 アドレス取得の微妙な違いを理解することで、この情報をさまざまなネットワーキング アプリケーションに効果的に活用できます。
以上がC でローカル IP アドレスとサブネット マスクを決定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。