Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка log-файла, Обработка log-файла 
:(
    Опции темы
Aleksandr123
  Дата 4.5.2008, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



Доброго времени суток!!!!!!!! Требуется помощь специалистов!!!! Буду благодарен!!
Попытаюсь подробно объяснить задание - существует лог файл. В нем грубо говоря указываются типы подключений и количество переданных байт за соединение. Задача состоит в обработке этого лог файла и сохранение необходимой информации в текстовом документе в виде таблицы.
Ниже привожу отрывок этого лог файла.
Jan 31 23:45:02 172.16.0.253 PIX1 %PIX-6-302013: Built outbound TCP connection 29658131 for outside:87.218.38.186/44433 (87.218.38.186/44433) to inside:Vela/3863 (213.142.196.31/3863) 
Jan 31 23:45:02 172.16.0.253 PIX1 %PIX-6-302013: Built outbound TCP connection 29658132 for outside:213.142.196.31/23861 (213.142.196.31/23861) to inside:Vela/3864 (213.142.196.31/3864) 
Jan 31 23:45:02 172.16.0.253 PIX1 %PIX-6-302014: Teardown TCP connection 29658028 for outside:92.113.96.10/6861 to inside:Vela/3815 duration 0:00:30 bytes 0 SYN Timeout 
Jan 31 23:45:02 172.16.0.253 PIX1 %PIX-7-609002: Teardown local-host outside:92.113.96.10 duration 0:00:30 
Jan 31 23:45:02 172.16.0.253 PIX1 %PIX-7-609001: Built local-host outside:84.50.160.85 
Jan 31 23:45:02 172.16.0.253 PIX1 %PIX-6-302013: Built inbound TCP connection 29658133 for outside:84.50.160.85/64626 (84.50.160.85/64626) to inside:Vela/23861 (213.142.196.31/23861) 
Jan 31 23:45:02 172.16.0.253 PIX1 %PIX-7-609001: Built local-host outside:82.116.115.126 
Jan 31 23:45:02 172.16.0.253 PIX1 %PIX-6-302013: Built outbound TCP connection 29658134 for outside:82.116.115.126/63368 (82.116.115.126/63368) to inside:Vela/3865 (213.142.196.31/3865) 
Jan 31 23:45:02 172.16.0.253 PIX1 %PIX-7-609001: Built local-host outside:91.124.134.21 
Jan 31 23:45:02 172.16.0.253 PIX1 %PIX-6-302013: Built outbound TCP connection 29658135 for outside:91.124.134.21/8080 (91.124.134.21/8080) to inside:Vela/3866 (213.142.196.31/3866) 
Jan 31 23:45:02 172.16.0.253 PIX1 %PIX-6-302014: Teardown TCP connection 29658124 for outside:85.106.167.149/4357 to inside:Rainbow/25 duration 0:00:05 bytes 1330 TCP FINs 
Jan 31 23:45:02 172.16.0.253 PIX1 %PIX-7-609002: Teardown local-host outside:85.106.167.149 duration 0:00:05 
Jan 31 23:45:03 172.16.0.253 PIX1 %PIX-6-302014: Teardown TCP connection 29658133 for outside:84.50.160.85/64626 to inside:Vela/23861 duration 0:00:00 bytes 1072 TCP Reset-I 
Jan 31 23:45:03 172.16.0.253 PIX1 %PIX-7-609002: Teardown local-host outside:84.50.160.85 duration 0:00:00 
Jan 31 23:45:03 172.16.0.253 PIX1 %PIX-7-609001: Built local-host outside:84.50.160.85 
Jan 31 23:45:03 172.16.0.253 PIX1 %PIX-6-106015: Deny TCP (no connection) from 84.50.160.85/64626 to 213.142.196.31/23861 flags ACK  on interface outside 
Jan 31 23:45:03 172.16.0.253 PIX1 %PIX-7-609002: Teardown local-host outside:84.50.160.85 duration 0:00:00 
Jan 31 23:45:03 172.16.0.253 PIX1 %PIX-7-609001: Built local-host outside:88.245.216.136 
Jan 31 23:45:03 172.16.0.253 PIX1 %PIX-6-302013: Built inbound TCP connection 29658137 for outside:88.245.216.136/4569 (88.245.216.136/4569) to inside:Rainbow/25 (Rainbow-outside/25) 
Jan 31 23:45:03 172.16.0.253 PIX1 %PIX-7-609001: Built local-host outside:193.151.254.103 
Jan 31 23:45:03 172.16.0.253 PIX1 %PIX-6-302013: Built inbound TCP connection 29658138 for outside:193.151.254.103/4115 (193.151.254.103/4115) to inside:Vela/23861 (213.142.196.31/23861) 

В текстовом документе должно содержаться три столбца.. первый столбец количество переданной исходящей информации в байтах.... второй столбец - количество переданной входящей информации и третий столбец - Сервер(он же внутренний ip адрес)...  Для начала нужно определить какой соединение было - иходящее или входящее (outbound или intbound), это возможно сделать по номеру соединения(при открытии соединения создается номер, к примеру Built inbound TCP connection "29658138"- вот этот номер ) затем определить количество переданных байт за соединение, это возможно определить в строке при закрытии соединения к примеру Teardown TCP connection 29658133 for outside:84.50.160.85/64626 to inside:Vela/23861 duration 0:00:00 bytes "1072" вот количество байт....и нужно определить сервер,который тоже указывается в строке при закрытии соединения всегда после слов to inside: ... к примеру to inside:Vela/23861,  to inside:Rainbow/25
Буду очень благодарен если вы поможете мне разобобраться с этим заданием!

PM MAIL   Вверх
ramus
Дата 4.5.2008, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 21.2.2008

Репутация: 1
Всего: 1



требуется уточнение:
1. лог файл статичен? либо в него постоянно дописываются новые строки? тогда как он отрезается?
2. большой ли лог файл? так как надо сохранять номер соединения, а потом спустя время при закрытии соединения ссылаться на него. Так как номер соединения пока он активен - уникальный (я так думаю) то его удобно хранить в хеше, например
Код

my %destination;
$destination{29658138}=inbound;


3. привели много "мусора" например 
Built inbound TCP connection "29658138"- вот этот номер
Teardown TCP connection 29658133 for outside:84.50.160.85/64626 to inside:Vela/23861 duration 0:00:00 bytes "1072"
тут номера соединений не совпадают !!! Я не спец в данном вопросе, но мне кажется лучше бы приводить связанную информацию

как пример кода можно начать с (это именно болванка, не готовый код!!!)
Код

use warnings;

my (@entry, %hm, @mms, $i, $d);

open( FILE,"tcp.log") or die ("Cannot open file tcp.log $!");
#Jan 31 23:45:03 172.16.0.253 PIX1 %PIX-7-609002: Teardown local-host outside:84.50.160.85 duration 0:00:00 

while ( <FILE> ) {
   next if ( $_ eq "\n" );  # propusk pustyh strok
   my ($mon,$day,$hms,$ip,$hz1,$hz2,$msg);
   ($mon,$day,$hms,$ip,$hz1,$hz2,$msg) = split (/\s/,$_,7);
   @entry=parseEntry( $msg );
   next unless (defined($entry[0]));
   ... тут анализ с записью в файл
   $hm{$entry[0]} = [ @entry ];

close( FILE ) or die ("Cannot close: $!");

sub parseEntry
{
  my $entry = shift;
  
  if ( $entry =~ /^Teardown TCP connection\s*(\d*)/ ) {
      return ( 'down', $1 );
   }
  if ( $entry =~ /^Built inbound TCP connection\s*(\d*)/ ) {
      return ( 'up_inbound', $1 );
   }
   if ( $entry =~ /this is header/ ) {  return undef; }

   warn "Not parsed string:\n$entry\n";
   return undef;
}





Это сообщение отредактировал(а) ramus - 4.5.2008, 22:21
PM MAIL   Вверх
sir_nuf_nuf
Дата 5.5.2008, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



мм.. немного не в тему - просто предостережение вам:
понятие входящего и исходящего TCP соединений никак не связано с тем в какую сторону больше трафика передается

Например у HTTPD передает наружу большой трафик по входящим соединениям.

Не ошибитесь =)


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
Bulat
Дата 5.5.2008, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Aleksandr123, какой размер лога??


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Aleksandr123
Дата 5.5.2008, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



Лог файлы создаются каждый день. Т.е. для каждого дня - новый лог файл.
Запись информации в лог файл совершается постоянно в течении суток с появлением новых соединений.
И к концу рабочего дня размер не заархивированного файла составляет около 200мб. В архиве файл весит в среднем 15мб. 
По сути нам нужны из всего лог файла только две строчки. Первая строка которая создается при открытии соединения - Jan 31 23:45:02 172.16.0.253 PIX1 %PIX-6-302013: Built inbound TCP connection 29658133 for outside:84.50.160.85/64626 (84.50.160.85/64626) to inside:Vela/23861 (213.142.196.31/23861)  - из этой строки нам нужен номер соединения, т.е. 29658133(номера уникальный) и информация о типе соединение inbound или outbound(входящее или исходящее)
и вторая строка которая создается при закрытии соединения - Jan 31 23:45:03 172.16.0.253 PIX1 %PIX-6-302014: Teardown TCP connection 29658133 for outside:84.50.160.85/64626 to inside:Vela/23861 duration 0:00:00 bytes 1072 TCP Reset-I  - в этой строке нас интересует по сути только количество переданной информации за сеанс и имя сервера(но хотя имя сервера так же указывается в строке при открытии соединения).
Вот такая не легкая задача встала на моем по пути и без ваших знаний и опыта мне не обойтись!
PM MAIL   Вверх
ramus
Дата 5.5.2008, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 21.2.2008

Репутация: 1
Всего: 1



1. То есть обработка файла происходит на следующий день, когда в него уже ничего не пишется?

2. "29658133(номер уникальный)"  - то есть в пределах одного файла двух РАЗНЫХ записей например на установление соединения с ОДИНАКОВЫМ номером не может быть?

Размер 200МБ нормально, у меня на персоналке обработка таких файлов занимает от 20-30 секунд до 2-3 минут в зависимости от масштаба обработки.

Для примера содержимое файла day.log 
Код

Jan 31 23:45:02 172.16.0.253 PIX1 %PIX-6-302013: Built outbound TCP connection 29658131 for outside:87.218.38.186/44433 (87.218.38.186/44433) to inside:Vela/3863 (213.142.196.31/3863) 
Jan 31 23:45:02 172.16.0.253 PIX1 %PIX-6-302013: Built outbound TCP connection 29658132 for outside:213.142.196.31/23861 (213.142.196.31/23861) to inside:Vela/3864 (213.142.196.31/3864) 
Jan 31 23:45:02 172.16.0.253 PIX1 %PIX-6-302014: Teardown TCP connection 29658028 for outside:92.113.96.10/6861 to inside:Vela/3815 duration 0:00:30 bytes 0 SYN Timeout 
Jan 31 23:45:02 172.16.0.253 PIX1 %PIX-7-609002: Teardown local-host outside:92.113.96.10 duration 0:00:30 

Jan 31 23:45:02 172.16.0.253 PIX1 %PIX-6-302013: Built inbound TCP connection 29658133 for outside:84.50.160.85/64626 (84.50.160.85/64626) to inside:Vela/23861 (213.142.196.31/23861)
Jan 31 23:45:03 172.16.0.253 PIX1 %PIX-6-302014: Teardown TCP connection 29658133 for outside:84.50.160.85/64626 to inside:Vela/23861 duration 0:00:00 bytes 1072 TCP Reset-I



вот код (естественно можно написать круче smile но в качестве примера пойдет )

Код

#!/usr/bin/perl

use strict;

my (@entry, %hm, @mms, $i, $d);
open( FILE,"day.log") or die ("Cannot open file day.log $!");

# Хеш для хранения типа соединение inbound или outbound
my %htype;

# Хеш для хранения переданной информации за сеанс 
my %hsend;

# Хеш для хранения имя сервера
my %hserver;

while ( my $str =<FILE> ) {

  #Jan 31 23:45:02 172.16.0.253 PIX1 %PIX-6-302013: Built inbound TCP connection 29658133
  #for outside:84.50.160.85/64626 (84.50.160.85/64626) to inside:Vela/23861 (213.142.196.31/23861)
  # надо -> %htype{29658133} = inbound
  if ( $str =~ /Built inbound TCP connection\s*(\d*)/ ) {
      $htype{$1} = "inbound";
      next;
  }
  if ( $str =~ /Built outbound TCP connection\s*(\d*)/ ) {
      $htype{$1} = "outbound";
      next;
  }

  #Jan 31 23:45:03 172.16.0.253 PIX1 %PIX-6-302014: Teardown TCP connection 29658133 
  #for outside:84.50.160.85/64626 to inside:Vela/23861 duration 0:00:00 bytes 1072 TCP Reset-I
  # надо -> %hsend{29658133}   = 1072
  #         %hserver{29658133} = Vela
  if ( $str =~ /Teardown TCP connection\s*(\d*).*to inside:(\w+).*duration.*bytes\s*(\d*)/ ) {
      $hserver{${1}} = "${2}";
      $hsend{${1}}   = "${3}";
  }


close( FILE ) or die ("Cannot close: $!");

# Вывод
foreach (keys (%htype)) {
  print "$_ -> type=$htype{$_} send=$hsend{$_} server=$hserver{$_}\n";

}


выводит на экран с этими данными:
Код

29658133 -> type=inbound send=1072 server=Vela
29658132 -> type=outbound send= server=
29658131 -> type=outbound send= server=


PM MAIL   Вверх
Aleksandr123
Дата 5.5.2008, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



Да, обработка файла происходит на следующий день, когда в него уже ничего не пишется. В пределах одного файла двух Одинаковых номеров соединения быть не может. - да это так.  Номера для каждого нового соединения уникальны. 
Большое Спасибо за предоставленный код) попробую разобраться..
PM MAIL   Вверх
Bulat
Дата 6.5.2008, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Aleksandr123, вариантов как распарсить данный лог очень много. Лично я в таких случаях предпочитаю создавать классы(наборы данных) к примеру можешь посмотреть данную тему про классы в perl, т.е. объекты которые будут хранить всю нужную информацию во время прасинга, как парсить с помощью регулярных выражений - тут и так достаточно примеров, если уж по этому и будут вопросы то лишь если где-то что-то конкретное не срабатывает. 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Aleksandr123
Дата 6.5.2008, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



Большое спасибо всем за помощь! вроде почти все получается! Только хотелось бы еще узнать, имеется ли возможность посчитать отдельно общее количество переданной и отдельно общее количество полученной информации во всем логе?

Это сообщение отредактировал(а) Aleksandr123 - 6.5.2008, 23:02
PM MAIL   Вверх
shamber
Дата 7.5.2008, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



ну вы же их празделяете когда регуляркой разбираете?
вот и сложите в конце.
PM MAIL Jabber   Вверх
Bulat
Дата 7.5.2008, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Aleksandr123, обрати внимание, я тебе не зря дал ссылку на классы. Ты можешь создать свой класс, который будет хранить в одном поле число - количество байт(если я не ошибаюсь) с каждой распарсенной строки. Далее сложить все значения в цикле smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Aleksandr123
Дата 7.5.2008, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



Ок, всем большое спасибо!!!!!!!!!
PM MAIL   Вверх
Aleksandr123
Дата 30.5.2008, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



Доброго времени суток!!!!!!!!! Требуется еще небольшая помощь - как сделать так чтобы результаты сохранялись в текстовом файле????? очень нужна помошь!!!!1
PM MAIL   Вверх
shamber
Дата 30.5.2008, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Цитата(Aleksandr123 @  30.5.2008,  14:51 Найти цитируемый пост)
сохранялись в текстовом файле???

это как?


типа этого?
Код

open(FILE,>."somefile.txt");
print FILE $var; #var записан в файл
close FILE;


Добавлено через 38 секунд
ЗЫ для нового вопроса новая тема
PM MAIL Jabber   Вверх
Aleksandr123
Дата 30.5.2008, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



Зачем создавать новую тему, ведь вопрос в этой же теме..... 
У меня почему то сохраняется в текстовике информация только по первому соединению...хм...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1063 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.