LINUX.ORG.RU
ФорумJob

Напишите мне bash скрипт за деньги UPD

 ,


0

3

Здравствуйте.

есть лог файл с ip файл куда записывать

Нужен мне скрипт, желательно на bash (я в нем немного разбираюсь) Есть у меня лог вот такой

Jun 16 12:47:53 176 kernel: [97953786.378078] Iptables: IN=eth0 OUT= MAC=55:04:a6:a6:89:42:f4:cc:55:4b:54:fe:08:00 SRC=20.225.216.75 DST=76.9.16.16 LEN=40 TOS=0x00 PREC=0x00 TTL=235 ID=16733 PROTO=TCP SPT=1408 DPT=12443 WINDOW=1024 RES=0x00 SYN URGP=0
Jun 16 12:47:55 176 kernel: [97953788.108592] Iptables: IN=eth0 OUT= MAC=55:04:a6:a6:89:42:f4:cc:55:4b:54:fe:08:00 SRC=188.246.174.242 DST=76.9.16.16 LEN=52 TOS=0x00 PREC=0x00 TTL=115 ID=38660 DF PROTO=TCP SPT=60058 DPT=5125 WINDOW=64240 RES=0x00 SYN URGP=0
Jun 16 12:47:55 176 kernel: [97953788.460593] Iptables: IN=eth0 OUT= MAC=55:04:a6:a6:89:42:f4:cc:55:4b:54:fe:08:00 SRC=188.246.174.242 DST=76.9.16.16 LEN=52 TOS=0x00 PREC=0x00 TTL=115 ID=38668 DF PROTO=TCP SPT=60059 DPT=5125 WINDOW=64240 RES=0x00 SYN URGP=0
Jun 16 12:48:03 176 kernel: [97953796.023545] Iptables: IN=eth0 OUT= MAC=55:04:a6:a6:89:42:f4:cc:55:4b:54:fe:08:00 SRC=79.124.62.82 DST=76.9.16.16 LEN=40 TOS=0x00 PREC=0x00 TTL=248 ID=22957 PROTO=TCP SPT=43343 DPT=4390 WINDOW=1024 RES=0x00 SYN URGP=0

UDP - Есть txt файл с ip-шниками.

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

Спасибо.



Последнее исправление: xohox (всего исправлений: 1)

которого нет в логе, хочу записывать ip в txt файл

Лог и txt файл - это разные файлы? А то вдруг разные.

kostik87 ★★★★★
()
sed -e 's#.* SRC=\([^ ]*\) .*#\1#' < log.log | sort -u > ips.txt

Платить сюда -> bitcoin:bc1qxh5zuv9zk2g6h4xunrmulnygfp36wksefsxh7p

L29Ah
()
Ответ на: комментарий от Clockwork

Как я могу в логе найти IP адрес, которого нет в логе?

Значит есть ещё один файл со списком IP адресов, которые нужно искать в логе и если их нет - записывать в txt файл.

В общем, задача поставлена не корректно.

Пойду сменю кофейную гущу.

kostik87 ★★★★★
()

Наверное тебе нужно не просто записывать IP в файл, но ещё и как-то обрабатывать это событие после этого. Если это событие, то его надо передавать куда-то. Для передачи событий используется DBUS, а программу лучше всего сделать демоном для systemd на C++ или Rust.

Ну и читать, наверное, лучше не из лога, а получать события из ядра.

Shushundr ★★★
()
Последнее исправление: Shushundr (всего исправлений: 1)
Ответ на: комментарий от Shushundr

Для передачи событий используется DBUS, а программу лучше всего сделать демоном для systemd на C++ или Rust

tee с именованным пайпом уже не модно? Понимаю))

Lrrr ★★★★★
()
Ответ на: комментарий от Clockwork

Это находит все ip. Я немного изменил первое сообщение. Не подумал, что нужно найденное с чем-то сравнивать.

xohox
() автор топика
Ответ на: комментарий от xohox

Не подумал, что нужно найденное с чем-то сравнивать.

А зачем с чем-то сравнивать? Или я не правильно понимаю задачу или тут не было правильного ответа: никакое сравнение не надо и всякие sort -u не помогут. Надо демон, читающий из tail, запоминающий в ассоциативный массив полученные IP, если он новый - то вывод его. Всё. Делов на 5 минут. Ну да, можно далее извращаться: при получении сигнала сбрасывать весь массив, а потом его всасывать при новом старте и тому подобное.

vodz ★★★★★
()
Ответ на: комментарий от vodz
демон, читающий из tail, запоминающий в ассоциативный массив полученные IP, если он новый - то вывод его.

А это на bash полетит?

xohox
() автор топика
Ответ на: комментарий от xohox

складывает в файл я так понимаю syslog

Ну может он умеет и в DBUS сразу?

