@IT情報マネジメント会議室は、2009年4月15日に新システムに移行しました。
新たに書き込みを行う場合には、新しい会議室をご利用ください。
- PR -

JavaでIPを効率的に比較するには

1
投稿者投稿内容
tzk
常連さん
会議室デビュー日: 2002/05/17
投稿数: 35
投稿日時: 2003-08-25 19:32
こんにちは。tzkです。
現在、ファイヤーウォールを通ったIPごとに処理を振り分けるための機能を実装するに際して悩んでいます。

つまり、IPが10.10.10.10の場合はある処理をし、20.20.20.20の場合は他の処理をするといった感じです。
この場合、サーブレットでHttpServletRequestのgetRemoteAddr()でIPを文字列として取得した後に文字列で一致するかどうかを見ています。ですが、これだと10.10.10.*の場合に効率が悪かったりするなと思っています。

Javaでこのようなことを実装する場合に効率の良いやり方があれば教えて下さい。
tzk
常連さん
会議室デビュー日: 2002/05/17
投稿数: 35
投稿日時: 2003-08-25 19:44
すいません、会議室を間違えたようです。
Javaのほうに移動したいのですが、どうしたらよいですかね。。。
未記入
大ベテラン
会議室デビュー日: 2003/06/28
投稿数: 219
投稿日時: 2003-08-27 15:33
こんにちは。
なかなか会議室を移動させられないようですので 取り敢えずレスします。
自分でしたら単純に文字列をsubstringして比較します。
コード:
// ダミーIPデータ
String ip = "10.10.10.255";

String cip = ip.substring (0, 9);
if (cip.equals ("10.10.10.")){
	System.out.println ("1番目の処理");
}
else if (cip.equals ("20.20.20.")){
	System.out.println ("2番目の処理");
}

小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2003-08-27 23:56
え〜と、ここでスレッドを伸ばしてしまって良い物か悩んでしまいますが・・・。
もし比較するIPアドレスが複数あるとか、今後増えていく予定がある場合でしたら、
私でしたらHashMapとか使ってみると思いました。予めチェックするIPアドレスと
実行する処理をメソッドに実装したクラスのインスタンス(ここでは便宜的にJobClassを継承したクラスとします)をHashMapのインスタンスに設定しておいて、

class JobClass{
public void doJob();
}

class JobClass_A extends JobClass{
 public void doJob()[
  System.out.println ("1番目の処理");
 }
}

class JobClass_B extends JobClass{
 public void doJob()[
  System.out.println ("2番目の処理");
 }
}


Map ip_maps = new HashMap();
ip_maps.put("10.10.10.10",new JobClass_A())
ip_maps.put("20.20.20.20",new JobClass_B())
.
.
.

振り分け処理を行うところで

String client_ip = "10.10.10.10";

JobClass job = (JobClass)ip_maps.get(client_ip);
if(job != null){
  job.doJob();
}

こんな感じにするとコードを簡潔にできて、動的にチェックするIP増やしたりできる
と思うのですが。
サーブレット内でチェックを行うのでしたら、サーブレットのinitメソッドでIPアドレ
スと処理クラスのマップを作ってしまうというのはどうですかね。





[ メッセージ編集済み 編集者: 小僧 編集日時 2003-08-27 23:58 ]

[ メッセージ編集済み 編集者: 小僧 編集日時 2003-08-28 00:00 ]
1

スキルアップ/キャリアアップ(JOB@IT)