使用Perl查询手机号码归属地

 
 
 
有时候会接到“打后马上就挂”的匿名电话,有时候没注意,手机上面经常出现几个“未接电话”,这时就想知道到底从哪个地方打来的,心里有个底。

一般都是通过ip138.com查询的,查的次数多了,难免感觉太麻烦了,于是想到用Perl自己写一个程序来查询,当然原理还是远程调用ip138.com的HTTP请求。

脚本如下(querymb.pl)

#!/usr/bin/perl

use strict;
use Encode qw/encode decode/;
use LWP::UserAgent;

my ($mobile,$url,$ua,$resp,$line);

$mobile = $ARGV[0];
die "/nUsage: querymb.pl <mobile number>/n/n" if (! $mobile);

#### HTTP 请求地址
$url  = "http://www.ip138.com:8080/search.asp";
$ua   = LWP::UserAgent->new();

### 超时时间
$ua->timeout(10);

### 通过 POST 方法发送请求
$resp = $ua->post($url, { "mobile" => $mobile, "action" => "mobile" });

if (! $resp->is_success) {
    die "ERR: " . $resp->status_line . "/n";
}

my ($geo,$type,$found_geo,$found_type);
foreach (split(//r/,$resp->content)) {

    #### 由于语言环境是UTF-8,而返回的数据是 GB2312 编码,故需要转换下编码
    #### 如果您的语言环境是 GB2312,请注释下面这行
    $line = encode("utf-8",decode("euc-cn",$_));

    #### 找到归属地关键字
    if ($line =~ /卡号归属地/) {
        $found_geo = 1; next;
    }

    #### 找到卡类型关键字
    elsif ($line =~ /卡.*类.*型/) {
        $found_type = 1; next;
    }

    ### 获取归属地信息
    if ($found_geo) {
        $geo = $line;
        Encode::_utf8_off($geo);
        $geo =~ s/^/s+<TD.*>(.*)<//TD>/$1/g;
        $found_geo = 0;
        $geo =~ s/&nbsp;//g;
        next;
    }

    #### 获取卡信息
    if ($found_type) {
        $type = $line;
        Encode::_utf8_off($type);
        $type =~ s/^/s+<TD.*>(.*)<//TD>/$1/g;
        $type =~ s/&nbsp;//g;
        last;
    }
}
print "手机号码: $mobile/n";
print "卡号归属地: $geo/n";
print "卡类型: $type/n";

查询例子(偶以前的手机号码,呵呵~~~~):

# querymb.pl 13476051709
手机号码: 13476051709
卡号归属地: 湖北武汉
卡类型: 移动全球通卡
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值