| В файле конфигурации exim пишем:
   log_file_path = /var/log/exim/exim-%s-%D.log
   log_selector = +delivery_size +sender_on_delivery +received_recipients
В файл /var/db/ukr_net ложим список украинских сетей
И собствено скрипт для подсчета трафика с разделением на украинский и мировой:
#!/usr/bin/perl -w
my ($nmin, $nmax) = (32,0);
open UKRNETS, "/var/db/ukr_net";
while (<UKRNETS>) {
  s/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\/([0-9]+)$//;
  $UkrIPs{substr(substr(unpack("B32", pack("N", $1)),24).substr(unpack("B32", pack("N", $2)),24).substr(unpack("B32", pack("N", $3)),24).substr(unpack("B32", pack("N", $4)),24),0,$5)}="$1.$2.$3.$4\/$5";
  $nmin = $5 if $5 < $nmin;
  $nmax = $5 if $5 > $nmax;
}
close UKRNETS;
open TRAFF, '/var/log/exim/exim-main-20060122.log';
while (<TRAFF>) {
  my ($mail_from,$mail_to,$ip,$bytes_in,$bytes_out);
  if      (/^[0-9-]+ [0-9:]+ [A-Za-z0-9]{6}-[A-Za-z0-9]{6}-[A-Za-z0-9]{2} <= ([^\@]+@[A-Za-z0-9-.]+).* H=.*\[([0-9.]+)\].* S=([0-9]+).* for ([^\@]+@[A-Za-z0-9-.]+)$/) {
    $mail_1=$1;
    $mail_2=$4;
    $ip=$2;
    $bytes_in=$3;
    $bytes_out=0;
  } elsif (/^[0-9-]+ [0-9:]+ [A-Za-z0-9]{6}-[A-Za-z0-9]{6}-[A-Za-z0-9]{2} [\=\-\*]\> ([^\@]+@[A-Za-z0-9-.]+).* F=\<([^\@]+@[A-Za-z0-9-.]+)\>.* T=remote_smtp S=([0-9]+).* H=.*\[([0-9.]+)\].*/) {
    $mail_1=$2;
    $mail_2=$1;
    $ip=$4;
    $bytes_in=0;
    $bytes_out=$3;
  }
  if ((defined($ip)) and ($ip =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/)) {
    my $ipB=substr(unpack("B32", pack("N", $1)),24)."".substr(unpack("B32", pack("N", $2)),24)."".substr(unpack("B32", pack("N", $3)),24)."".substr(unpack("B32", pack("N", $4)),24);
    for ($Ne=$nmax; $Ne>=$nmin; $Ne--) {
      my $ipBin=substr($ipB,0,$Ne);
      if ($UkrIPs{$ipBin}) {
        $m_from{$mail_1}{ukr}{in} +=$bytes_in;
        $m_from{$mail_2}{ukr}{in} +=$bytes_in;
        $m_from{$mail_1}{ukr}{out}+=$bytes_out;
        $m_from{$mail_1}{mir}{in} -=$bytes_in;
        $m_from{$mail_2}{mir}{in} -=$bytes_in;
        $m_from{$mail_1}{mir}{out}-=$bytes_out;
        last;
      }
    }
    $m_from{$mail_1}{mir}{in} +=$bytes_in;
    $m_from{$mail_2}{mir}{in} +=$bytes_in;
    $m_from{$mail_1}{mir}{out}+=$bytes_out;
  }
}
close TRAFF;
my $i=0;
foreach $mails (keys %m_from) {
  $i++;
  print "$i $mails 
  in  ukr $m_from{$mails}{ukr}{in}
  out ukr $m_from{$mails}{ukr}{out}
  in  mir $m_from{$mails}{mir}{in}
  out mir $m_from{$mails}{mir}{out}
";
}
 |