「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C++ で Linux サーバーの IP アドレスをプログラム的に決定するにはどうすればよいですか?

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

2024 年 12 月 21 日に公開
ブラウズ:388

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

Fazit

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

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3