сервер clojure swank открывает публичный порт? - PullRequest
10 голосов
/ 20 сентября 2010

(Этот вопрос был опущен, что я нахожу странным. Как я обиделся?)

Правильно ли я считаю, что запуск сервера-подзарядки обычно открывает миру порт 4005, а не привязывается к localhost-только соединения?

Так что любой, кто взламывает кафе, не только позволяет прохожим выполнять произвольный код на своем компьютере, но и дает им приятный интерфейс для этого.

Похоже,что когда я запускаю сервер 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]>

Что больше похоже на то, что я ожидал.

Есть лиесть веская причина для этого?

Есть идеи, как это более условно?Можно ли убедить способы его запуска принимать подключения только от локальных процессов?

Ответы [ 3 ]

5 голосов
/ 20 сентября 2010

Полностью действительный вопрос.

После открытия сервера слизи вы заметите:

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

Соединение прослушивает локальный адрес порта 4005. Этот интерфейс не доступен для сети, поэтому другие устройства в сети не могут подключиться к вашему серверу слизи.

редактирование:

Это был мой результат запуска swank с использованием leiningen, который предоставляет "localhost" в качестве аргумента swank.swank/start-server. Вы можете дважды проверить, что плагин leiningen открывает нелокальные порты.

Вы правы, что swank открывает соединение по каждому адресу, если хост явно не указан. Соответствующий код - swank.util.net.sockets/make-server-socket, и это поведение задокументировано. Я согласен, это похоже на неправильный дефолт.

1 голос
/ 21 сентября 2010

Если вы используете clojure-maven-plugin, недавно была выпущена версия 1.3.4, которая теперь запускает сервер swank против localhost, чтобы предотвратить эту проблему.

Это поведение может быть настроено в вашем файле pom.xml с помощью:

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

или из командной строки:

mvn clojure:swank -Dclojure.swank.host=someotherhostname
1 голос
/ 20 сентября 2010

он принимает только одно соединение, поэтому даже если он находится в мире, он перестает слушать, когда вы подключаетесь.

...