[ Обновленные темы · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Andrey_A, simup, ХарВик, chip642  
Форум » • AkelPad • » ТЕСТИРОВАНИЕ СКРИПТОВ для AkelPad » Как с помощью AkelPad извлечь IP адреса из txt файла ? (Извлечение объектов)
Как с помощью AkelPad извлечь IP адреса из txt файла ?
Slava23Дата: Воскресенье, 28.05.2017, 17:58 | Сообщение № 1
Рядовой

На сайте с: 28.05.2017
Город: Москва
Сообщений: 7
Награды: 0
Репутация: 0
Здравствуйте!
Прошу подсказать есть ли возможность с помощью AkelPad и какого либо скрипта извлечь IP адреса (просто списком) из txt файла (Если быть точным лог файл сервера) ?
В txt файле IP указаны в каждой строке но, помимо IP в каждой строке еще много другого текста, который нужно отсеять оставив лишь одни IP-шники..
Если это возможно, объясните пожалуйста по подробнее как это сделать!
Спасибо за ответ!
 
Andrey_AДата: Воскресенье, 28.05.2017, 22:03 | Сообщение № 2
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7163
Награды: 139
Репутация: 124
Аверин Андрей
Slava23, в любых запросах по извлечению/преобразованию текста необходимо приложить текст ДО (часть исходного) и ПОСЛЕ (то что надо на выходе) для теста...

.


 
Slava23Дата: Воскресенье, 28.05.2017, 22:37 | Сообщение № 3
Рядовой

На сайте с: 28.05.2017
Город: Москва
Сообщений: 7
Награды: 0
Репутация: 0
Цитата Andrey_A ()
в любых запросах по извлечению/преобразованию текста необходимо приложить текст ДО (часть исходного) и ПОСЛЕ (то что надо на выходе) для теста...

Вот текст в исходном файле (вместо xxx реальный IP):
======
xxx.xxx.xx.xxx - - [28/May/2017:05:31:10 +0300] "GET /robots.txt HTTP/1.0" 403 2912 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com )"
xxx.xx.xx.xxx - - [28/May/2017:06:17:36 +0300] "GET /robots.txt HTTP/1.0" 301 326 "-" "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2"
+ еще ~15000-20000 подобных строк
======

На выходе хотелось бы получить просто файл со списком IP вида:
====
xxx.xxx.xx.xxx
xxx.xxx.xx.xxx
====

А в идеале не просто список IP-шников, а все одинаковые IP сосчитаны, кол-во повторений указано в виде числа перед IP, (повторяющиеся IP удалены), а сам список отсортирован от большего числа (повторений) к меньшему.. Если конечно такое возможно с помощью одного скрипта сделать..

Примерно вот в таком виде (где первое число, это-то сколько раз указанный IP встречался в тексте, второе число (в примере xxx) собственно сам IP):
====
2387 - xxx.xxx.xx.xxx
1242 - xxx.xxx.xx.xxx
1211 - xxx.xxx.xx.xxx
999 - xxx.xxx.xx.xxx
587 - xxx.xxx.xx.xxx
374 - xxx.xxx.xx.xxx
234 - xxx.xxx.xx.xxx
18 - xxx.xxx.xx.xxx
...
====

Приходится иметь дело с большим кол-вом лог файлов, если бы появилась возможность делать то , что описано выше, жить бы стало проще, жить бы стало веселей ;)

В качестве исходного текста можно использовать вот этот, в нем есть повторяющиеся IP и те которые не повторяются
======
95.108.181.33 - - [28/May/2017:06:35:39 +0300] "GET / HTTP/1.0" 200 111605 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"
66.249.66.23 - - [28/May/2017:06:43:24 +0300] "GET HTTP/1.1" 200 149046 "-" "Googlebot-Image/1.0"
180.76.15.154 - - [28/May/2017:06:17:36 +0300] "GET /robots.txt HTTP/1.0" 301 326 "-" "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2"
95.108.181.33 - - [28/May/2017:06:35:39 +0300] "GET / HTTP/1.0" 200 111605 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"
141.8.132.35 - - [28/May/2017:06:35:43 +0300] "GET / HTTP/1.0" 301 316 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"
95.108.181.33 - - [28/May/2017:06:36:09 +0300] "GET / HTTP/1.0" 200 111882 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"
66.249.66.23 - - [28/May/2017:06:43:24 +0300] "GET HTTP/1.1" 200 149046 "-" "Googlebot-Image/1.0"
37.9.118.28 - - [28/May/2017:19:39:22 +0300] "GET / HTTP/1.0" 200 111596 "-" "Mozilla/5.0 (compatible; YandexMetrika/2.0; +http://yandex.com/bots mtmon01i.yandex.ru)"
180.76.15.140 - - [28/May/2017:19:39:23 +0300] "GET / HTTP/1.0" 301 316 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"
95.108.181.33 - - [28/May/2017:06:35:39 +0300] "GET / HTTP/1.0" 200 111605 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"
180.76.15.30 - - [28/May/2017:19:39:25 +0300] "GET /robots.txt HTTP/1.0" 200 1306 "-" "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2"
66.249.64.220 - - [28/May/2017:10:16:41 +0300] "GET HTTP/1.1" 200 149046 "-" "Googlebot-Image/1.0"
141.8.183.21 - - [28/May/2017:11:18:14 +0300] "GET /index.php/news/item/70-n1 HTTP/1.0" 200 195158 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"
62.210.247.93 - - [28/May/2017:21:58:10 +0300] "GET /robots.txt HTTP/1.0" 200 1317 "-" "Riddler (http://riddler.io/about)"
66.249.66.23 - - [28/May/2017:06:43:24 +0300] "GET HTTP/1.1" 200 149046 "-" "Googlebot-Image/1.0"
95.108.181.33 - - [28/May/2017:06:35:39 +0300] "GET / HTTP/1.0" 200 111605 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"

