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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FTPコマンドの戻り値について
-
UNIX Cシェルで実数の比較
-
コマンド終了ステータス
-
lsコマンドの色設定が反映されない
-
シェルスクリプトのYes、Noの入...
-
Mac OSXのターミナルでemacsを起動
-
scpコマンドでリモートサーバの...
-
Viで書き込もうとすると、保...
-
GNOME端末の起動 及び コマンド...
-
/ が何時の間にか「Read-only f...
-
Illustratorのデータをまとめて...
-
書き込み権限が無いためコピー...
-
cactiでグラフが表示されない
-
netshでipv6がインストールでき...
-
コマンドでのコンピュータ名変...
-
OS がインストールされているデ...
-
cron登録不可(´・ω・`)
-
e2fsckの実行について
-
/optのアクセス権を変更したい...
-
Linux shell ftp 転送 エラー制御
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンド終了ステータス
-
FTPコマンドの戻り値について
-
cronでftp自動転送を行いたい
-
diskpart でパーティションの一...
-
cshで変数名の入れ子ができない
-
lsコマンドの色設定が反映されない
-
複数の処理を順番にログアウト...
-
cshの標準出力を制御したい
-
実行中のシェルスクリプト自体...
-
UNIX Cシェルで実数の比較
-
Mac OSXのターミナルでemacsを起動
-
shellから起動したkterm上でコ...
-
telnet へのパイプができないです
-
Bシェルでパイプ→exitがうまく...
-
シェルスクリプトからPHP実行
-
空白を含んだシェル変数の代入
-
ping -cコマンドで指定した個数...
-
kshでのcase文条件範囲について
-
cronでaws_s3にデータを格納す...
-
vsftpd FTP転送を行うシェルス...
おすすめ情報