Shushundr ★★★
()
tail -f log.txt | awk '
BEGIN {        ### read stored IPs
  while(getline x < "ips.txt")
   a[x]=1
}
{ip="6.7.8.9"};  ### here you get IP from SRC:###.###.###.### field
 ! a[ip] {
      a[ip]=1
      print ip >> "ips.txt" ### store new IP
}'
futurama ★★★★★
()
Последнее исправление: futurama (всего исправлений: 1)
Ответ на: комментарий от Shushundr

https://habr.com/ru/post/259169/
http://www.opennet.ru/docs/RUS/iptables/#LOGTARGET

«действие ULOG позволяет выполнять запись журналируемой информации не в системный журнал, а в базу данных MySQL и т.п..»

«При использовании этого действия, пакет, через сокеты netlink, передается специальному демону который может выполнять очень детальное журналирование в различных форматах (обычный текстовый файл, база данных MySQL и пр.) и к тому же поддерживает возможность добавления надстроек (плагинов) для формирования различных выходных форматов и обработки сетевых протоколов.»

https://www.netfilter.org/projects/ulogd/index.html

«ulogd is a userspace logging daemon for netfilter/iptables related logging.»

Shushundr ★★★
()
Ответ на: комментарий от xohox

Не подумал, что нужно найденное с чем-то сравнивать.

Я писал недавно что-то подобное, но это всё не правильно. Правильно девопсы выше говорят про tail

Clockwork ★★★★★
()
Ответ на: комментарий от Clockwork

Это неправильные девопсы.

Потому что они используют диск там, где это не нужно. А диск - это малоскоростное устройство.

Shushundr ★★★
()
Ответ на: комментарий от xohox

сколько будет стоить реализация?

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

vodz ★★★★★
()
Ответ на: комментарий от xohox

А что вы собираетесь дальше делать с этими новыми IP-адресами? Наверное вам нужны уведомления об этих новых клиентах? В каком виде вы его хотите, на телефон, в десктопное приложение, или через сайт?

Я к тому спрашиваю, что Вы хотите наладить непрерывный процесс. Мне не ясно - зачем. Ведь для анализа можно периодически выбирать адреса регулярками и затем при помощи uniq отбирать разные. А затем руками по статистике apache смотреть куда ходили, сколько раз, какими путями по сайту. Т.е. анализ будет выполняться сотрудником с какой-то периодичностью, вот и всё.

Shushundr ★★★
()
Последнее исправление: Shushundr (всего исправлений: 2)
Ответ на: комментарий от Shushundr

Я, видимо к сожалению, не программист и уж тем более не программный архитектор.

То есть я не могу сразу написать как и что будет дальше, решил начать с получения новых ip, и сразу словил непреодолимое препятствие)

Возможно, это вообще дурацкая затея, но не попробуешь не узнаешь.

xohox
() автор топика
Ответ на: комментарий от xohox

Я, видимо к сожалению, не программист и уж тем более не программный архитектор.

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

Чтобы мы могли вам сразу решение целевой задачи предложить.

Shushundr ★★★
()
Последнее исправление: Shushundr (всего исправлений: 1)
Ответ на: комментарий от Shushundr

В данный момент я хочу узнавать как часто появляются(и появляются ли вообще) в логе новые ip.

Что потом с этой информацией делать пока не решил, возможно, этой информации и не будет вовсе.

В том-то и дело, что никакой задачи пока нет.

xohox
() автор топика
Ответ на: комментарий от xohox

Тогда один раз посмотри это по уже существующему логу командами, которые тебе написали выше, и получишь твои новые знания.

Shushundr ★★★
()
Последнее исправление: Shushundr (всего исправлений: 1)
Ответ на: комментарий от xohox

А файл с логами большой? И с айпишниками? Можно их в память совать целиком? Или допускатся дрочка чтения по кусочку и сброса на диск по кусочку? Допустимо ли хратьнить в /var/tmp типа конфигурацию в виде времени последнего изменения и смещение по фалу лога что-бы его целиком не сканировать каждый раз и сохранять состояние после возможной перезагрузки, как часто нужно проверять файл раз в секунду или раз в час.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

файл лога (в данный момент) 30781 строк

ip (в данный момент) 40 штук

про память - а возможно занятие всей памяти если файл будет сильно большой?

хранить допустимо

проверка пока раз в час

xohox
() автор топика
Ответ на: комментарий от xohox

Думал уйти от ручного труда.

Но труд не будет ручным.
ты будешь использовать утилиты, работающие с регулярными выражениями, утилиты сортировки, утилиты подсчёта количества.

Если тебе надо что-то понять один раз - этого достаточно.

Shushundr ★★★
()
Ответ на: комментарий от xohox

tail по логам это тупизна в 21веке, syslog сам отлично запускает скрипты по фильтрам, копайте эту тему action(type=«omprog»)

while read s; do
    eval $(echo $s | grep -Po "\s(\w+=[\w+\.]+)")
    echo $SRC, $DST, $PROTO, $TTL
done
anonymous2 ★★★★★
()
Последнее исправление: anonymous2 (всего исправлений: 6)
Ответ на: комментарий от Shushundr

Если другого варианта не будет, то конечно я так и сделаю.

xohox
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.