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