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

Joh*_*den 10 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)
Run Code Online (Sandbox Code Playgroud)

事实上,我可以从同一网络上另一台机器上运行的emacs连接.

(swank.swank/start-server "/tmp/yo")
Run Code Online (Sandbox Code Playgroud)

如果我手动启动服务器,它会产生以下输出

Connection opened on local port  34983
#<ServerSocket ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=34983]>
Run Code Online (Sandbox Code Playgroud)

鉴于:

(swank.swank/start-server "/tmp/yo" :host "localhost")
Run Code Online (Sandbox Code Playgroud)

生产:

Connection opened on local port  40368
#<ServerSocket ServerSocket[addr=localhost/127.0.0.1,port=0,localport=40368]>
Run Code Online (Sandbox Code Playgroud)

这似乎更像我期待的.

这样做有什么好的理由吗?

关于如何更常规地启动它的方法可以被说服只接受来自本地进程的连接的任何想法?

Mik*_*las 5

完全有效的问题.

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

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

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

编辑:

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

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

  • 如果您正在使用`swank-clojure.el`,您可以在`format`字符串中添加`:host \"localhost \"`,该字符串控制服务器在`swank-clojure-init`中的启动方式(查找` "(swank.swank/start-server ...)\n \n"`)让它只在localhost上侦听. (3认同)