web-dev-qa-db-ja.com

netcatでLANの外部からの接続を受け入れるにはどうすればよいですか?

私はネットキャットをバックエンドとして使用して、作成しているプログラムのデータを前後にシャベルでとっています。ローカルネットワークでプログラムをテストしましたが、機能したら、ルーターからポートを転送するだけで、インターネット経由でプログラムを動作させることができると考えました。ああ!これはそうではないようです。

Netcatがポート6666でリッスンを開始する場合:

nc -vv -l -p 6666

次に、ブラウザーで127.0.0.1:6666に移動します。予想どおり、HTTP GET要求がnetcatを介して送信されます(そして、ブラウザーが無駄に待機しています)。しかし、my.external.ip.address:6666にアクセスすると、何も実行されず、ブラウザに「my.external.ip.address:6666に接続できませんでした」と表示されます。

Www.canyouseeme.orgがポート6666は開いている(そしてnetcatがリッスンしていないときは閉じている)と言っているように、ポートが正しく転送されていることを知っています。

-g my.adslmodem's.local.addressを使用してnetcatを実行し、ゲートウェイアドレスを設定しても、同じ動作が得られます。このコマンドラインオプションを正しく使用していますか?私が間違っていることについての洞察はありますか?

30
Chris

問題ないことがわかりました。私のルーターはヘアピン接続を許可していないため、このように表示されます。つまり、正しく設定されていても、送信元と宛先の両方がNATの背後にある場合、ルーターは接続を確立しません。リクエストがLANの外部からのものである限り、単にncat -l -p 6666は正常に機能します。これをテストするために、3G携帯電話でmy.external.ip.address:6666にアクセスしましたが、確かに、HTTPリクエストが届きました:)

この答えは serverfaultの質問 から来たもので、最初にこの質問をする必要がありました。そのためお詫び申し上げます。

15
Chris

パブリックインターフェイスでリッスンする必要があります。現在、コンピューターの外部の誰も接続できないlocalhostをリッスンしています。

あなたの距離は異なるかもしれませんが、私の実装では netcat このコマンドラインを使用してすべてのパブリックインターフェイスをリッスンする必要があります。

netcat -vv -l 0.0.0.0 6666

27
Kent

リスニングアドレスを指定するには:

nc -l -s <LISTENING_IP_ADDR> -p <LISTENING_PORT>

netcat-traditional-1.10-41を使用してDebian Jessieでテスト済み

8