HTTPの仕組みの詳細については、netcatで遊んでいます。私はbashやPerlのスクリプトを書こうと思っていますが、私はテストの初期に不安にぶつかってきました。netcatでHTTPヘッダーリクエストをスクリプト化する
プロンプトからnetcatを直接実行し、HEAD要求を入力すると動作し、プロービングしているWebサーバーのヘッダーが表示されます。
これは動作します:
[[email protected] ~]$ nc 10.1.1.2 80 HEAD/HTTP/1.0 HTTP/1.1 200 OK MIME-Version: 1.0 Server: Edited out Content-length: 0 Cache-Control: public Expires: Sat, 01 Jan 2050 18:00:00 GMT [[email protected] ~]$
しかし、私は、テキストファイルに同じ情報を入れて、パイプを通してまたはリダイレクト経由のnetcatにそれを送り込む際に、スクリプトの準備のために、それはヘッダを返しません。
テキストファイルは、HEADリクエストと2つの改行で構成されています
HEAD/HTTP/1.0
が経由で同じ情報を送信するには、またはのprintfはどちらか動作しませんエコー。
$ printf "HEAD/HTTP/1.0\r\n"; |nc -n 10.1.1.2 80 $ /bin/echo -ne 'HEAD/HTTP/1.0\n\n' |nc 10.1.1.2 80
私が間違っていることは何ですか?それがbashの問題か、エコーの問題か、netcatの問題かどうかは不明です。
私はWireshark経由でトラフィックをチェックし、成功したリクエスト(手作業で入力された)は2番目のパケットに後続の改行を送信しますが、echo、printf、textファイルのメソッドは改行を同じパケットに保持します。この現象の原因は不明です。
FYI、\ rを\ n個でのprintf意図的です。 \ rと\ nをさまざまな組み合わせで切り替えて、何か変更があったかどうかを確認しました。 – romandas