HTTP::MobileAgentのIPアドレス判定プラグイン


プラグイン機構がついて、こんなことがキレイに出来たらいいな。

勝手サイトとかでUA偽装されてる可能性があるときに、本当にそのキャリア使ってんのか判定できる。かなりの信頼性で。


別にプラグインじゃなくても Net::CIDR::MobileJP を普通に使えばいいんだけど。

package HTTP::MobileAgent::Plugin::ValidIPAddr;
use strict;
use warnings;

{
    package HTTP::MobileAgent;
    use Net::CIDR::MobileJP;

    sub is_valid_ipaddr {
        my $self = shift;
        my $cidr = Net::CIDR::MobileJP->new('net-cidr-mobile-jp.yaml');
        my $carrier = $cidr->get_carrier($ENV{REMOTE_ADDR});
        $carrier eq $self->carrier;
    }
}
1;
#!/usr/local/bin/perl
use strict;
use warnings;

use HTTP::MobileAgent;
use HTTP::MobileAgent::Plugin::ValidIPAddr;

local $ENV{HTTP_USER_AGENT} = 'DoCoMo/1.0/P502i/c10';
local $ENV{REMOTE_ADDR}     = '192.168.1.1';   # invalid
#local $ENV{REMOTE_ADDR}    = '210.153.84.1';  # valid
my $agent = HTTP::MobileAgent->new;
if ($agent->is_valid_ipaddr) {
    print "valid\n";
} else {
    print "invalid\n";
}


あと、Net::CIDR::MobileJP は、HTTP::MobileAgent::DoCoMoDisplayMap みたいなデータ埋め込んであるやつもモジュール内に欲しいかも。モジュールの更新頻度高くなるのがアレだけど。
いらんか。使う側で自分で作れって話だな。