
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.
よろしくおねがいします。
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の時間を増やさないと、途中で終わってしまうことになります)
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というコマンドを使います。
そんな方法があるんですね! やっぱり質問してよかったです。 今後、参考にさせていただきたく思います。
教えていただき、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
cshの標準出力を制御したい
-
cshが詳しい方は教えてください
-
コマンド終了ステータス
-
cactiでグラフが表示されない
-
Viで書き込もうとすると、保...
-
rcpコマンドについて、教えて!
-
Solarisが起動しなくなった・・・
-
書き込み権限が無いためコピー...
-
/etc/passwd と /etc/shadowを...
-
scpコマンドでリモートサーバの...
-
/ が何時の間にか「Read-only f...
-
コマンド プロンプトで作成し...
-
HP-UXのdateコマンドについて
-
IBM漢字コードのSJIS変...
-
VirtualBox 上のDebian 8.0.0 ...
-
コマンドでのコンピュータ名変...
-
ras2bmp変換
-
CentOSでのCDマウントがうまく...
-
GUIでのroot権限取得について
-
rshのコマンドの書き方について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンド終了ステータス
-
実行中のシェルスクリプト自体...
-
OSがプログラムをどのように実...
-
UNIX Cシェルで実数の比較
-
デフォルトシェルの調べ方
-
cshの標準出力を制御したい
-
Bシェルでパイプ→exitがうまく...
-
telnet へのパイプができないです
-
Shellのパターンマッチについて
-
FTPコマンドの戻り値について
-
diskpart でパーティションの一...
-
Bシェル内でのユーザー変更
-
IFS変数について詳しい方教えて...
-
シェルの実行について
-
cygwinシェルスクリプト内での...
-
csh(Cシェル)のevalに関して
-
cshで変数名の入れ子ができない
-
vagrant upでエラーが表示され...
-
cronでftp自動転送を行いたい
-
Mac OSXのターミナルでemacsを起動
おすすめ情報