私はネットキャットをバックエンドとして使用して、作成しているプログラムのデータを前後にシャベルでとっています。ローカルネットワークでプログラムをテストしましたが、機能したら、ルーターからポートを転送するだけで、インターネット経由でプログラムを動作させることができると考えました。ああ!これはそうではないようです。
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を実行し、ゲートウェイアドレスを設定しても、同じ動作が得られます。このコマンドラインオプションを正しく使用していますか?私が間違っていることについての洞察はありますか?
問題ないことがわかりました。私のルーターはヘアピン接続を許可していないため、このように表示されます。つまり、正しく設定されていても、送信元と宛先の両方がNATの背後にある場合、ルーターは接続を確立しません。リクエストがLANの外部からのものである限り、単にncat -l -p 6666
は正常に機能します。これをテストするために、3G携帯電話でmy.external.ip.address:6666
にアクセスしましたが、確かに、HTTPリクエストが届きました:)
この答えは serverfaultの質問 から来たもので、最初にこの質問をする必要がありました。そのためお詫び申し上げます。
パブリックインターフェイスでリッスンする必要があります。現在、コンピューターの外部の誰も接続できないlocalhostをリッスンしています。
あなたの距離は異なるかもしれませんが、私の実装では netcat このコマンドラインを使用してすべてのパブリックインターフェイスをリッスンする必要があります。
netcat -vv -l 0.0.0.0 6666
リスニングアドレスを指定するには:
nc -l -s <LISTENING_IP_ADDR> -p <LISTENING_PORT>
netcat-traditional-1.10-41
を使用してDebian Jessieでテスト済み