74 lines
1.5 KiB
Perl
Executable File
74 lines
1.5 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
use strict;
|
|
use DBI;
|
|
my $dbh = DBI->connect("dbi:SQLite:dbname=hlr.sqlite3","","");
|
|
|
|
|
|
my %mcc_names;
|
|
my %mcc_mnc_names;
|
|
|
|
sub get_mcc_mnc_name($)
|
|
{
|
|
my $mcc_mnc = shift;
|
|
my $ret = $mcc_mnc;
|
|
|
|
if ($mcc_mnc_names{$mcc_mnc} ne '') {
|
|
$ret = $mcc_mnc_names{$mcc_mnc};
|
|
}
|
|
|
|
return $ret;
|
|
}
|
|
|
|
sub read_networks($)
|
|
{
|
|
my $filename = shift;
|
|
my $cur_name;
|
|
|
|
open(INFILE, $filename);
|
|
while (my $l = <INFILE>) {
|
|
chomp($l);
|
|
if ($l =~ /^#/) {
|
|
next;
|
|
}
|
|
if ($l =~ /^\t/) {
|
|
my ($mcc, $mnc, $brand, $r) = split(' ', $l, 4);
|
|
#printf("%s|%s|%s\n", $mcc, $mnc, $brand);
|
|
$mcc_mnc_names{"$mcc-$mnc"} = $brand;
|
|
$mcc_names{$mcc} = $cur_name;
|
|
} elsif ($l =~ /^(\w\w)\t(.*)/) {
|
|
#printf("%s|%s\n", $1, $2);
|
|
$cur_name = $2;
|
|
}
|
|
}
|
|
close(INFILE);
|
|
}
|
|
|
|
read_networks("networks.tab");
|
|
|
|
my %oper_count;
|
|
my %country_count;
|
|
|
|
#my $sth = $dbh->prepare("SELECT imsi FROM subscriber where authorized=1");
|
|
my $sth = $dbh->prepare("SELECT imsi FROM subscriber");
|
|
|
|
$sth->execute();
|
|
|
|
while (my $href = $sth->fetchrow_hashref) {
|
|
my ($mcc, $mnc) = $$href{imsi} =~ /(\d{3})(\d{2}).*/;
|
|
#printf("%s %s-%s \n", $$href{imsi}, $mcc, $mnc);
|
|
$oper_count{"$mcc-$mnc"}++;
|
|
$country_count{$mcc}++;
|
|
}
|
|
|
|
|
|
foreach my $c (sort{$country_count{$b} <=> $country_count{$a}} keys %country_count) {
|
|
printf("%s: %d\n", $mcc_names{$c}, $country_count{$c});
|
|
|
|
foreach my $k (sort{$oper_count{$b} <=> $oper_count{$a}} keys %oper_count) {
|
|
if ($k =~ /^$c-/) {
|
|
printf("\t%s: %d\n", get_mcc_mnc_name($k), $oper_count{$k});
|
|
}
|
|
}
|
|
}
|