#!/usr/bin/perl # в качестве примера приведен скрипт, считающий количество # украинского/неукраинского трафика по лог-файлу вида # "IP что-то_еще количество_байт" use strict; use vars qw{%cache}; my @uaip; map {push @uaip, $_}(); my $ukr_bytes=0; my $no_ukr_bytes=0; while (<>) { if ($_=~ /^(\d+\.\d+\.\d+\.\d+)\D.+\D(\d+)$/) { my $ip=$1; my $bytes=$2; if (&ukr_ip($ip,\@uaip)) { ++$ukr_bytes; } else { ++$no_ukr_bytes; } } } print "Ukr: $ukr_bytes, non-Ukr: $no_ukr_bytes\n"; exit; sub ukr_ip { my ($uaddr,$uaip_ref)=@_; return $cache{"$uaddr"} if (exists $cache{"$uaddr"}); map { my ($oaddr,$mask)=split/\//,$_; my $poaddr=unpack("L",pack("C4",(split (/\./, $oaddr)))); my $puaddr=unpack("L",pack("C4",(split (/\./, $uaddr)))); my $pmask=unpack("L",pack("B32",(1 x $mask))); if (($puaddr & $pmask)==($poaddr & $pmask)) { $cache{"$uaddr"}=1; return 1; } }(@{$uaip_ref}); $cache{"$uaddr"}=0; return 0; } # fresh list from https://www.colocall.net/ua/prefixes.txt must be below __DATA__ __DATA__