forum.bitel.ru
http://forum.bitel.ru/

IPN. преобразование детализации
http://forum.bitel.ru/viewtopic.php?f=25&t=4359
Страница 1 из 1

Автор:  nolka4 [ 30 июл 2010, 09:05 ]
Заголовок сообщения:  IPN. преобразование детализации

что это такое:
Скрипт нужен для того, чтобы в случае создания сырой детализации преобразовать его к более читабельному виду. IP адреса преобразуются в доменные имена по возможности, выводится таблица, в которой вместо голых IP как раз пишутся эти доменные имена, каждый домен кликабелен, при клике происходит переход на сервис whois.

После основной таблицы выводится таблица суммарного трафика по каждому домену.

работает через браузер. при желании можно переписать чтобы работал в консоли.

требования:
  • apache2
  • php5

установка:
  • создать каталог в директории www
  • распаковать туда содержимое архива ip2name.zip

как пользоваться:
  • Забираем файл сырой детализации из сервера биллинга.
  • Распаковываем csv файл из архива с детализацией.
  • Через браузер заходим на скрипт преобразования.
  • Нажимаем кнопку выбора файла, выбираем файл, нажимаем кнопку "Отправить".
  • Ждем
  • Сохраняем полученный результат в файл и даем клиенту, чтобы убедился, что эот именно он качал прон из кантагтега =))

в планах
Сделать возможность фильтрации по входящему/исходящему, трафику, ну, и возможность фильтрации по всяким там ip

Автор:  zavndw [ 27 дек 2012, 03:57 ]
Заголовок сообщения:  Re: IPN. преобразование детализации

Как сделать этот пункт "Распаковываем csv файл из архива с детализацией."?
не могу открыть просто так файл с таким расширением .bgdl

Автор:  skyb [ 27 дек 2012, 06:40 ]
Заголовок сообщения:  Re: IPN. преобразование детализации

это нада заказать детализацию по сессии
в ipn кажись в договоре, там в отчетах.


для диалапа тоже пойдет?

Автор:  snark [ 27 дек 2012, 16:11 ]
Заголовок сообщения:  Re: IPN. преобразование детализации

skyb писал(а):
для диалапа тоже пойдет?

Кратко - да.

Автор:  skyb [ 28 дек 2012, 00:09 ]
Заголовок сообщения:  Re: IPN. преобразование детализации

snark писал(а):
skyb писал(а):
для диалапа тоже пойдет?

Кратко - да.

не пробовал ставить?

Автор:  snark [ 28 дек 2012, 03:21 ]
Заголовок сообщения:  Re: IPN. преобразование детализации

skyb писал(а):
не пробовал ставить?

А смысл? Если б была нужда - уже давно написал бы простенький парсер (всего то надо file() + preg_match() + gethostbyaddr()), а раз нужды нет - свое не написал и стороннее не ставил ;)

Автор:  dex [ 22 сен 2013, 12:50 ]
Заголовок сообщения:  Re: IPN. преобразование детализации

Спасибо, попробовал, работает, но только на php-5.2, на более новых нет. А сам я от программирования весьма далек ((
Поэтому вопрос: Данный скрипт все еще актуален? В биллинге не появилось встроенных возможностей по переработке детализации в более удобоваримый вид? Как с этим в модуле Inet? В мануале и вики ничего не нашел, поэтому ткните мордой если не трудно.

Цитата:
в планах
Сделать возможность фильтрации по входящему/исходящему, трафику, ну, и возможность фильтрации по всяким там ip


Если актуальность еще есть, то можно где то скачать более новую версию данного скрипта?
Или может кто подскажет более продвинутый способ?

Автор:  Magistr [ 24 сен 2013, 16:01 ]
Заголовок сообщения:  Re: IPN. преобразование детализации

Вот тут мне накатали

Код:
#!/usr/bin/perl -w
use strict;
use warnings;
use Socket;

# Сеть
my $net = {
                'addr'  => "192.168.хх.0",
                'mask'  => "24",
                };

# Проверка находится ли ip в сети
sub CheckIpInNet($$)
        {
        my ($net, $addr) = @_;
        my $result = undef;

        # Считаем сеть
        my $ip_address_binary = inet_aton( $net->{'addr'} );
        my $netmask_binary = ~pack("N", (2**(32-$net->{'mask'}))-1);
        my $network_address = inet_ntoa( $ip_address_binary & $netmask_binary );
        # Первый и последний адреса сети
        my $first = inet_ntoa( pack( 'N', unpack('N', $ip_address_binary & $netmask_binary ) + 1 ));
        my $last = inet_ntoa( pack( 'N', unpack('N', $ip_address_binary | ~$netmask_binary ) - 1 ));
        # Приводим адреса в int
        my $int_first = unpack 'N' => pack 'C4' => split /\./ => $first;
        my $int_addr = unpack 'N' => pack 'C4' => split /\./ => $addr;
        my $int_last = unpack 'N' => pack 'C4' => split /\./ => $last;
        # Проверяем адреса
        if(($int_first <= $int_addr) and ($int_addr <= $int_last))
                {$result = 1;}

        return $result;
        }

my %summ = ();
open(FL, "data.csv") or die($!."\n");
while(<FL>)
        {
        chomp();
        # Время;С адреса;С порта;На адрес;На порт;Байт;С интерфейса;На интерфейс
        my @row = split(/;/, $_);
        # Пропускаем строки, где нет числа в трафике
        if((!defined($row[5])) or ($row[5] !~ m/^\d+$/))
                {next;}
        my %info = (
                        'src'   => $row[1],
                        'dst'   => $row[3],
                        'traf'  => $row[5],
                        );
        # Если ip источника/назначния есть в сети, добавим информацию о трафике
        if(&CheckIpInNet($net, $info{'src'}))
                {$summ{$info{'src'}}->{'out'} += $info{'traf'};}
        elsif(&CheckIpInNet($net, $info{'dst'}))
                {$summ{$info{'dst'}}->{'in'} += $info{'traf'};}
        }
close(FL) or die($!."\n");
# Сортировка и вывод
foreach my $ip (reverse sort {$summ{$a}->{'in'} <=> $summ{$b}->{'in'}} keys %summ)
        {print $ip."\t".$summ{$ip}->{'in'}."\t".$summ{$ip}->{'out'}."\n";}


1;

Автор:  snark [ 24 сен 2013, 16:23 ]
Заголовок сообщения:  Re: IPN. преобразование детализации

Magistr писал(а):
Код:
# Сеть
my $net = {
                'addr'  => "192.168.хх.0",
                'mask'  => "24",
                };

Я сам профессиональный параноик, но чтобы так шифроваться :)

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/