ホームページ > バックエンド開発 > C++ > C で Linux サーバーの IP アドレスをプログラム的に決定するにはどうすればよいですか?

C で Linux サーバーの IP アドレスをプログラム的に決定するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-10 20:43:11
オリジナル
394 人が閲覧しました

How Can I Programmatically Determine a Linux Server's IP Addresses in C  ?

C での Linux サーバーの IP アドレスのプログラムによる決定

はじめに

Linux サーバーの IP アドレスの特定は、ネットワーク通信とアプリケーションの展開に不可欠です。この記事では、Linux マシンの IP アドレスを効果的に取得するための C でのプログラムによるソリューションを紹介します。

問題点

目的は、C アプリケーション内の Linux サーバーの IP アドレスをプログラムで取得することです。 。サーバーには、ローカルホスト アドレス、内部 (管理) アドレス、外部 (パブリック) アドレスなど、複数の IP アドレスがある場合があります。目的は、アプリケーション バインディング用の外部 IP アドレスを取得することです。

Lösung

標準 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 アドレスを取得できます。

Fazit

getifaddrs() 関数と SIOCGIFADDR を備えた siocgifaddr は、Linux マシンの IP アドレスを取得するための堅牢な方法を提供します。 C で。これらのアプローチにより、アプリケーションはネットワークの変化に動的に適応し、必要なネットワーク接続を確立できます。

以上がC で Linux サーバーの IP アドレスをプログラム的に決定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート