Clojure Swank Server يفتح المنفذ العام؟
سؤال
(تم تخفيض هذا السؤال ، وهو ما أجده غريبًا. كيف أساءت؟)
هل أنا محق في التفكير في أن تشغيل خادم Swank عادةً ما يفتح المنفذ 4005 على العالم ، وليس ملزمًا بالاتصالات المحلية فقط؟
لذلك لا يسمح أي شخص يخترق في أحد المقاهي فقط بتنفيذ التعليمات البرمجية التعسفية على جهاز الكمبيوتر الخاص بهم ، بل يمنحهم واجهة لطيفة للقيام بذلك.
يبدو أنه عندما أقوم بتشغيل خادم Swank مع "MVN Clojure: Swank" ، أو "Lein Swank" ، أو (Swank.swank/START-Server "/TMP/YO")
ثم أحصل على شيء مثل (شكرا مايك!):
$lsof -i -P
java 11693 john 13r IPv6 6701891 0t0 TCP *:34983 (LISTEN)
وبالفعل يمكنني الاتصال من emacs تعمل على جهاز آخر على نفس الشبكة.
(swank.swank/start-server "/tmp/yo")
إذا بدأت الخادم باليد ، فإنه ينتج الإخراج التالي
Connection opened on local port 34983
#<ServerSocket ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=34983]>
بينما:
(swank.swank/start-server "/tmp/yo" :host "localhost")
ينتج عنه:
Connection opened on local port 40368
#<ServerSocket ServerSocket[addr=localhost/127.0.0.1,port=0,localport=40368]>
وهو ما يبدو أنه أشبه كنت أتوقعه.
هل هناك أي سبب وجيه للقيام بذلك؟
أي أفكار حول كيفية إقناع الطرق التقليدية للبدء ، يمكن إقناعها بقبول الروابط من العمليات المحلية فقط؟
المحلول
سؤال صحيح تماما.
بعد فتح خادم الوحل ، ستلاحظ:
eames:~:% lsof -i -P | grep 4005
java 41477 mjd 33u IPv6 0x0b8956d0 0t0 TCP [::127.0.0.1]:4005 (LISTEN)
يستمع الاتصال على العنوان المحلي في المنفذ 4005. هذه الواجهة لا تتعرض للشبكة ، لذلك لا يمكن للأجهزة الأخرى على الشبكة الاتصال بخادم الوحل الخاص بك.
تعديل:
كانت هذه هي النتيجة الخاصة بي لبدء Swank باستخدام Lininingen ، والتي توفر "المضيف المحلي" كحجة swank.swank/start-server
. قد ترغب في التحقق من مضاعفة أن البرنامج المساعد Lininingen يفتح منافذ غير محلية.
أنت محق في أن Swank يفتح الاتصال على كل عنوان إذا لم يتم توفير مضيف بشكل صريح. الرمز ذي الصلة هو swank.util.net.sockets/make-server-socket
, ، وهذا السلوك موثق. أوافق ، يبدو أنه التخلف الخاطئ.
نصائح أخرى
إنه يقبل اتصالًا واحدًا فقط ، لذا حتى لو تعرض للعالم ، فإنه يتوقف عن الاستماع بمجرد الاتصال.
إذا كنت تستخدم Clojure-Maven-Plugin ، فقد تم إصدار الإصدار 1.3.4 مؤخرًا والذي يبدأ الآن خادم Swank ضد LocalHost لمنع هذه المشكلة.
يمكن تكوين هذا السلوك في ملف pom.xml الخاص بك مع:
<configuration>
<swankHost>someotherhostname</swankHost>
</configuration>
أو من سطر الأوامر مع:
mvn clojure:swank -Dclojure.swank.host=someotherhostname