Bashを使用したTCP接続

Bashを使用したTCP接続

Bashを使用してTCP接続をリダイレクトするために、次のコマンドが何も返さないのはなぜですか?

[root@rocks7 ~]# echo -e "GET / HTTP/1.1\n\n" > /dev/tcp/yahoo.com/80
[root@rocks7 ~]# printf "GET / HTTP/1.1\n\n" > /dev/tcp/google.com/80
[root@rocks7 ~]# 

ベストアンサー1

オープン読み取りおよび書き込み接続を使用し<>、より多くのヘッダーを送信してから応答を読み取る必要があります。例えば、

exec 5<>/dev/tcp/yahoo.com/80
echo -e "GET / HTTP/1.1\r\nHost: yahoo.com\r\nContent-Length: 0\r\n\r" >&5
# get reply:   HTTP/1.1 301 Moved Permanently^M
cat <&5

標準0、1、2に違反することを避けるために、任意のファイル記述子5を使用しています。 Yahooではコンテンツ長ヘッダーは必要ありませんが、他のサイトでは追加の入力を受け取るまで応答しないことがあります。 Yahooでは、ホストヘッダーが不要な場合は応答を受け取りますHTTP/1.1 400 Host Header Required

おすすめ記事