Clojure Swank Serverがパブリックポートを開きますか?
質問
(この質問はダウン投票されましたが、私は奇妙だと思います。どのように気分を害しましたか?)
Swankサーバーを実行すると、通常、ローカルホストのみの接続に縛られていない世界にポート4005を開くと思いますか?
そのため、カフェでハッキングする人は、通行人がコンピューターで任意のコードを実行できるようにするだけでなく、それを行うための素晴らしいインターフェイスを提供しています。
「MVN Clojure:Swank」または「Lein Swank」のいずれかでSwankサーバーを実行すると、(Swank.swank/start-server "/tmp/yo)
それから私はそのようなものを手に入れます(マイクに感謝します!):
$lsof -i -P
java 11693 john 13r IPv6 6701891 0t0 TCP *:34983 (LISTEN)
実際、同じネットワーク上の別のマシンで実行されているエマックから接続できます。
(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]>
これは私が期待していたようです。
これを行う正当な理由はありますか?
それがより一般的に開始する方法についてのアイデアは、ローカルプロセスからの接続のみを受け入れるように説得される可能性がありますか?
解決
完全に有効な質問。
Slimeサーバーを開いた後、あなたは気付くでしょう:
eames:~:% lsof -i -P | grep 4005
java 41477 mjd 33u IPv6 0x0b8956d0 0t0 TCP [::127.0.0.1]:4005 (LISTEN)
接続は、ポート4005のローカルアドレスで聴取しています。このインターフェイスはネットワークにさらされていないため、ネットワーク上の他のデバイスはSLIMEサーバーに接続できません。
編集:
これは、Leiningenを使用してSwankを開始した私の結果でした。 swank.swank/start-server
. 。 Leiningenプラグインが非ローカルポートを開いていることを再確認することをお勧めします。
ホストが明示的に提供されていない場合、スワンクがすべてのアドレスで接続を開くことは正しいです。関連するコードはです swank.util.net.sockets/make-server-socket
, 、この動作が文書化されています。私は同意します、それは間違ったデフォルトのようです。
他のヒント
1つの接続のみを受け入れるので、たとえそれが世界にさらされていても、接続するとリスニングを停止します。
Clojure-Maven-Pluginを使用している場合、バージョン1.3.4が最近リリースされ、この問題を防ぐためにLocalHostに対してSwank Serverを開始しました。
この動作は、pom.xmlファイルで以下を構成できます。
<configuration>
<swankHost>someotherhostname</swankHost>
</configuration>
または次のようなコマンドラインから
mvn clojure:swank -Dclojure.swank.host=someotherhostname