C で Linux マシンの IP アドレスをプログラムで取得する方法
はじめに:
この記事は、C で書かれたアプリケーションを実行する Linux マシンの IP アドレスを決定するという、一般的なプログラミングの課題に対処します。ここでの焦点は、サーバーの外部 IP アドレスまたはパブリック IP アドレスの取得です。
問題ステートメント:
このタスクは、IP アドレスを取得する C プログラムを開発することです。 Linux マシン、特に指定されたネットワーク (パブリック IP) に割り当てられたマシン。これにより、アプリケーションはネットワーク通信のために目的の外部アドレスにバインドできるようになります。
解決策:
この問題を解決するには、getifaddrs() 関数呼び出しを利用します。これは POSIX 標準の一部であるため、Linux で利用できます。この関数は、すべてのネットワーク インターフェイスを反復処理して IP アドレスを取得する便利な方法を提供します。
実装:
次の C コードは、getifaddrs() の使用方法を示しています。関数:
#include <stdio.h> #include <sys/types.h> #include <ifaddrs.h> #include <netinet/in.h> #include <string.h> #include <arpa/inet.h> int main (int argc, const char * argv[]) { 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) { // check it is IP4 // is a valid IP4 Address tmpAddrPtr=&((struct sockaddr_in *)ifa->ifa_addr)->sin_addr; char addressBuffer[INET_ADDRSTRLEN]; inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN); printf("%s IP Address %s\n", ifa->ifa_name, addressBuffer); } else if (ifa->ifa_addr->sa_family == AF_INET6) { // check it is IP6 // is a valid IP6 Address tmpAddrPtr=&((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr; char addressBuffer[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN); printf("%s IP Address %s\n", ifa->ifa_name, addressBuffer); } } if (ifAddrStruct!=NULL) freeifaddrs(ifAddrStruct); return 0; }
説明:
このコードは、ifa ループを使用してすべてのネットワーク インターフェイスを反復処理し、各インターフェイスのアドレス ファミリをチェックします。 IPv4 または IPv6 の場合は、アドレスを文字列に変換し、インターフェイス名とともに出力します。
このアプローチにより、Linux マシンに割り当てられたすべての IP アドレスを検出し、バインドする目的のパブリック IP を特定できます。目的。
以上がC で Linux マシンのパブリック IP アドレスをプログラム的に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。