======

На сервере через ssh консоль это делаю через команду: zcat namelogfile.gz | /usr/bin/awk {'print $1'} | sort -n | uniq -c | sort -rn | head -20
Получается, то что требуется:
2387 - xxx.xxx.xx.xxx
1242 - xxx.xxx.xx.xxx
1211 - xxx.xxx.xx.xxx
999 - xxx.xxx.xx.xxx
587 - xxx.xxx.xx.xxx
....

Но есть необходимость делать это на локальном ПК, может быть есть какой-нибудь вариант??


Сообщение отредактировал Slava23 - Воскресенье, 28.05.2017, 23:00
 
Andrey_AДата: Понедельник, 29.05.2017, 02:29 | Сообщение № 4
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7163
Награды: 139
Репутация: 124
Аверин Андрей
Извлекает IP адреса из выделенного текста
Используется скрипт Functions.vbs - Скрипт с различными Функциями, которые можно использовать в других скриптах

Доступно только для пользователей


 
Slava23Дата: Понедельник, 29.05.2017, 14:32 | Сообщение № 5
Рядовой

На сайте с: 28.05.2017
Город: Москва
Сообщений: 7
Награды: 0
Репутация: 0
Здравствуйте!
Огромное спасибо! Все работает, как нужно! Почти..

Есть пара нюансов результаты обработки скриптом и сервером немного отличаются..
Я на почту отправил исходный файл и 2 файла с результатами обработки (скриптом и сервером)
Если в двух словах, то скрипт не нашел IP с самым большим числом повторений, но при этом строк с результатами больше т.е. видимо скрипт нашел и записал в результаты IP которыми таковыми не являются.. (Ну или же сервер не находит все IP) Уверен что это можно поправить.. )

Вопрос по использованию скрипта:
До вчерашнего дня я вообще не был знаком с AkelPad Image 32, после того как вы написали решение сделал следующее:
1) скачал саму программу
2) согласно инструкции скачал и перезаписал Functions.vbs, по пути ...AkelFiles\Plugs\Scripts\Include\
3) создал файл getIP.vbs и положил его вот сюда ..\AkelFiles\Plugs\Scripts\getIP.vbs
4) запускаю скрипт из меню плагины --> скрипты --> выбираю из списка --> нажимаю кнопку "запустить" (ну еще для себя создал сочетания клавиш на этот скрипт)

Суть вопроса: в описании вы писали примеры коротких команд напр. Call("Scripts::Main", 1, "getIP.vbs", `2 1 1`)
Куда нужно вставлять эту команду?? Как запустить скрипт с определенными параметрами??
А то сейчас я правлю значения в самом скрипте, пересохраняю его и после этого запускаю. Как пример:
.Include("Functions.vbs") : tTxt = .GetSelText : nDubl = 2 : nNewTab = 1 : nAll = 0 : nSort = 2 : nMode = 0
Но я так думаю, что это не совсем правильно, а как запустить скрипт с атрибутами в программе "AkelPad Image 32" недопонимаю ))
Объясните новичку по подробнее, или дайте ссылку об этом можно почитать!

Еще раз большое спасибо!

ps Поражает скорость с которой было предложено готовое и рабочее решение


Сообщение отредактировал Slava23 - Понедельник, 29.05.2017, 14:45
 
Andrey_AДата: Понедельник, 29.05.2017, 14:52 | Сообщение № 6
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7163
Награды: 139
Репутация: 124
Аверин Андрей
Slava23, для работы со скриптами необходимо прочитать в шапке темы "Коллекция скриптов"
http://tc-image.3dn.ru/forum/9-169-1
там подробно все описано...
Если после этого будут вопросы, можно будет разобрать ещё раз
----------
Что касается точности извлечения IP , то там в скрипте стоит регулярное выражение - его можно подправить.. т.к. не было текста до и после, то и тестировать было почти не на чем...
----------
Присланные файлы посмотрю позже

