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

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

telnet へのパイプができないです

telnet を使用して、たとえば web のデータを自動的に取得しようとしています。 80 番ポートに接続して 接続完了を待った後 http リクエストを出力する ということを意図していますが、下記環境では動作しません。 なぜでしょうか? $ uname -a Linux srv4 2.6.32-36-generic #79-Ubuntu SMP Tue Nov 8 22:29:26 UTC 2011 i686 GNU/Linux $ (sleep 3; echo "GET / HTTP/1.0"; echo;) | telnet www.google.co.jp 80 Trying 173.194.38.84... Connected to www.l.google.com. Escape character is '^]'. Connection closed by foreign host. よろしくおねがいします。

  • onok
  • お礼率100% (2/2)

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

  • ベストアンサー
  • 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% (4848/10261)
回答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

  • TELNETが使えません

    Linuxマシンにtelnetでログインしようとすると、つながりはするみたいなのですが、ログインのプロンプトが出る前に切断されてしまうようなのです。 とりあえずローカルでためすと次のようになります。 >telnet localhost Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Connection closed by foreign host.

  • Debian Linux lenny のカーネルソースはどこにあるので

    Debian Linux lenny のカーネルソースはどこにあるのでしょうか? 以下のようなコマンドを叩いてみたのですが、/usr/src 以下にカーネルソースが展開されないのですが、よかったら、相談に乗ってください。 # uname -a Linux hogehoge 2.6.26-2-686 #1 SMP Wed Nov 4 20:45:37 UTC 2009 i686 GNU/Linux # apt-get build-dep linux-source-2.6.26-2-686 パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 E: linux-source-2.6.26-2-686 のソースパッケージが見つかりません

  • telnet接続

    教えてください。 Linux vine上でtelnet接続を試みています。 telnet port23へは、接続できるのですが、 telnet port25 110への接続が出来ません。 エラー:Connection closed by foreign host. いろいろ調べたのですが、解決せず、申し訳ありませんが、 教えてください。

  • sshとtelnetでjavaの挙動が変わる?

    sshとtelnetでjavaの挙動が変わる? 以下の環境で開発しています。 unameの結果  Linux xxxxxxxx 2.6.32-23-server #37-Ubuntu SMP Fri Jun 11 09:11:11 UTC 2010 x86_64 GNU/Linux sshとtelnetのバージョン OpenSSH_5.3p1 Debian-3ubuntu4, OpenSSL 0.9.8k 25 Mar 2009 telnet version 0.17-36build1 % java -version を実行した結果 (ssh,telnet上で共に同じ結果)  java version "1.6.0_18"  OpenJDK Runtime Environment (IcedTea6 1.8) (6b18-1.8-0ubuntu1)  OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode) 外からsshでログインし、as3のソース(action script)をコンパイルするとjavaからは何も文句は言われず、 正常にコンパイルされました。 とある事情があって、サーバにtelnetdをインストールし、外からtelnetでログインし、上記と同じ操作で コンパイルを実行すると、以下のエラーメッセージが表示され、コンパイルできませんでした。 エラー: Can't load library: /usr/lib/jvm/java-6-openjdk/jre/lib/amd64/xawt/libmawt.so cshシェルの環境(setenv)は、sshの場合 SSH_*が増えている。 それ以外は、telnet,ssh共に同じ内容です。 すいませんが、教えてください。

  • 私のもう一つの家のubuntuのサーバに、外からアクセス(intern

    私のもう一つの家のubuntuのサーバに、外からアクセス(internet介して)して作業をしております。 アクセスには、telnetまたは ssh を使っています。 作業は、emacsなどのエディターなどを使っています。 何分かは分からないのですが、emacs上で作業していて、 たまに、文字の表示が固まったりします。数秒?数分?待ってたりすると たまっていたバッファの文字が一気に表示されたり、 最悪の場合は、broken pipe?などのメッセージが出て、sshごと切れたりします。 telnet上でemacsを使って作業してても上記と同じ現象が起きます。 なにが原因なんでしょうか? ubuntuのコマンドを使って調べる方法を教えてください。 % uname -a の実行結果を以下に記載します。 Linux xxxxxxxxx 2.6.32-24-server #38-Ubuntu SMP Mon Jul 5 10:29:32 UTC 2010 x86_64 GNU/Linux

  • Debian Linux squeeze

    kernel のコンパイルで、USBプリンタはデフォルトでモジュールが組み込まれているのでしょうか? 僕の環境だと、いくら試しても、USBプリンタに印字できません。 カーネル再構築しか、手段はないかと思われるのですが、僕の勘違いでなければ、USBプリンタをカーネル内でサポートしているのでしょうか? ちなみに、 $ uname -a Linux marine 2.6.32-5-686 #1 SMP Wed Jan 12 04:01:41 UTC 2011 i686 GNU/Linux です。 よろしくお願いします。追加モジュールが、カーネルの再構築なしに、できれば、有難いのですが、どうぞ、よろしくお願いします。

  • sshでlogin後、操作中、固まるときがある?

    間欠で、いつ固まるか特定できないのですが、クライアントからsshでサーバーに接続し、端末で操作しているときに固まる場合があります。 固まったときに新たにsshにて接続してtopなどでプロセス状況をみても、sshdが上位に来ていません。 なにか原因が特定できるような方法がありましたら教えてください。 環境: [クライアント側] os: Linux clienthost 2.6.31-15-generic #50-Ubuntu SMP Tue Nov 10 14:54:29 UTC 2009 i686 GNU/Linux shell: tcsh 6.14.00 (Astron) 2005-03-25 (i486-intel-linux) options wide,nls,dl,al,kan,rh,nd,color,filec terminal: GNOME 端末 2.28.1 ssh: OpenSSH_5.1p1 Debian-6ubuntu2, OpenSSL 0.9.8g 19 Oct 2007 [サーバ側] os: Linux remotehost 2.6.31-15-server #50-Ubuntu SMP Tue Nov 10 15:50:36  UTC 2009 x86_64 GNU/Linux shell: tcsh 6.14.00 (Astron) 2005-03-25 (x86_64-unknown-linux) options wide,nls,dl,al,kan,rh,nd,color,filec ssh: OpenSSH_5.1p1 Debian-6ubuntu2, OpenSSL 0.9.8g 19 Oct 2007 /etc/ssh/sshd_configの設定: Port 22 Protocol 2 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key UsePrivilegeSeparation yes KeyRegenerationInterval 3600 ServerKeyBits 768 SyslogFacility AUTH LogLevel INFO LoginGraceTime 120 PermitRootLogin yes StrictModes yes RSAAuthentication yes PubkeyAuthentication yes IgnoreRhosts yes RhostsRSAAuthentication no HostbasedAuthentication no RhostsRSAAuthentication PermitEmptyPasswords no ChallengeResponseAuthentication no X11Forwarding no #X11DisplayOffset 10 PrintMotd no PrintLastLog yes TCPKeepAlive yes AcceptEnv LANG LC_* Subsystem sftp /usr/lib/openssh/sftp-server UsePAM yes

  • サーバ、クライアント間でインターネットを介しての通信について

    サーバ、クライアント間でインターネットを介しての通信について 3~4分間スリープさせた後、サーバからクライアントにメッセージを送信した場合、クライアントがそのメッセージを受信しないという現象が起きます。 その現象が起きた後も、サーバ、クライアントそれぞれのアプリは、通信エラーなどは発生せず、コネクションは張られたままになります。 上記原因を調べるためには、どんなことを行えばよろしいでしょうか? (サーバ、クライアントの各アプリにはread,writeおよびacceptなど すべてにエラー処理が施されています。) 以下、ルータ サーバ クライアントの各環境を記載いたします。 ルータ環境: CG-WLBARGPX Ver1.30 ファイアウォール (低い) IPマスカレード・テーブル保持時間(10分) ポート 49152を開放 (上記アプリで使用) サーバ環境: % uname -a Linux 2.6.32-22-server #36-Ubuntu SMP Thu Jun 3 20:38:33 UTC 2010 x86_64 GNU/Linux % iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination クライアント環境: % uname -a Linux 2.6.32-22-generic #36-Ubuntu SMP Thu Jun 3 19:31:57 UTC 2010 x86_64 GNU/Linux ※ もっと必要な情報がありましたら、それも公開できる範囲で公開いたします。

  • Ubuntu ログイン画面の文字化け

    Ubuntuのログイン画面が文字化けします。 添付画像の通りで、おそらく日本語を表示しようとしているところで■になっています。 バージョン情報は以下の通りです。 $ uname -a Linux ubserver 3.5.0-27-generic #46-Ubuntu SMP Mon Mar 25 20:00:05 UTC 2013 i686 i686 i686 GNU/Linux $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 12.10 Release: 12.10 Codename: quantal このような状況ですが、解決に向けて以下の点を教えてください。 1.どのディスプレイマネージャを使っているのか、どう調べたらわかりますか? 2.該当の画面で使用している言語は、どう調べたらわかりますか?(Xのロケール設定とかでしょうか?そんなのあるのか??) 3.この画面から、フォントの指定をしているファイルはどれか、分かったら教えていただけますか? 4.もし、一発で治す方法が分かる方がいらっしゃったら、ご教示いただけるとありがたいです。 よろしくお願いします。

  • telnetでログインできない

    HP-UXよりwindows2003サーバーへtelnet接続の自動化を考えています。 色々なサイトを参考にし、シェルには下記のように記載しました。 ※ユーザID・・・aaa ※パスワード・・bbb 【user.sh】 #!/bin/csh sleep 10; echo "aaa" sleep 10; echo "bbb" 【login.sh】 #!/bin/csh sh user.sh | telnet ※ip しかし、実行結果は下記の通りとなり、ログインはできません。 ----------------------------------------------------- Trying... Connected to ※ip Escape character is '^]'. Local flow control off Welcome to Microsoft Telnet Service login: aaabbb Session timed out. Telnet Server has closed the connection Connection closed by foreign host. ----------------------------------------------------- 手動で実行する場合はもちろんログインすることはできます。 手動実行時のエンターキーが押されていない状態です。 HP-UX間では上記方法で問題なくログインできます。 windowsサーバーのtelnetの設定が問題なのでしょうか? ちなみに、windowsサーバーのtelnetの設定は下記の通りです。 ----------------------------------------------------- Microsoft Telnet> display エスケープ文字は'ctrl+]'です。 自動認証(NTML 認証)を使わない ローカル エコー: オフ ニューライン モード - リターン キーで CR および LF を送信します 現在のモード: コンソール 使用する端末の種類をネゴシエートする 優先する端末の種類は ANSI です ----------------------------------------------------- 他に情報がいる場合は教えてください。