"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني تحديد عناوين IP الخاصة بخادم Linux برمجيًا في لغة C++؟

كيف يمكنني تحديد عناوين IP الخاصة بخادم Linux برمجيًا في لغة C++؟

تم النشر بتاريخ 2024-12-21
تصفح:157

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

تحديد عناوين IP لخادم Linux برمجيًا في لغة C

مقدمة

يعد تحديد عناوين IP لخادم Linux أمرًا ضروريًا لاتصالات الشبكة ونشر التطبيقات. تقدم هذه المقالة حلاً برمجيًا في لغة C لاسترداد عناوين IP لجهاز Linux بشكل فعال.

بيان المشكلة

الهدف هو الحصول برمجيًا على عناوين IP لخادم Linux ضمن تطبيق C. . قد يحتوي الخادم على عناوين IP متعددة، بما في ذلك عنوان مضيف محلي وعنوان داخلي (إدارة) وعنوان خارجي (عام). الهدف هو استرداد عنوان IP الخارجي لربط التطبيق.

Lösung

توفر مكتبة C القياسية وظيفة getifaddrs () للحصول على معلومات حول واجهات الشبكة وعناوين IP للنظام. فيما يلي مثال يستخدم 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 طرقًا قوية لاسترداد عناوين IP لجهاز Linux شركة . تتيح هذه الأساليب للتطبيقات التكيف ديناميكيًا مع تغييرات الشبكة وإنشاء اتصالات الشبكة الضرورية.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3