有時候會接到“打後馬上就掛”的匿名電話,有時候沒注意,手機上面經常出現幾個“未接電話”,這時就想知道到底從哪個地方打來的,心裡有個底。 一般都是通過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/ //g; next; } #### 擷取卡資訊 if ($found_type) { $type = $line; Encode::_utf8_off($type); $type =~ s/^/s+<TD.*>(.*)<//TD>/$1/g; $type =~ s/ //g; last; } } print "手機號碼: $mobile/n"; print "卡號歸屬地: $geo/n"; print "卡類型: $type/n"; 查詢例子(偶以前的手機號碼,呵呵~~~~): # querymb.pl 13476051709 手機號碼: 13476051709 卡號歸屬地: 湖北武漢 卡類型: 移動全球通卡 |