clojure swank服务器打开公共端口?

时间:2010-09-19 20:17:27

标签: emacs clojure swank

(这个问题已被低估了,我觉得很奇怪。我怎么冒犯了?)

我是否认为运行swank服务器通常会向全世界打开端口4005,而不是仅限于localhost-only连接?

因此,任何黑客入侵咖啡馆不仅允许路人在他们的计算机上执行任意代码,而且还为他们提供了一个很好的界面来实现它。

当我使用'mvn clojure:swank'或'lein swank'或(swank.swank / start-server“/ tmp / yo”)运行swank服务器时

然后我得到类似的东西(感谢迈克!):

$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 个答案:

答案 0 :(得分:5)

完全有效的问题。

打开粘液服务器后,您会注意到:

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

连接正在侦听端口4005上的本地地址。此接口未向网络公开,因此网络上的其他设备无法连接到您的slime服务器。

编辑:

这是我使用leiningen开始swank的结果,leiningen提供了“localhost”作为swank.swank/start-server的参数。您可能需要仔细检查leiningen插件是否正在打开非本地端口。

如果未明确提供主机,则swank会在每个地址上打开连接。相关代码为swank.util.net.sockets/make-server-socket,并记录了此行为。我同意,这似乎是错误的默认值。

答案 1 :(得分:1)

它只接受一个连接,所以即使它暴露在世界中,它也会在你连接后停止收听。

答案 2 :(得分:1)

如果您正在使用clojure-maven-plugin,最近发布了版本1.3.4,现在启动针对localhost的swank服务器以防止此问题。

可以在pom.xml文件中使用以下命令配置此行为:

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

或从命令行:

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