Как с помощью AkelPad извлечь IP адреса из txt файла ?
|
|
Slava23 | Дата: Воскресенье, 28.05.2017, 17:58 | Сообщение № 1 |
Рядовой
На сайте с: 28.05.2017
Город: Москва
Сообщений: 7
|
Здравствуйте! Прошу подсказать есть ли возможность с помощью AkelPad и какого либо скрипта извлечь IP адреса (просто списком) из txt файла (Если быть точным лог файл сервера) ? В txt файле IP указаны в каждой строке но, помимо IP в каждой строке еще много другого текста, который нужно отсеять оставив лишь одни IP-шники.. Если это возможно, объясните пожалуйста по подробнее как это сделать! Спасибо за ответ!
|
|
| |
Andrey_A | Дата: Воскресенье, 28.05.2017, 22:03 | Сообщение № 2 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
|
Slava23, в любых запросах по извлечению/преобразованию текста необходимо приложить текст ДО (часть исходного) и ПОСЛЕ (то что надо на выходе) для теста...
.
|
|
| |
Slava23 | Дата: Воскресенье, 28.05.2017, 22:37 | Сообщение № 3 |
Рядовой
На сайте с: 28.05.2017
Город: Москва
Сообщений: 7
|
Цитата 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
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
|
Извлекает IP адреса из выделенного текста Используется скрипт Functions.vbs - Скрипт с различными Функциями, которые можно использовать в других скриптах
Доступно только для пользователей
|
|
| |
Slava23 | Дата: Понедельник, 29.05.2017, 14:32 | Сообщение № 5 |
Рядовой
На сайте с: 28.05.2017
Город: Москва
Сообщений: 7
|
Здравствуйте! Огромное спасибо! Все работает, как нужно! Почти..
Есть пара нюансов результаты обработки скриптом и сервером немного отличаются.. Я на почту отправил исходный файл и 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
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
|
Slava23, для работы со скриптами необходимо прочитать в шапке темы "Коллекция скриптов" http://tc-image.3dn.ru/forum/9-169-1 там подробно все описано... Если после этого будут вопросы, можно будет разобрать ещё раз ---------- Что касается точности извлечения IP , то там в скрипте стоит регулярное выражение - его можно подправить.. т.к. не было текста до и после, то и тестировать было почти не на чем... ---------- Присланные файлы посмотрю позже
.
|
|
| |
Slava23 | Дата: Понедельник, 29.05.2017, 15:28 | Сообщение № 7 |
Рядовой
На сайте с: 28.05.2017
Город: Москва
Сообщений: 7
|
Andrey_A, Спасибо, создать кнопки с короткими командами - получилось! Сейчас каждый раз править сам скрипт нет необходимости )) Кнопки создал с иконками. Вопрос, а где посмотреть сами иконки и какая цифра ей соответствует , чтобы выбрать понравившуюся иконку и вписать ее код в кнопку?!?
|
|
| |
Andrey_A | Дата: Понедельник, 29.05.2017, 16:25 | Сообщение № 8 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
|
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
|
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 ? Вам виднее, я не силен в программировании..
Сообщение отредактировал Slava23 - Понедельник, 29.05.2017, 17:40 |
|
| |
Andrey_A | Дата: Понедельник, 29.05.2017, 23:46 | Сообщение № 10 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
|
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
|
Andrey_A, Отлично! Большое спасибо! То что нужно! Результаты по количеству строк совпадают полностью, а также совпадают по счетчику (количеству повторений IP)! Сказать что результаты совпадают символ в символ не могу, так как чуть-чуть отличается сортировка IP (после счетчика) в результатах скрипта и сервера, но это абсолютно не имеет значения.. Главное ваш скрипт полностью решает поставленную задачу (извлекает, считает и сортирует IP в файле)!!! Еще раз огромное спасибо!
|
|
| |
|