يعد تحديد عناوين IP لخادم Linux أمرًا ضروريًا لاتصالات الشبكة ونشر التطبيقات. تقدم هذه المقالة حلاً برمجيًا في لغة C لاسترداد عناوين IP لجهاز Linux بشكل فعال.
الهدف هو الحصول برمجيًا على عناوين IP لخادم Linux ضمن تطبيق C. . قد يحتوي الخادم على عناوين IP متعددة، بما في ذلك عنوان مضيف محلي وعنوان داخلي (إدارة) وعنوان خارجي (عام). الهدف هو استرداد عنوان IP الخارجي لربط التطبيق.
توفر مكتبة 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 لواجهة معينة.
توفر وظيفة getifaddrs() وsiocgifaddr مع SIOCGIFADDR طرقًا قوية لاسترداد عناوين IP لجهاز Linux شركة . تتيح هذه الأساليب للتطبيقات التكيف ديناميكيًا مع تغييرات الشبكة وإنشاء اتصالات الشبكة الضرورية.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3