clojure Swank Server öffnet öffentlich Port?
Frage
(Diese Frage Downvoted worden, was ich seltsam finde. Wie habe ich beleidigt?)
Habe ich Recht zu denken, dass Laufen eines Swank Server öffnet in der Regel Port 4005 auf die Welt, nicht gebunden an localhost-only-Verbindungen?
So jemand in einem Café Hacking ist nicht nur erlaubt Passanten beliebigen Code auf dem Computer auszuführen, sondern ihnen eine schöne Oberfläche, es zu tun mit gibt.
Es scheint, dass, wenn ich laufe einen Swank Server entweder mit 'mvn clojure: Swank' oder 'lein Swank', oder (swank.swank / start-server "/ tmp / yo")
dann bekomme ich so etwas wie (Danke Mike!):
$lsof -i -P
java 11693 john 13r IPv6 6701891 0t0 TCP *:34983 (LISTEN)
und in der Tat kann ich von einem Emacs verbinden auf einem anderen Rechner im selben Netzwerk ausgeführt wird.
(swank.swank/start-server "/tmp/yo")
Wenn ich den Bediener von Hand starten, erzeugt es die folgende Ausgabe
Connection opened on local port 34983
#<ServerSocket ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=34983]>
Während:
(swank.swank/start-server "/tmp/yo" :host "localhost")
erzeugt:
Connection opened on local port 40368
#<ServerSocket ServerSocket[addr=localhost/127.0.0.1,port=0,localport=40368]>
Welche scheint eher wie ich es erwartet hatte.
Gibt es einen guten Grund, dies zu tun?
Alle Ideen, wie es die konventionellere Möglichkeiten, es zu starten überzeugt werden können, nur akzeptieren Verbindungen von lokalen Prozessen?
Lösung
Völlig berechtigte Frage.
Nach einem Schleim-Server öffnen, werden Sie feststellen:
eames:~:% lsof -i -P | grep 4005
java 41477 mjd 33u IPv6 0x0b8956d0 0t0 TCP [::127.0.0.1]:4005 (LISTEN)
Die Verbindung wird auf der lokalen Adresse an Port lauscht 4005. Diese Schnittstelle ist nicht mit dem Netzwerk ausgesetzt ist, so dass andere Geräte im Netzwerk können nicht auf Ihren Schleim-Server verbinden.
edit:
Dies war mein Ergebnis Swank des Beginnens mit Leiningen, die „localhost“ als Argument an swank.swank/start-server
bietet. Sie können zu überprüfen möchten, dass die Leiningen-Plugin nicht-lokale Ports geöffnet wird.
Sie haben Recht, dass Swank die Verbindung an jeder Adresse öffnet, wenn ein Host nicht ausdrücklich vorgesehen ist. Der entsprechende Code ist swank.util.net.sockets/make-server-socket
, und dieses Verhalten dokumentiert. Ich bin damit einverstanden, es ist wie der falsche Standard scheint.
Andere Tipps
es nimmt nur eine Verbindung so, auch wenn es in der Welt ausgesetzt ist es nicht mehr hören, wenn Sie eine Verbindung herstellen.
Wenn Sie die Clojure-maven-Plugin verwenden, Version 1.3.4 wurde vor kurzem veröffentlicht, die nun den Protz-Server gegen localhost startet um dieses Problem zu vermeiden.
Dieses Verhalten kann mit in Ihrer pom.xml-Datei konfiguriert werden:
<configuration>
<swankHost>someotherhostname</swankHost>
</configuration>
oder von der Kommandozeile mit:
mvn clojure:swank -Dclojure.swank.host=someotherhostname