Home > プログラミング > SSL 越しに telnet する

SSL 越しに telnet する このエントリーを含むはてなブックマーク

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 でアクセスできます,

#!/usr/bin/php
<?
/*
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 じゃ物足りないわけです.さて時間ができればバックアップ作るぞー.

Comments:0

Comment Form
Remember personal info

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)の日記

Home > プログラミング > SSL 越しに telnet する

Search
Feeds
Meta

Return to page top