2009-03-13 8 views
14

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ファイルのメソッドは改行を同じパケットに保持します。この現象の原因は不明です。

+0

FYI、\ rを\ n個でのprintf意図的です。 \ rと\ nをさまざまな組み合わせで切り替えて、何か変更があったかどうかを確認しました。 – romandas

答えて

22

"\ r \ n"の2つのロットが必要です。また、応答を待つようにnetcatに指示する必要があります。 printf "HEAD/HTTP/1.0\r\n\r\n" |nc -n -i 1 10.1.1.2 80などが動作するはずです。

+0

これは私のためには機能しません。あなたの回線を直接コピーしましたが、ヘッダーを送信する前に接続がまだ終了しています。 – romandas

+0

問題はサーバー側で発生します。 printf "HEAD/HTTP/1.0 \ r \ n \ r \ n" | nc www.toothycat.net 80はここで動作します。 – moonshadow

+0

サーバーは要求を終了していません。それはクライアントによって開始されます。 Wiresharkは、私のクライアントがHEAD要求パケットの直後にFINパケットを送信した後、サーバがACKして正常に終了することを示します。違いの原因は不明です。どのバージョンのnetcatを使用していますか? – romandas

7

もう1つの方法は、「heredoc」という規約を使用することです。

$ nc -n -i 1 10.1.1.2 80 <<EOF 
> HEAD/HTTP/1.0 
> 
> EOF 
+0

これはこれまでよりもうまくいきます – dotslash

2

ncに応答を待つ別の方法は、入力にスリープを追加することです。例えば

(printf 'GET/HTTP/1.0\r\n\r\n'; sleep 1) | nc HOST 80 
0

あなたは、インスタンスのWebサーバを作るためのnetcatコマンドの下に使用することができます。

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& 
+0

デフォルトゲートウェイに使用されているIPv4 IP(どんなインタフェースであっても、Linux): 'ip route show | grep -o 'src [\ .0-9] \ +' |ユニーク|カット-d "-f2" –

0

この行はまた、同等のものとして動作します。

echo -e "HEAD/HTTP/1.1\nHost: 10.1.1.2\nConnection: close\n\n\n\n" | netcat 10.1.1.2 80 
関連する問題