加到opera菜单的,不要我说了吧。很多例子了。
代码: 全选
☎ cat ip.pl
#!/usr/bin/perl -w
use strict;
sub ipwhere {
# my $ipbegin,$ipend,$ipData1,$ipData2,$DataSeek,$ipFlag;
my $ipbegin;
my $ipend;
my $ipData1;
my $ipData2;
my $DataSeek;
my $ipFlag;
my $ipAddr1;
my $ipAddr2;
my $ip=$_[0]; #"59.33.209.104"; #shift;
my @ip=split(/\./,$ip);
my $ipNum = $ip[0]*16777216+$ip[1]*65536+$ip[2]*256+$ip[3];
my $ipfile="./QQWry.Dat";
open(FILE,"$ipfile");
binmode(FILE);
sysread(FILE,$ipbegin,4);
sysread(FILE,$ipend,4);
$ipbegin=unpack("L",$ipbegin);
$ipend=unpack("L",$ipend);
my $ipAllNum = ($ipend-$ipbegin)/7+1;
my $BeginNum=0;
my $EndNum=$ipAllNum;
Bgn:
my $Middle= int(($EndNum+$BeginNum)/2);
seek(FILE,$ipbegin+7*$Middle,0);
read(FILE,$ipData1,4);
my $ip1num=unpack("L",$ipData1);
if ($ip1num > $ipNum) {
$EndNum=$Middle;
goto Bgn;
}
read(FILE,$DataSeek,3);
$DataSeek=unpack("L",$DataSeek."\0");
seek(FILE,$DataSeek,0);
read(FILE,$ipData2,4);
my $ip2num=unpack("L",$ipData2);
if ($ip2num < $ipNum) {
goto nd if ($Middle==$BeginNum);
$BeginNum=$Middle;
goto Bgn;
}
$/="\0";
read(FILE,$ipFlag,1);
if ($ipFlag eq "\1") {
my $ipSeek;
read(FILE,$ipSeek,3);
$ipSeek = unpack("L",$ipSeek."\0");
seek(FILE,$ipSeek,0);
read(FILE,$ipFlag,1);
}
if ($ipFlag eq "\2") {
my $AddrSeek;
read(FILE,$AddrSeek,3);
read(FILE,$ipFlag,1);
if($ipFlag eq "\2") {
my $AddrSeek2;
read(FILE,$AddrSeek2,3);
$AddrSeek2 = unpack("L",$AddrSeek2."\0");
seek(FILE,$AddrSeek2,0);
}
else {
seek(FILE,-1,1);
}
$ipAddr2=<FILE>;
$AddrSeek = unpack("L",$AddrSeek."\0");
seek(FILE,$AddrSeek,0);
$ipAddr1=<FILE>;
}
else {
seek(FILE,-1,1);
$ipAddr1=<FILE>;
read(FILE,$ipFlag,1);
if($ipFlag eq "\2") {
my $AddrSeek2;
read(FILE,$AddrSeek2,3);
$AddrSeek2 = unpack("L",$AddrSeek2."\0");
seek(FILE,$AddrSeek2,0);
}
else {
seek(FILE,-1,1);
}
$ipAddr2=<FILE>;
}
nd:
chomp($ipAddr1,$ipAddr2);
$/="\n";
close(FILE);
$ipAddr2="" if($ipAddr2=~/http/i);
my $ipaddr="$ipAddr1 $ipAddr2";
$ipaddr =~ s/CZ88\.NET//isg;
$ipaddr="未知地区" if ($ipaddr=~/未知|http/i || $ipaddr eq "");
return $ipaddr;
}
sub cv {
open(CV, "|/usr/bin/enconv") or warn("No find enconv.p\n"),
return;
print CV $_[0];
close CV;
}
my $ipnow=ipwhere("${ARGV[0]}");
cv($ipnow);
print "\n";