Linux サーバーの IP アドレスの特定は、ネットワーク通信とアプリケーションの展開に不可欠です。この記事では、Linux マシンの IP アドレスを効果的に取得するための C でのプログラムによるソリューションを紹介します。
目的は、C アプリケーション内の Linux サーバーの IP アドレスをプログラムで取得することです。 。サーバーには、ローカルホスト アドレス、内部 (管理) アドレス、外部 (パブリック) アドレスなど、複数の IP アドレスがある場合があります。目的は、アプリケーション バインディング用の外部 IP アドレスを取得することです。
標準 C ライブラリには、システムのネットワーク インターフェイスと IP アドレスに関する情報を取得する getifaddrs() 関数が用意されています。 getifaddrs() を使用して、ローカル マシンのすべての IPv4 および IPv6 アドレスを出力する例を次に示します。
#include#include #include 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 で。これらのアプローチにより、アプリケーションはネットワークの変化に動的に適応し、必要なネットワーク接続を確立できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3