كيفية الحصول على IP العميل من خادم Java من خلال Xinetd؟

StackOverflow https://stackoverflow.com/questions/2305614

سؤال

أقوم بتشغيل خادم Java صغير من خلال Xinetd Superserver. أرغب في الحصول على عنوان IP الأصلي للعميل ولكن لا يمكنني ذلك لأن التدفقات بين Xinetd و Java (Stin/stdout).

هل يعرف أحدهم كيفية الحصول على عنوان IP للعميل ، دون أن يبحث عن ملف سجل xinetd؟ (يبدو حلاً سيئًا بالنسبة لي)

شكرًا !

هل كانت مفيدة؟

المحلول

بالنظر إلى الموقف الذي وصفته ، فإن الصيد في ملف تسجيل الدخول Xinetd هو الخيار الوحيد لك.

إذا كان تطبيق Java الخاص بك يتحدث إلى العميل عبر الإدخال القياسي والإخراج القياسي ، فلا توجد طريقة لتطبيق الوصول إلى المقبس الأساسي. في الواقع ، لا أعتقد أنه يمكنك القيام بذلك بأي لغة.

تعديل : في الواقع ، ربما يمكنك القيام بذلك في C و C ++ لأنها تعرض واصفات الملفات (FDS) ولديها واجهات برمجة تطبيقات المكتبة للقيام بعمليات المقبس باستخدام FDS.

لكنه لن يعمل في جافا النقية. حتى لو كان بإمكانك الانتقال إلى FD داخل كائنات الدفق المرتبطة بـ System.in أو System.out, ، لا أعتقد أن مكتبات فئة Java توفر واجهة برمجة تطبيقات لتحويل FD إلى أ Socket هدف. للقيام بعمليات المقبس على FD 0 و 1 ستحتاج إلى اللجوء إلى JNI والرمز الأصلي.

وكما يشير المعلق ، إذا كان العميل الحقيقي وراء وكيل ، فإن IP العميل الذي تحصل عليه من المقبس سيكون IP للوكيل.

نصائح أخرى

أعتقد أنه يمكنك الاتصال getpeername على مآخذ TCP (ولكن ليس UDP) ، انظر ستيفنز الفصل 4.10.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top