2010-09-19 13 views
10

(Esta pregunta ha sido rechazada, lo cual me parece extraño. ¿Cómo he ofendido?)clojure swank server abre el puerto público?

¿Tengo razón al pensar que ejecutar un servidor swank generalmente abre el puerto 4005 al mundo, no vinculado a las conexiones solo localhost?

De modo que cualquier intrusión en un café no solo permite a los transeúntes ejecutar código arbitrario en su computadora, sino que también les proporciona una interfaz agradable para hacerlo.

Parece que cuando corro un servidor ostentoso, ya sea con 'clojure mvn: Swank', o 'Swank Lein', o (swank.swank/start-server "/ tmp/yo")

entonces obtener algo así como (gracias Mike!):

$lsof -i -P 
java  11693 john 13r IPv6 6701891  0t0 TCP *:34983 (LISTEN) 

y de hecho me puedo conectar desde un emacs que se ejecutan en otro equipo de la misma red.

(swank.swank/start-server "/tmp/yo") 

Si comienzo el servidor con la mano, se produce la siguiente salida

Connection opened on local port 34983 
#<ServerSocket ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=34983]> 

Considerando lo siguiente:

(swank.swank/start-server "/tmp/yo" :host "localhost") 

produce:

Connection opened on local port 40368 
#<ServerSocket ServerSocket[addr=localhost/127.0.0.1,port=0,localport=40368]> 

que parece más como si Estaba esperando.

¿Hay alguna buena razón para hacer esto?

¿Alguna idea de cómo podrían convencerse las formas más convencionales de iniciarla para aceptar únicamente conexiones de procesos locales?

Respuesta

6

Pregunta totalmente válida.

Después de abrir un servidor de limo, usted notará:

eames:~:% lsof -i -P | grep 4005 
java  41477 mjd 33u IPv6 0x0b8956d0  0t0 TCP [::127.0.0.1]:4005 (LISTEN) 

La conexión está escuchando en la dirección local en el puerto 4005. Esta interfaz no está expuesto a la red, por lo que otros dispositivos de la red no se puede conectar a tu servidor de limo

edición:

Este fue mi resultado de iniciar Swank usando Leiningen, que ofrece "localhost" como argumento para swank.swank/start-server. Es posible que desee comprobar que el complemento leiningen está abriendo puertos no locales.

Tiene razón que swank abre la conexión en cada dirección si no se proporciona explícitamente un host. El código relevante es swank.util.net.sockets/make-server-socket, y este comportamiento está documentado. Estoy de acuerdo, parece ser el predeterminado incorrecto.

+0

java 10561 John 14r IPv6 TCP 6.521.448 0T0 *: 4005 (ESCUCHAR) –

+0

Ese es un puerto expuesto públicamente. ¿Cómo estás empezando swank? –

+0

mike, perdón por la respuesta supersecunda. Estaba editando mi original y de alguna manera no me di cuenta de que mi copia y pega había ido a los comentarios. Gracias por el diagnóstico! –

1

solo acepta una conexión, por lo que incluso si está expuesta al mundo, deja de escuchar una vez que se conecta.

+0

y es un poco molesto que no empiece a escucharse cuando te desconectas (aunque estoy mucho más seguro de esta manera) y realmente no es mucho más trabajo reiniciarlo en lugar de tener que acordarte de detenerlo cuando termine. –

1

Si está utilizando el plugin clojure-maven-plugin, recientemente se lanzó la versión 1.3.4 que ahora inicia el servidor swank contra localhost para evitar este problema.

Este comportamiento se puede configurar en el archivo pom.xml con:

<configuration> 
    <swankHost>someotherhostname</swankHost> 
</configuration> 

o desde la línea de comandos con:

mvn clojure:swank -Dclojure.swank.host=someotherhostname 
+0

Es maravilloso que se haya tomado la molestia de cerrar esta laguna dentro de un día de que yo lo note. ¡Bien hecho Mark! ¡Ojalá pudiera aceptar dos respuestas! –

+0

He probado la versión de instantánea (git clone seguido por mvn install seguido de la modificación del proyecto pom.xml). Funciona un regalo. –

Cuestiones relacionadas