14

netcat -eオプションのないバージョンのnetcatでエミュレートするにはどうすればよい-eですか?

コマンドをリモートでトリガーする必要があります。私はnetcatでそれを行うことができます-なしで-e

#!/ bin / bash

netcat -l 8080; myCommand.sh

それでうまくいきますが、コマンドの成功または失敗に応じてクライアントに返信たいと思います(一種のREST-インターフェースのようなものにするため)。

どうすればそれができますか?

ありがとう!

4

2 に答える 2

15
mkfifo foo
nc -lk 2600 0<foo | /bin/bash 1>foo

次に、nc servername 2600 と ./script.sh だけ

ctrl+c でクライアントを強制終了

于 2011-11-17T02:46:13.003 に答える
4

最善の方法は、それをサポートしているバージョンの netcat に切り替えることです。Debian/Ubuntu IIRCでは、 netcat openbsdではなく netcat traditionalを正しく使用する必要があります。

 sudo apt-get install netcat-traditional # netcat-openbsd

必要なバージョンを明示的に指定するオプションがあります。

 nc.traditional server 6767 -e myscript.sh

 nc.openbsd -l 6767

(オプションの使い方の微妙な違いに注意してください)。ご覧のとおり (以下) nc.traditional は、libc と linux 自体のみに依存するスタンドアロン バイナリとして実行できるため、インストール権限がない場合は、スタンドアロン バイナリをどこかに (ファイルシステムに)ドロップするだけexecでよいはずです。もちろん許可を得て)、次のように実行します

 /home/user/bin/mynetcat server 6767 -e myscript.sh

HTH


$ ldd `which nc.{traditional,openbsd}`

/bin/nc.traditional:
    linux-gate.so.1 =>  (0xb7888000)
    libc.so.6 => /lib/libc.so.6 (0xb7709000)
    /lib/ld-linux.so.2 (0xb7889000)
/bin/nc.openbsd:
    linux-gate.so.1 =>  (0xb77d0000)
    libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0xb76df000)
    libc.so.6 => /lib/libc.so.6 (0xb7582000)
    libpcre.so.3 => /lib/libpcre.so.3 (0xb754c000)
    /lib/ld-linux.so.2 (0xb77d1000)
于 2011-06-07T18:49:52.830 に答える