2017-11-22 3 views
0

私は次のスクリプトを書いています(まだインデックスをサポートしていません)。私が抱えている問題は、netcatを使ってページを読み込むことです。私は手動でコマンドラインを使用してこれを行うことができますが、私はスクリプトがまったく同じコマンドを発行しようとするとエラーなしで何もできません。私が考えることができる唯一の可能なことは、自分のアウトプットが他のどこかに行くということです。netcatを使ってbashでhttp getリクエストを発行する

+0

while [true]は、実際には動作しますが、あなたが思うようには行いません。あなたは '真実'または '中でも[空でない文字列はまだ空ではありません]'を意味します。 – tripleee

+0

接線関係:https://stackoverflow.com/questions/36371221/bash-if-statement-too-many-arguments ; https://stackoverflow.com/questions/37586811/pass-commands-as-input-to-another-command-su-ssh-sh-etcはこれに関するものではありませんが、あなたの精神的モデルを明確にするのに役立ちます。スクリプトの仕組み – tripleee

答えて

0

nc作品:それをする

一つの方法は、入力のリダイレクトです。

{ 
    printf "GET /%s HTTP/1.1\r\n" "$path" 
    printf "Host: %s\r\n" "$domain" 
    printf "\r\n" 
    printf "\r\n" 
} | nc "$domain" "$port" 
  • HTTPは、各ラインの終わりに\r\nを必要とします。一部のサーバーでは、\nを受け入れるサーバーもありますが、一部のサーバーでは、法律の文章に固執し、指定されたとおりに\r\nのみを受け入れます。

  • これらの行は標準入力ncに送信する必要があります。

  • printf "Get %s HTTP/1.1\r\n" "$path" because $ path may containsigns and that would confuse printf`を使用することをお勧めします。

0

ncの標準入力にリクエストヘッダを渡す必要があります。そこから、標準出力に読み込み、どんなポートを、コピー:指定されたアドレスに標準入力をコピーして

while true 
do 
    echo "Type the address you wish to visit then, followed by [ENTER]:" 
    read address 
    path=${address#*/} 
    domain=${address%%/*} 
    nc $domain $PORT <<EOF 
GET /$path 
Host: $domain 

EOF 
done 
関連する問題