トップ «前の日記(2004-03-03) 最新 次の日記(2004-03-05)» 編集

無稽筆談

過去の日記


2004-03-04 はれ

認証

近ごろ使いだしたLEO-NETであるが、インターネットに接続するには認証を経る必要がある。これは最初に一度だけやればいいのかと思っていたが、どうやら一定時間パケットが流れていないと再度認証を求められるようだ。しかもこの認証はHTTPの基本認証でのみ行われるため、WWWブラウザを立ち上げてユーザID・パスワードを入力するまでほかのサービスが利用できない。たとえばPC起動時にメールのチェックやNTPによる時刻合わせが動くようにしているのに、通常はそれらが動くまで認証が終わらないので目的を実現することができないのである。

いったんWWWブラウザで認証をすませば使えるとはいえ、毎日そんなことが繰り返されるのもなんか釈然としない。そこで認証を行うプログラムを作って、Windowsのスタートアップメニューにでも登録しようと考えたわけである。まず未認証時にLEO-NETがどんな応答を返してくるのか調べてみた。このサイトのトップページ(http://www.nonkida.net/)を要求すると以下の応答が返ってくる。

HTTP/1.1 302 Moved Temporarily
Server: PIX Firewall HTTP/1.1
Location: http://XXX.XXX.XXX.XXX/210.138.43.145/www.nonkida.net/
Connection: close

XXX.XXX.XXX.XXXは実際にはLEO-NET内のプライベートアドレスになっている。210.138.43.145はwww.nonkida.netに対応するIPアドレスである。次に移動先のURIを要求してみると以下のような応答が返ってくる。

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="LEO-NET User Authentication"
Connection: close

なるほど、ここで認証が求められるわけか。以下が認証要求に応じたリクエストを投げたときの応答である。

HTTP/1.1 302 Moved Temporarily
Server: PIX Firewall HTTP/1.1
Location: http://www.nonkida.net/
Connection: close

ふーん、こうして目的のサイトにたどり着くんだ。

といったことを踏まえてこんなコードを書いてみた。

import java.net.HttpURLConnection;
import java.net.URL;
import org.apache.commons.codec.binary.Base64;

public class LeonetAuth {
private static final String PASSCODE = "12345:678900";
private static final String HOMEPAGE = "http://www.google.com/";

public static void main(String[] args) throws Exception {
String encpass = new String(Base64.encodeBase64(PASSCODE.getBytes()));

URL url = new URL(HOMEPAGE);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestProperty("Authorization", "Basic " + encpass);
con.connect();
System.out.println
(con.getResponseCode() + " " + con.getResponseMessage());
}
}

PASSCODEはLEO-NET接続用のIDとパスワード、HOMEPAGEは任意のURIである。基本認証のBase64エンコードにはJakarta Commonscodecを利用した。java.net.URL#openConnectionが302に対応して動いてくれることを初めて知った、なんてことはここだけの話ということで(^^ゞ。今のところWindowsのスタートアップメニューから起動して期待通りの結果が得られているみたい。

本日のツッコミ(全2件) [ツッコミを入れる]
> 内藤 (2004-04-01 23:06)

初めまして。<br>当方、最近、娘を大学入学の関係から、レオパレスに入居させました。以前から活用しているヤフーメッセを使おうとしたのですが、レオパレスのHPなどには、メッセンジャー関係のボイス&画像チャットは、出来ないと書いてありましたが、ヤフーメッセのボイスチャットは、半二重ですし、MSNメッセや<br>windowsメッセに比べると一般的なポートを使っており、プライベートアドレスでも使えるので、使えるだろうと、娘に持たせるノートPCにセッティングし、持っていきまして入居当日、さっそく接続しました。その接続当日は問題なく、leo-netから出て、ボイス&画像チャットが出来たのですが、次の日になると<br>文字チャットは、出来ますが、ボイス&画像チャットは、ファイヤーウォールの中からなので出来ないというメッセージが出て使えなくなりました。何とかヤフーメッセをボイス&画像チャット付きで使う方法がないものでしょうか。

> ひがし (2004-04-02 21:55)

初めまして。インスタントメッセージのたぐいを使ってないので役に立つことは書けないのですが、どこかのポートをListenするアプリケーションは難しいのではないかと思います。メッセンジャー同士がセッションを張って通信するのであれば、LEO-NET側からつなぎにいけば使えるのかなぁ。