Netcatを介してコンソールアプリケーションのインスタンスを「パイプ」できるので、netcatは新しい接続をリッスンし、ネットワーク接続を介してstdin
およびstdout
をリダイレクトします。
Wikipedia およびnetcat
のドキュメントに記載されているように、それを生成する-e
オプションがあります(execute)接続の受信時にプログラムを実行し、ソケットをプロセスのstdin、stdout、およびstderrに接続します。使用例:
nc -l -p
ポート番号-e
program_name
例では、一般的に/bin/sh
またはbash
が program_name。このオプションを使用すると、基本的には匿名のパスワードなしのアクセスポータルがマシンに開かれるため、お勧めしません。もちろん、これは、シェルよりも能力の低いプログラム(シェルにエスケープする機能を持たないプログラム)を使用して、使用を最小限に抑え、秘密にしておくことで軽減されます。それにもかかわらず、netcat
の元の開発者は、このオプションがデフォルトで無効にされ、「GAPING_SECURITY_HOLE」コンパイルオプションの下で条件付けされているという悪い考えであると強く感じていました。これは、この NetCatチュートリアル およびその他のnetcat
ドキュメントで簡単に説明されています。
Google検索の結果、他のStack Exchangeサイト( Stack Overflow および Server Fault )でこの問題について話し合いました。複数の寄稿者が、-e
オプションを使用せずに同じことを行う次の手法を提供しました(つまり、-e
オプションが無効になっているnetcat
のバージョンで)。
サーバー上:
mkfifo
pipe_namenc -l -p
ポート番号<
pipe_name|
program_name>
pipe_nameクライアント上:
nc
server_machine_nameポート番号
いくつかのメモ:
netcat
の一部のバージョンでは、-l
は-p
を意味するため、-l
と続けてポート番号だけを言う必要があります。while true
ループでラップすることができます。