Linux サーバーの IP アドレスの特定は、ネットワーク通信とアプリケーションの展開に不可欠です。この記事では、Linux マシンの IP アドレスを効果的に取得するための C でのプログラムによるソリューションを紹介します。
目的は、C アプリケーション内の Linux サーバーの IP アドレスをプログラムで取得することです。 。サーバーには、ローカルホスト アドレス、内部 (管理) アドレス、外部 (パブリック) アドレスなど、複数の IP アドレスがある場合があります。目的は、アプリケーション バインディング用の外部 IP アドレスを取得することです。
標準 C ライブラリには、システムのネットワーク インターフェイスと IP アドレスに関する情報を取得する getifaddrs() 関数が用意されています。 getifaddrs() を使用して、ローカル マシンのすべての IPv4 および IPv6 アドレスを出力する例を次に示します。
#include <stdio.h> #include <sys/types.h> #include <ifaddrs.h> int main() { struct ifaddrs *ifAddrStruct = NULL; struct ifaddrs *ifa = NULL; void *tmpAddrPtr = NULL; getifaddrs(&ifAddrStruct); for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) { if (!ifa->ifa_addr) { continue; } if (ifa->ifa_addr->sa_family == AF_INET) { // IPv4 address tmpAddrPtr = &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr; char addressBuffer[INET_ADDRSTRLEN]; inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN); printf("IPv4 Address %s\n", addressBuffer); } else if (ifa->ifa_addr->sa_family == AF_INET6) { // IPv6 address tmpAddrPtr = &((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr; char addressBuffer[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN); printf("IPv6 Address %s\n", addressBuffer); } } if (ifAddrStruct != NULL) { freeifaddrs(ifAddrStruct); } return 0; }
外部 IP アドレスを取得するには、同様のアプローチを使用できますが、特に接続するインターフェイスを検索します。外部ネットワークへ。 siocgifaddr を SIOCGIFADDR とともに使用すると、特定のインターフェイスの IP アドレスを取得できます。
getifaddrs() 関数と SIOCGIFADDR を備えた siocgifaddr は、Linux マシンの IP アドレスを取得するための堅牢な方法を提供します。 C で。これらのアプローチにより、アプリケーションはネットワークの変化に動的に適応し、必要なネットワーク接続を確立できます。
以上がC で Linux サーバーの IP アドレスをプログラム的に決定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。