10

(この質問は反対票を投じられましたが、私は奇妙だと思います。どのように気分を害しましたか?)

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)

実際、同じネットワーク上の別のマシンで実行されている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]>

それは私が期待していたようです。

これを行う正当な理由はありますか?

ローカルプロセスからの接続のみを受け入れるように、従来の方法で開始するように説得する方法についてのアイデアはありますか?

4

3 に答える 3

5

完全に有効な質問。

スライムサーバーを開くと、次のことに気付くでしょう。

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

接続はポート4005のローカルアドレスでリッスンしています。このインターフェイスはネットワークに公開されていないため、ネットワーク上の他のデバイスはスライムサーバーに接続できません。

編集:

これは、の引数として「localhost」を提供するleiningenを使用してswankを開始した結果ですswank.swank/start-server。leiningenプラグインが非ローカルポートを開いていることを再確認することをお勧めします。

ホストが明示的に提供されていない場合、swankがすべてのアドレスで接続を開くのは正しいです。関連するコードはswank.util.net.sockets/make-server-socketであり、この動作は文書化されています。私は同意します、それは間違ったデフォルトのようです。

于 2010-09-19T21:09:43.040 に答える
1

接続は1つしか受け入れないため、世界に公開されていても、接続するとリッスンを停止します。

于 2010-09-20T17:30:27.277 に答える
1

clojure-maven-pluginを使用している場合、バージョン1.3.4が最近リリースされ、この問題を防ぐためにローカルホストに対してswankサーバーが起動するようになりました。

この動作は、pom.xmlファイルで次のように構成できます。

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

またはコマンドラインから:

mvn clojure:swank -Dclojure.swank.host=someotherhostname
于 2010-09-21T04:28:44.120 に答える