20

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、およびテキスト ファイル メソッドでは改行が同じパケットに保持されますが、原因がわかりません。この動作。

4

5 に答える 5

26

2 つの "\r\n" が必要であり、netcat に応答を待つように指示する必要もあります。printf "HEAD / HTTP/1.0\r\n\r\n" |nc -n -i 1 10.1.1.2 80または同様のものが機能するはずです。

于 2009-03-13T13:34:25.620 に答える
8

もう 1 つの方法は、「ヒアドキュメント」規約と呼ばれるものを使用することです。

$ nc -n -i 1 10.1.1.2 80 <<EOF
> HEAD / HTTP/1.0
>
> EOF
于 2012-01-23T23:09:20.700 に答える
0

以下の netcat コマンドを使用して、インスタンスの Web サーバーを作成できます。

MYIP=$(ifconfig eth0|grep 'inet addr'|awk -F: '{print $2}'| awk '{print $1}')
while true; do echo -e "HTTP/1.0 200 OK\r\n\r\nWelcome to $MYIP" | sudo nc -l -p 80 ; done&
于 2016-07-07T05:37:50.200 に答える
0

この行も同等に機能します。

echo -e "HEAD / HTTP/1.1\nHost: 10.1.1.2\nConnection: close\n\n\n\n" | netcat 10.1.1.2 80
于 2016-10-05T07:44:59.030 に答える