UDPパケットで短い値を1つだけ送信したいが、コマンドを実行する
echo -n "hello" | nc -4u localhost 8000
サーバーがhelloを取得していることがわかりますが、押す必要があります Ctrl+c netcatコマンドを終了します。
helloを送信した後に終了させるにはどうすればよいですか?
申し訳ありませんが、ノイズのため、マニュアルページを読み直し、-q
オプションを見つけました。
echo -n "hello" | nc -4u -q1 localhost 8000
動作します(1秒後に終了します)。
何らかの理由で、-q0
では機能しません。
Bashを使用している場合は、次のように書くこともできます。
echo -n "hello" >/dev/udp/localhost/8000
netcatのすべての特異性と非互換性を回避します。
これは、他のホストへの送信にも機能します。例:
echo -n "hello" >/dev/udp/remotehost/8000
これらは、ファイルシステム上の「実際の」デバイスではなく、bashの「特別な」 エイリアス です。
Netcatで-q1
オプションが見つかりませんでした。代わりに、-w1
オプションを使用しました。以下は、udpパケットを任意のホストとポートに送信するために行ったbashスクリプトです。
#!/bin/bash
def_Host=localhost
def_port=43211
Host=${2:-$def_Host}
PORT=${3:-$def_port}
echo -n "$1" | nc -4u -w1 $Host $PORT
現在のnetcat(v0.7.1)には、-cスイッチがあります。
-c, --close close connection on EOF from stdin
したがって、
echo "hi" | nc -cu localhost 8000
トリックを行う必要があります。
Netcatは、改行ごとに1つのパケットを送信します。大丈夫ですもっと複雑なことをするなら、何か他のものが必要になるかもしれません。
このことに気付いたとき、私はWiresharkをだましていた。それが役立つかどうかわからない。
私は同じ問題を抱えていましたが、-w 0
オプションを使用して1つのパケットのみを送信し、終了しました。次のコマンドを使用する必要があります。
echo -n "hello" | nc -4u -w0 localhost 8000