web-dev-qa-db-ja.com

リモートで使用できるように、netcatを介してコンソールアプリケーションをパイプまたはリダイレクトできますか?

Netcatを介してコンソールアプリケーションのインスタンスを「パイプ」できるので、netcatは新しい接続をリッスンし、ネットワーク接続を介してstdinおよびstdoutをリダイレクトします。

10
jammmie999

Wikipedia およびnetcatのドキュメントに記載されているように、それを生成する-eオプションがあります(execute)接続の受信時にプログラムを実行し、ソケットをプロセスのstdin、stdout、およびstderrに接続します。使用例:

nc -l -pポート番号-eprogram_name

例では、一般的に/bin/shまたはbashが program_name。このオプションを使用すると、基本的には匿名のパスワードなしのアクセスポータルがマシンに開かれるため、お勧めしません。もちろん、これは、シェルよりも能力の低いプログラム(シェルにエスケープする機能を持たないプログラム)を使用して、使用を最小限に抑え、秘密にしておくことで軽減されます。それにもかかわらず、netcatの元の開発者は、このオプションがデフォルトで無効にされ、「GAPING_SECURITY_HOLE」コンパイルオプションの下で条件付けされているという悪い考えであると強く感じていました。これは、この NetCatチュートリアル およびその他のnetcatドキュメントで簡単に説明されています。

Google検索の結果、他のStack Exchangeサイト( Stack Overflow および Server Fault )でこの問題について話し合いました。複数の寄稿者が、-eオプションを使用せずに同じことを行う次の手法を提供しました(つまり、-eオプションが無効になっているnetcatのバージョンで)。

サーバー上:
mkfifopipe_name
nc -l -pポート番号<pipe_name  | program_name>pipe_name

クライアント上:
nc server_machine_nameポート番号

いくつかのメモ:

  • netcatの一部のバージョンでは、-l-pを意味するため、-lと続けてポート番号だけを言う必要があります。
  • ソリューションをwhile trueループでラップすることができます。
16
Scott