
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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
- Perl bashスクリプト 2 2023/02/10 21:01
- UNIX・Linux raspberrypi に bluealsaを入れようにも見つからない 1 2023/02/04 10:55
- その他(コンピューター・テクノロジー) WO mic のUSB接続でエラーが出ます。 1 2022/07/09 09:58
- UNIX・Linux Linuxのbash環境下です。 1 2022/11/27 12:31
- ルーター・ネットワーク機器 echoshow8の音声をBluetoothを介してパソコンで出力するやり方を教えて下さい。 3 2023/04/03 17:09
- UNIX・Linux ubuntuサーバーを久々に再起動したらネットにつながらなくなった。 1 2022/06/06 16:21
- PHP PHP MySql ページング 2 2022/09/20 06:38
- オープンソース AWSドメイン名でApacheテスト・ページを表示させる方法を教えて下さい。 1 2023/04/26 15:59
- UNIX・Linux Kali Linuxで起動できない - Minimal BASH Like Line Editing 1 2022/06/03 13:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
carbon化ってなんですか?
-
csh(Cシェル)のevalに関して
-
kshでのcase文条件範囲について
-
Linuxでmakeが実行出来ません
-
Mac OSXのターミナルでemacsを起動
-
POSIX文字クラスの使い方
-
diskpart でパーティションの一...
-
シェルスクリプトからPHP実行
-
lsコマンドの色設定が反映されない
-
telnet へのパイプができないです
-
scpコマンドでリモートサーバの...
-
月毎のログファイルサイズの平...
-
dfコマンドの出力結果について
-
メールサーバの/var/spool/mail...
-
atコマンドによるスケジュール...
-
【ターミナル】MacBookにディー...
-
linuxでの実行中のプログラムの...
-
DOSコマンドでディレクトリ以下...
-
CentOS6.4で/commonを作成する...
-
Warning: Output is not to
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンド終了ステータス
-
実行中のシェルスクリプト自体...
-
FTPコマンドの戻り値について
-
lsコマンドの色設定が反映されない
-
ping -cコマンドで指定した個数...
-
diskpart でパーティションの一...
-
cshで変数名の入れ子ができない
-
csh(Cシェル)のevalに関して
-
cygwinシェルスクリプト内での...
-
シェルスクリプトからPHP実行
-
carbon化ってなんですか?
-
cshの標準出力を制御したい
-
シェルの実行について
-
シェルスクリプトで困っていま...
-
シェルスクリプト(if文)
-
シェルの -eq の動作について
-
cronでftp自動転送を行いたい
-
Mac OSXのターミナルでemacsを起動
-
Bシェルでパイプ→exitがうまく...
-
telnet へのパイプができないです
おすすめ情報