Clojure Swank服务器打开公共端口?
题
(这个问题已经被倾斜,我觉得这很奇怪。我是如何得罪的?)
我认为运行Swank服务器通常会向世界打开端口4005,而不受本地主机连接的限制?
因此,任何在咖啡馆里黑客入侵的人不仅允许路人在其计算机上执行任意代码,而且还为他们提供了一个很好的接口。
看来,当我使用“ 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)
的确,我可以从同一网络上另一台计算机上运行的EMAC连接。
(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的本地地址上侦听的。该接口不会暴露于网络,因此网络上的其他设备无法连接到粘液器服务器。
编辑:
这是我开始使用Leiningen开始Swank的结果,这提供了“ Localhost”作为论点 swank.swank/start-server
. 。您可能需要仔细检查Leiningen插件是否正在打开非本地端口。
如果没有明确提供主机,则说明Swank会在每个地址打开连接。相关代码是 swank.util.net.sockets/make-server-socket
, ,并记录了这种行为。我同意,这似乎是错误的默认值。
其他提示
它仅接受一个连接,因此即使它暴露于世界,它也会在您连接后就停止聆听。
如果您使用的是Clojure-Maven-Plugin,则最近发布了1.3.4版,该版本现在启动Swank Server针对Localhost,以防止此问题。
可以在pom.xml文件中配置此行为:
<configuration>
<swankHost>someotherhostname</swankHost>
</configuration>
或从命令行中使用:
mvn clojure:swank -Dclojure.swank.host=someotherhostname