• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:telnet へのパイプができないです)

telnet で web データを取得できない理由と解決策

このQ&Aのポイント
  • telnet を使用して web のデータを取得しようとしていますが、動作しない理由を調べてください。
  • Linux 環境で telnet を使用して web データを取得しようとしていますが、接続ができずにエラーが発生します。
  • telnet コマンドを使用して web データの取得を試みましたが、接続が確立できずに失敗します。なぜでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

最後に待つ必要があります。今のままだと、最後の「echo」で空行を出力したあと、すぐにパイプ入力元の「(sleep 3…echo;)」の実行が終了します。そうすると、そこで入力が途切れたtelnetは即座に実行を終了させてしまうのです。 あと、 ・最初に3秒待つ必要はありません。 ・Host: ヘッダは出力しておいた方が良いです。(質問者さんが挙げたgoogle も、Hostヘッダ無しだと 302 が返ってきます) ですので、まとめると (echo "GET / HTTP/1.0"; echo "Host: www.google.co.jp"; echo; sleep 3) | telnet www.google.co.jp 80 とすればうまくいきます。 (ただし、データ量が多く取得に3秒以上かかる場合は、sleepの時間を増やさないと、途中で終わってしまうことになります)

onok
質問者

お礼

さっそく試して、うまくいきました。 ありがとうございます。 最初の sleep がいらなくて、最後に必要とはびっくりでした。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

telnetにリダイレクトは使えません。他の手段を使ってください。 wget http://www.google.co.jp/ とか。 bashだと、リダイレクトを使って #!/bin/bash exec 3<> /dev/tcp/www.google.co.jp/80 echo GET / HTTP/1.1 >&3 echo Host: www.google.co.jp >&3 echo Connection: close >&3 echo >&3 cat <&3 とかも出来ます。 どうしてもtelnetをコントロールしたいのなら、expectというコマンドを使います。

onok
質問者

お礼

そんな方法があるんですね! やっぱり質問してよかったです。 今後、参考にさせていただきたく思います。 教えていただき、ありがとうございました。

関連するQ&A