7

なぜこれが機能するのですか:

exec 3<>/dev/tcp/www.google.com/80
echo -e "GET / HTTP/1.1\n\n">&3
猫 <&3

そして、これは失敗します:

echo -e "GET / HTTP/1.1\n\n" > /dev/tcp/www.google.com/80
猫 </dev/tcp/www.google.com/80

wget、curl、またはその他のライブラリを使用せずに1行で行う方法はありますか?

4

2 に答える 2

10

2 番目のスニペットは、2 つの個別の TCP ソケットを開くため、失敗します。はHTTP 要求にecho接続して書き込みます。www.google.com次に、2 行目で別の接続を開き、そのソケットからの読み取りを試みます。Google が HTTP リクエストの送信を待機しているため、2 番目のソケットは単純にブロックされます。

于 2010-05-04T23:32:04.677 に答える
1

私の専門分野ではありませんが、2 番目のサンプルは 2 番目の接続を開き、最初のサンプルは同じ接続へのハンドルを開いたままにすると思います。したがって、1 つの接続のみを開くことを含むソリューションはすべて機能するはずです。

于 2010-05-04T23:31:27.507 に答える