The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Снова вопрос по split"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Снова вопрос по split" 
Сообщение от Rusy_M Искать по авторуВ закладки(ok) on 05-Май-05, 19:52  (MSK)
Добрый день!

У меня есть лог, который выглядит вот таким образом:
Thu May  5 04:02:46 2005; ******** IP traffic monitor started ********          
Thu May  5 04:02:46 2005; TCP; eth1; 1500 bytes; from x.x.x.x:59086 to x.x.x.x:13215; first packet                                              
Thu May  5 04:02:46 2005; TCP; eth1; 52 bytes; from x.x.x.x:25 to x.x.x.x:59023
Thu May  5 04:02:46 2005; TCP; eth1; 472 bytes; from x.x.x.x:59023 to x.x.x.x:25; first packet      (SYN)

В цикле while (<LOG>)я поставил count++;
  и next if ($count == 1);
Таким образом проблему с первой строкой решил. А вот далее бардак.
Если стороку разделять через split (";"), то над нужными переменными придется еще работать (отсекать bytes, from и т.д. ). Гораздо проще было бы делать split(" "), но "first packet" и (SYN )все портят (впрочем,  портит он и в случае split(";")).
Слабый, нетреннерованный мозг подсказывает мне, что до split можно было бы проверять строку на наличие "артефактов" и удалять их, оставляя все ровненьким и приемлимым для split. Но, как-то я никак не представлю себе - как это должно выглядить.
Нужна Ваша помощь.

Спасибо.

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Снова вопрос по split" 
Сообщение от Rusy_M Искать по авторуВ закладки(ok) on 05-Май-05, 20:14  (MSK)
А вот еще к теме. Просмотрел таки 200 Мб лог и нашел еще чудные строки  
Thu May  5 19:34:45 2005; TCP; eth1; 56 bytes; from x.x.x.x:80 to x.x.x.x:50486; first packet (SYN)                                                                                              
Thu May  5 19:34:45 2005; TCP; eth1; 52 bytes; from x.x.x.x:80 to x.x.x.x:50482; FIN acknowleged
Thu May  5 19:34:45 2005; TCP; eth1; 52 bytes; from x.x.x.x:50483 to x.x.x.x:80; FIN sent; 6 packets, 694 bytes, avg flow rate 0.00 kbits/s  
                                                                                                                                                                              
Стало совсем грустно.                                                                            
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Снова вопрос по split" 
Сообщение от madskull Искать по авторуВ закладки(??) on 05-Май-05, 20:28  (MSK)
>Добрый день!
>
>У меня есть лог, который выглядит вот таким образом:
>Thu May  5 04:02:46 2005; ******** IP traffic monitor started ********
>
>Thu May  5 04:02:46 2005; TCP; eth1; 1500 bytes; from x.x.x.x:59086
>to x.x.x.x:13215; first packet
>Thu May  5 04:02:46 2005; TCP; eth1; 52 bytes; from x.x.x.x:25
>to x.x.x.x:59023
>Thu May  5 04:02:46 2005; TCP; eth1; 472 bytes; from x.x.x.x:59023
>to x.x.x.x:25; first packet      (SYN)
>
> В цикле while (<LOG>)я поставил count++;
>  и next if ($count == 1);
> Таким образом проблему с первой строкой решил. А вот далее бардак.
>
> Если стороку разделять через split (";"), то над нужными переменными придется
>еще работать (отсекать bytes, from и т.д. ). Гораздо проще было
>бы делать split(" "), но "first packet" и (SYN )все портят
>(впрочем,  портит он и в случае split(";")).
> Слабый, нетреннерованный мозг подсказывает мне, что до split можно было бы
>проверять строку на наличие "артефактов" и удалять их, оставляя все ровненьким
>и приемлимым для split. Но, как-то я никак не представлю себе
>- как это должно выглядить.
> Нужна Ваша помощь.
>
> Спасибо.
>

Ну, это же регекспы чистой воды.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Снова вопрос по split" 
Сообщение от Rusy_M Искать по авторуВ закладки(??) on 05-Май-05, 23:24  (MSK)
>Ну, это же регекспы чистой воды.

Умеете ободрить:) Того же и Вам желаю в подобных ситуациях.

Я не просил написать за меня решение, но если оно Вам известно и оно такое смехотворное, что не достойно большего, чем Вы написали, наверное можно было намекнуть.


P.S. Кроме того, должен же быть способ "отсечения" ненужных данных без regexp, которыми хотелось бы обрабатывать то, что останется, а не использовать их в каждой дыре. Файлы все-таки не маленькие... Возможно я заблуждаюсь.  

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Снова вопрос по split" 
Сообщение от MaVeRiCk emailИскать по авторуВ закладки on 05-Май-05, 22:29  (MSK)
Конечно=)
`perldoc perlreref`
=)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Снова вопрос по split" 
Сообщение от Андрей Искать по авторуВ закладки(??) on 06-Май-05, 06:20  (MSK)
Что надо сделать-то с этим самым логом?
Каков должен быть результат?

Как правильно было замечено, надо использовать регулярные выражения.
Для того, чтобы подсказать, как их тут можно использовать надо знать, что Вы хотите получить в результате.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Снова вопрос по split" 
Сообщение от Rusy_M Искать по авторуВ закладки(ok) on 06-Май-05, 12:01  (MSK)
>Что надо сделать-то с этим самым логом?
>Каков должен быть результат?
>
>Как правильно было замечено, надо использовать регулярные выражения.
>Для того, чтобы подсказать, как их тут можно использовать надо знать, что
>Вы хотите получить в результате.

Для начала искал способ правильно разбить строку, в которой может быть переменное число эллементов. Уже все нашел. Это прекрасно делает сам split.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Снова вопрос по split" 
Сообщение от mthawk Искать по авторуВ закладки(ok) on 10-Май-05, 11:21  (MSK)
Собссна говоря об чем вопрос? узнать откуда, куда и сколько байт было передано?
Сразу могу указать на просчет в вашей логике.
Ваша т.н. "первая строка" это запись о старте демона, котрый занимается сбором пакетов.
Если в процессе работы демона был рестарт - эта строка появится заново уже в теле лога в NNNNN-ой строке.
а регекспом выковырять нужную Вам информацию гораздо проще, чем "подгонять" строку под split
NN bytes; from x.x.x.x:25 to x.x.x.x:59023
($bytes)=$LOG_HANDLER=~/(\d+)\sbytes/;
($from_addr)=$LOG_HANDLER=~/from ((\d{1,3}\.){3}\d{1,3})/;
($to_addr)=$LOG_HANDLER=~/to ((\d{1,3}\.){3}\d{1,3})/;
Можно все то же самое одной строкой сделать, но повторно понять что написал потом уйдет много времени :) в этом весь перл :)
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру