web-dev-qa-db-ja.com

BusyBoxでNCコマンドを使用してソケットのインバウンド側で応答を待つ方法は?

BusyBox 1.1.3に付属のNetcatを使用してHTTPリクエストを作成し、応答を受信する際に問題が発生します。 NCコマンドは、送信しているリクエストファイルの最後に到達するとすぐに終了するようです。 -wオプションはこの場合のために設計されているようですが、ソースコードを見ると、-wオプションが受信動作に影響を与える可能性はないようです。

BusyBoxのこのバージョンNCのソースコードはこちらです...

http://git.busybox.net/busybox/tree/networking/nc.c?id=5cbe2519d8776bc15e0bc4dc7aeb6adc53e50b81

私は何が間違っているのですか?このバージョンのNCを介してサーバーにファイルを送信し、応答を受信するのを待つ方法はありますか?スクリプトでこれを行う他の可能な方法についての創造的なアイデアはありますか?

これは組み込みシステムであり、BusyBoxバージョンをアップグレードしたり、新しい実行可能ファイルをアップロードしたりすることはできません。使用できるのは、スクリプトファイルとすでに利用可能なBusyBox実行可能ファイルのみです。また、システムで利用可能なWGETがないことにも注意してください。

ありがとう!

-ジョシュ

3
bigjosh

これを試して:

(echo "GET / HTTP/1.0"; sleep 1) | nc Host 80
4
Jay Soffian

Ncについて混乱していないと思いますか? BusyBoxのマニュアルページ の状態:

nc
nc [OPTIONS] Host PORT - connect nc [OPTIONS] -l -p PORT [Host] [PORT] - listen

Options:

    -e PROG         Run PROG after connect (must be last)
    -l              Listen mode, for inbound connects
    -n              Don't do DNS resolution
    -s ADDR         Local address
    -p PORT         Local port
    -u              UDP mode
    -v              Verbose
    -w SEC          Timeout for connects and final net reads
    -i SEC          Delay interval for lines sent
    -o FILE         Hex dump traffic
    -z              Zero-I/O mode (scanning)

したがって、ポートでlistenするオプションは(従来の)-lであり、 -wは、接続と最終的なネット読み取りのタイムアウトです。

接続が閉じられた後もリッスンし続けることが問題である場合は、永遠のループwhile true nc -l ...を使用できます。

編集:

メッセージを読んだ後、OPが何を求めているのか理解できなかったことがわかりました。私が理解しなかった理由は、ncインスタンスを両方の送信受信。別のポートと、そのためのncの別のインスタンスが必要です。同じポートで受信できない場合、nctransmitインスタンスを開いたままにしておくことに意味はありません。

1
MariusMatutiae