C でのローカル コンピューターの IP アドレスとサブネット マスクの決定
ローカル コンピューターの IP アドレスとサブネット マスクの取得は、さまざまなネットワーク操作に不可欠です。 C では、このプロセスはプラットフォーム固有のシステム コールを利用して実行できます。
1. Unix/MacOS
Unix および macOS システムの場合、getifaddrs 関数を使用すると、ネットワーク インターフェイス アドレスのリンク リストを取得できます。このリストを反復処理すると、各インターフェイスの IP アドレス、サブネット マスク、およびその他の関連情報にアクセスできるようになります:
#include <sys/types.h> #include <ifaddrs.h> struct ifaddrs *ifaddr; int s; if ((s = getifaddrs(&ifaddr)) == -1) { // Error handling } for (struct ifaddrs *ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { if (ifa->ifa_addr->sa_family == AF_INET) { char addr[INET_ADDRSTRLEN]; inet_ntop(AF_INET, &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr, addr, INET_ADDRSTRLEN); printf("IP Address: %s\n", addr); char netmask[INET_ADDRSTRLEN]; inet_ntop(AF_INET, &((struct sockaddr_in *)ifa->ifa_netmask)->sin_addr, netmask, INET_ADDRSTRLEN); printf("Subnet Mask: %s\n", netmask); } }
2. Windows
Windows システムの場合、GetAdaptersAddresses 関数は同様の機能を提供します。この関数は、ローカル コンピューター上のすべてのネットワーク アダプターの情報をバッファーに書き込みます。
#include <iphlpapi.h> PIP_ADAPTER_ADDRESSES addresses; ULONG outBufLen = 0; DWORD res = GetAdaptersAddresses(AF_INET, 0, NULL, addresses, &outBufLen); if (res != ERROR_SUCCESS) { // Error handling } for (PIP_ADAPTER_ADDRESSES adapter = addresses; adapter != NULL; adapter = adapter->Next) { char ip[MAX_PATH + 1]; InetNtopA(AF_INET, &adapter->FirstUnicastAddress->Address.Ipv4.sin_addr, ip, MAX_PATH + 1); printf("IP Address: %s\n", ip); char netmask[MAX_PATH + 1]; InetNtopA(AF_INET, &adapter->FirstUnicastAddress->NetMask.Ipv4.sin_addr, netmask, MAX_PATH + 1); printf("Subnet Mask: %s\n", netmask); }
次の手順に従うと、 C でローカル コンピューターの IP アドレスとサブネット マスクの両方を取得でき、次のことが可能になります。ネットワーク接続を確立し、さまざまな通信操作を効果的に実行します。
以上がC でローカル コンピュータの IP アドレスとサブネット マスクを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。