(这个问题被投了反对票,我觉得很奇怪。我犯了什么错误吗?)
我是否正确地认为运行swank服务器通常会打开端口4005,而不是绑定到本地主机连接?
因此,任何在咖啡馆黑客的人不仅允许路人在他们的计算机上执行任意代码,而且还为他们提供了一个漂亮的界面来完成此操作。
当我使用'mvn clojure:swank'、'lein swank'或(swank.swank/start-server "/tmp/yo")运行swank服务器时,似乎会出现类似以下内容的情况(感谢Mike!):
$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]>
这看起来更像是我期望的。
有没有什么很好的理由去做这件事呢?
对于如何说服它只接受来自本地进程的连接,有什么更常规的方法吗?
swank-clojure.el
,你可以在swank-clojure-init
中控制服务器启动的format
字符串中添加:host \"localhost\"
,以仅在本地主机上进行监听(在"(swank.swank/start-server ...)\n\n"
处查找)。请注意,不要改变原来的意思。 - Michał Marczyk