HTTP のしくみについて詳しく知るために、netcat をいじってみました。その一部を bash または Perl でスクリプト化したいのですが、テストの早い段階でつまずきにぶつかりました。
プロンプトから netcat を直接実行して HEAD リクエストを入力すると、機能し、プローブしている Web サーバーのヘッダーを受け取ります。
これは機能します:
[romandas@localhost ~]$ nc 10.1.1.2 80 頭 / HTTP/1.0 HTTP/1.1 200 OK MIME バージョン: 1.0 サーバー: 編集済み コンテンツの長さ: 0 キャッシュ制御: 公開 有効期限: 2050 年 1 月 1 日 (土) 18:00:00 GMT [romandas@localhost ~]$
しかし、スクリプト作成の準備として、同じ情報をテキスト ファイルに入れて、パイプまたはリダイレクト経由で netcat にフィードすると、ヘッダーが返されません。
テキスト ファイルは、HEAD リクエストと 2 つの改行で構成されます。
頭 / HTTP/1.0
echoまたは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 の問題なのか、echo の問題なのか、netcat の問題なのかはわかりません。
Wireshark 経由でトラフィックを確認したところ、(手動で入力した) 要求が成功すると、末尾の改行が 2 番目のパケットで送信されますが、echo、printf、およびテキスト ファイル メソッドでは改行が同じパケットに保持されますが、原因がわかりません。この動作。