- 2009-10-13 (火) 22:55
- プログラミング
Gmail のデータをプログラムで取得するべく IMAP プロトコルを調べて Gmail とたたかおうと思ったところ,残念ながら SSL を使ってアクセスをしなければならないようで,しかし telnet は残念ながら SSL を持っていない.そこでどうにかしないといけないなーと思ってぐぐっていたところ,SSL越しにTelnetをする方法として鯖の缶詰で紹介されていたのでそれを使ってみたがどうやら認証が通るのに LIST コマンドで失敗していた.ちなみにそのコマンドは以下の通り,
$ openssl s_client -connect server:port -quiet
最初はアクセス制限か何かかと思ったが Thunderbird とかはいけていたので,改行コードが実は間違っているんじゃないかと思い始め PHP で簡単に組んでみたところ案の定通ってしまいぐんにょり.そこでとりあえず stelnet というコマンドを作ってみた.
そんなこんなでうっかり着色までやってしまった.サーバ側からきたメッセージは緑色.これを /usr/local/bin ぐらいに stelnet とか言う名前で投げ入れてやれば stelnet server port でアクセスできます,
<?
/*
SSL経由のTELNETシステム
Copyright(C) 2009 imos.
*/
if ($argc != 3) die("Usage: stelnet server port\n");
$stdin = fopen('php://stdin', 'r');
$sock = @fsockopen("ssl://" . $argv[1], (int)$argv[2]);
if (!$sock) die("Cannot connect to the server $argv[1]:$argv[2]\n");
stream_set_blocking($stdin, 0);
do {
$select = array($stdin, $sock);
$dummy = array();
stream_select($select, $dummy, $dummy, NULL);
if ($select[0] == $stdin) {
$data = fread($stdin, 1024);
$data = str_replace("\r", '', $data);
fwrite($sock, str_replace("\n", "\r\n", $data));
} else {
$data = fread($sock, 1024);
if (strlen($data)) {
echo "\x1b[32m";
echo $data;
echo "\x1b[0m";
}
}
if (feof($sock) || feof($stdin)) break;
} while (1);
fclose($sock);
echo "\n__EOM__\n";
?>
-- 引数のチェックを行わなかったのと,100%のCPUを食うというバグがあったので修正 - 2009/10/16
最近 Gmail に依存しすぎて,バックアップの方法を考えなきゃと思った結果がこれだよ!とりあえずラベル情報も保存したいので POP3 じゃ物足りないわけです.さて時間ができればバックアップ作るぞー.
- Newer: 新iMac 27インチはディスプレイとしても使える
- Older: IOI 2009
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://imoz.jp/2009/10/telnet-over-ssl/trackback/
- Listed below are links to weblogs that reference
- SSL 越しに telnet する from 超現実いもす(imos)の日記