.


 
Slava23Дата: Понедельник, 29.05.2017, 15:28 | Сообщение № 7
Рядовой

На сайте с: 28.05.2017
Город: Москва
Сообщений: 7
Награды: 0
Репутация: 0
Andrey_A, Спасибо, создать кнопки с короткими командами - получилось! Сейчас каждый раз править сам скрипт нет необходимости ))
Кнопки создал с иконками. Вопрос, а где посмотреть сами иконки и какая цифра ей соответствует , чтобы выбрать понравившуюся иконку и вписать ее код в кнопку?!?
 
Andrey_AДата: Понедельник, 29.05.2017, 16:25 | Сообщение № 8
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7163
Награды: 139
Репутация: 124
Аверин Андрей
Slava23, в кнопках можно ставить свою иконку из любой dll, exe ...:

Код
Icon("путь к своей иконке\AAA.ico",0)


Или из тех библиотек которые есть в сборке AkelPad Image
Меню - Справка - Просмотр значков - Просмотр значков AkelPadImage.dll
-----------
Я посмотрел ваши файлы, но ответа пока нет почему больше или меньше адресов, т.к. нужно искать/изобретать свою регулярку.
Та что в скрипте - взята на одном из профессиональных сайтов
Самая простое регулярное выражение для IP это:
Код
(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})

Можете заменить вместо
Код
(?:(?:2(?:[0-4][\d|5[0-5])|[0-1]?\d{1,2})\.){3}(?:(?:2(?:[0-4]\d|5[0-5])|[0-1]?\d{1,2}))

или найти свою...

.


 
Slava23Дата: Понедельник, 29.05.2017, 17:15 | Сообщение № 9
Рядовой

На сайте с: 28.05.2017
Город: Москва
Сообщений: 7
Награды: 0
Репутация: 0
Andrey_A, Спасибо за подсказку где посмотреть значки..
Использовать другие регулярные выражения попробую обязательно!

Добавлено (29.05.2017, 17:15)
---------------------------------------------
Andrey_A,
С регулярные выражением вида: (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) скрипт стал находить IP с самым большим кол-вом повторений, что уже радует..

А возможно ограничить поиск IP только по первому полю, (до первого пробела)? Дело в том что скрипт находит IP по всему тексту (что в моем случае, как бы и не требуется)
и как пример что с первичным регулярным выражением, что с (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) -(2 вариант) он находит текст похожий на IP (в моем случае версии браузеров) и обрезает его под стандарт IP..
В лог файле 17.3.1.383.01
В результатах скрипта: 17.3.1.383

Этого можно избежать если ограничить область поиска, на картинке - что нужно и не нужно:


Одним словом если искать только по первому полю, то скрипт работает безупречно, с кучей всяких вариантов формирования отчета (результатов)
Если что, стандартная строка лог файла выглядит вот так:
128.71.107.107 - - [28/May/2017:13:09:28 +0300] "GET / HTTP/1.0" 200 193142 " "Mozilla/5.0 (Linux; Android 4.2.2; ME302KL Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 YaBrowser/17.3.1.383.01 Safari/537.36"
Может быть как ограничение области поиска использовать не пробел, а два дефиса сразу после IP ? Вам виднее, я не силен в программировании.. typing


Сообщение отредактировал Slava23 - Понедельник, 29.05.2017, 17:40
 
Andrey_AДата: Понедельник, 29.05.2017, 23:46 | Сообщение № 10
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7163
Награды: 139
Репутация: 124
Аверин Андрей
Slava23, пропишите в скрипте перед регулярным выражением функцию поиска и замены

Код
tTxt = RegExpReplace(tTxt, "([^ ]+)([^\r\n]+)", "$1", 1, 0, 1)
aIP = RegExpSearchPlus(tTxt, "(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})", 1, 1, 1, 2)


.


 
Slava23Дата: Вторник, 30.05.2017, 03:51 | Сообщение № 11
Рядовой

На сайте с: 28.05.2017
Город: Москва
Сообщений: 7
Награды: 0
Репутация: 0
Andrey_A, Отлично! Большое спасибо! То что нужно!
Результаты по количеству строк совпадают полностью, а также совпадают по счетчику (количеству повторений IP)!
Сказать что результаты совпадают символ в символ не могу, так как чуть-чуть отличается сортировка IP (после счетчика) в результатах скрипта и сервера, но это абсолютно не имеет значения..
Главное ваш скрипт полностью решает поставленную задачу (извлекает, считает и сортирует IP в файле)!!!
Еще раз огромное спасибо! good up
 
Форум » • AkelPad • » ТЕСТИРОВАНИЕ СКРИПТОВ для AkelPad » Как с помощью AkelPad извлечь IP адреса из txt файла ? (Извлечение объектов)
  • Страница 1 из 1
  • 1
Поиск:

Интеллектуальные права и отказ от ответственности