Форум русскоязычного сообщества Ubuntu


Автор Тема: Напишите мне скрипт за деньги  (Прочитано 825 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Онлайн Ввысь

  • Автор темы
  • Участник
  • *
  • Сообщений: 208
    • Просмотр профиля
Напишите мне скрипт за деньги
« : 01 Февраль 2018, 12:55:11 »
Здравствуйте.
Нужен bash скрипт. ТЗ есть, возможно какие-то нюансы не учел (опыта маловато) 
Может кто возьмется?

Оффлайн EvangelionDeath

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2538
  • Ubuntu Mate 16.04 х64
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #1 : 01 Февраль 2018, 13:24:52 »
Ввысь, ТЗ покажите...
Fujitsu UH552: Intel Core i3-3217U, 16GB DDR3 1600MHz, Intel HD4000, Intel 535 120GB/Ubuntu 16.04 Mate
HP 625: AMD Athlon P320, 4GB DDR3 1333MHz, AMD HD4250, Seagate Momentus/Ubuntu 14.04 Mate

Онлайн Ввысь

  • Автор темы
  • Участник
  • *
  • Сообщений: 208
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #2 : 01 Февраль 2018, 13:39:09 »
Нужен скрипт. В двух словах, ubuntu, периодически запускается netstat -n | grep tcp | awk '{print $4,$5,$6}' > "`date '+%d-%m-%y-%H:%M'`".txt и пишется txt файл с датой и соединениями. Дело в том, что иногда, особо любопытные пользователи, пытаются подключиться на порт который не их. Хакеры). Пароли подбирают). Задумка в чем, берем готовый txt файл, сравниваем, когда встречается что-то типа такого

167.9.106.116:3166 62.76.75.209:59800 ESTABLISHED
167.9.106.116:3045 62.76.75.209:59792 ESTABLISHED
167.9.106.116:3095 62.76.75.209:59670 ESTABLISHED
167.9.106.116:3070 62.76.75.209:59794 ESTABLISHED
167.9.106.116:3166 62.76.75.209:59864 ESTABLISHED
167.9.106.116:3045 62.76.75.209:59855 ESTABLISHED

явно любопытствующий, пишем 62.76.75.209 в файлик. Новый txt файл пишется каждый час.

Условие если один IP (на примере 62.76.75.209) подключался к трем разным портам 3166, 3045, 3095 то записать IP 62.76.75.209 в файл.

Но это так, что в голову пришло, если есть какой-то более толковый способ достичь того же, готов отказаться от первоначальной идеи.
« Последнее редактирование: 01 Февраль 2018, 13:41:51 от Ввысь »

Оффлайн EvangelionDeath

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2538
  • Ubuntu Mate 16.04 х64
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #3 : 01 Февраль 2018, 14:03:28 »
Ввысь, А не проще написать правило для фаервола для лимитирования количества установленных соединений с одного ИП? Или вообще использовать тот же fail2ban ? %)
Fujitsu UH552: Intel Core i3-3217U, 16GB DDR3 1600MHz, Intel HD4000, Intel 535 120GB/Ubuntu 16.04 Mate
HP 625: AMD Athlon P320, 4GB DDR3 1333MHz, AMD HD4250, Seagate Momentus/Ubuntu 14.04 Mate

Онлайн Ввысь

  • Автор темы
  • Участник
  • *
  • Сообщений: 208
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #4 : 01 Февраль 2018, 14:07:52 »
EvangelionDeath, мне не нужно ограничивать, пусть подключаются, я только хочу любопытных отловить.
Я смотрел на fail2ban, но что-то не сообразил как он сможет регистрировать попытки подключения с одного и того же IP к различным портам.

Оффлайн bghno

  • Участник
  • *
  • Сообщений: 136
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #5 : 01 Февраль 2018, 15:14:38 »
явно любопытствующий
это боты

Онлайн Ввысь

  • Автор темы
  • Участник
  • *
  • Сообщений: 208
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #6 : 01 Февраль 2018, 15:18:57 »
bghno, ну для меня не важно бот он или живой. Дело в том, что я не знаю как их отловить.

Оффлайн EvangelionDeath

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2538
  • Ubuntu Mate 16.04 х64
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #7 : 01 Февраль 2018, 17:31:56 »
Я смотрел на fail2ban, но что-то не сообразил как он сможет регистрировать попытки подключения с одного и того же IP к различным портам.
Ну а) я же не знаю, что у вас за ПО развернуто на этих портах и формат его логов) Если ПО пишет логи, то надо написать для этого файлика фильтр с регэкспами и fail2ban узнает)
Давайте так: все же озвучьте правильно задачу:
 - блокировать никого не надо
 - учет подулючений вы ведете сами?
Fujitsu UH552: Intel Core i3-3217U, 16GB DDR3 1600MHz, Intel HD4000, Intel 535 120GB/Ubuntu 16.04 Mate
HP 625: AMD Athlon P320, 4GB DDR3 1333MHz, AMD HD4250, Seagate Momentus/Ubuntu 14.04 Mate

Оффлайн ALiEN175

  • Старожил
  • *
  • Сообщений: 1646
  • X-9000SC
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #8 : 01 Февраль 2018, 17:36:27 »
пробуйте
Код: Bash
  1. #!/bin/bash
  2.  
  3. YIP='167.9.106.116'    #свой айпишник
  4. PORTS='3166 3045 3095' #на какие порты смотрим
  5. TRY='3'                #на сколько портов должет постучаться бот
  6.  
  7. TMP=$(mktemp)
  8.  
  9. soun() {
  10. sort $1 | uniq  
  11. }
  12.  
  13. for i in ${PORTS[@]}; do
  14. grep -Eo "$YIP:$i ([0-9]{1,3}\.){3}[0-9]{1,3}" \
  15. "$1" | sed "s/$YIP://">> $TMP
  16. done
  17.  
  18. soun $TMP > ${TMP}_sus
  19.  
  20. while read j ; do
  21. CN=$(grep -c $j ${TMP}_sus)
  22. if ((  CN >= TRY )); then
  23. echo $j >> ${TMP}_ban
  24. fi
  25. done <<< $(cat ${TMP}_sus | cut -d\  -f2)
  26. soun ${TMP}_ban > "${1}_banned"
  27.  
  28. rm $TMP ${TMP}_sus ${TMP}_ban &> /dev/null

первым аргументом - имя файла c cодержимым как в первом сообщении. После выполнения рядом в файлом в папке будет файл с суффиксом _banned

Денег не надо, да и код не очень-то (точно можно лучше), но если сработало и очень хочется поблагодарить - пишите в личку ;)
« Последнее редактирование: 01 Февраль 2018, 17:47:31 от ALiEN175 »
417263686c696e7578

Оффлайн EvangelionDeath

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2538
  • Ubuntu Mate 16.04 х64
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #9 : 01 Февраль 2018, 17:58:42 »
ALiEN175, ну раз такая пьянка)))
Код: Bash
  1. #!/bin/bash
  2.  
  3. YIP='167.9.106.116'    #свой айпишник
  4. TRY='2'                #на сколько портов должет постучаться бот
  5.  
  6. TMP=$(mktemp)
  7.  
  8. soun() {
  9.     sort $1 | uniq
  10. }
  11.  
  12. for i in $(cat "$1" | awk '{print $1}' | awk -F':' '{print $2}'); do
  13.     grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}:$i ([0-9]{1,3}\.){3}[0-9]{1,3}" "$1" | sed "s/$YIP://">> $TMP
  14. done
  15.  
  16. if [ ! -f $TMP ]; then
  17.     exit 0
  18. fi
  19.  
  20. soun $TMP > ${TMP}_sus
  21.  
  22. while read j ; do
  23.     if [[ $(grep -c $j ${TMP}_sus) -ge $TRY ]]; then
  24.         echo $j >> ${TMP}_ban
  25.     fi
  26. done < <(cat ${TMP}_sus | cut -d\  -f2)
  27.  
  28. rm $TMP ${TMP}_sus &> /dev/null
  29.  
  30. if [ ! -f ${TMP}_ban ]; then
  31.     soun ${TMP}_ban > "$1_banned"
  32.     exit 0
  33. fi
  34. rm ${TMP}_ban &> /dev/null
  35.  
  36.  
Fujitsu UH552: Intel Core i3-3217U, 16GB DDR3 1600MHz, Intel HD4000, Intel 535 120GB/Ubuntu 16.04 Mate
HP 625: AMD Athlon P320, 4GB DDR3 1333MHz, AMD HD4250, Seagate Momentus/Ubuntu 14.04 Mate

Онлайн Ввысь

  • Автор темы
  • Участник
  • *
  • Сообщений: 208
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #10 : 01 Февраль 2018, 18:15:26 »
ALiEN175, а как выбрать все порты или диапазон, например 3000:3500?
Не разобрался, куда втыкать свой файл?

 - блокировать никого не надо
 - учет подключений вы ведете сами?

Верно. Мне нужно просто увидеть откуда подключение.

Оффлайн ALiEN175

  • Старожил
  • *
  • Сообщений: 1646
  • X-9000SC
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #11 : 01 Февраль 2018, 18:28:24 »
По всем портам вам EvangelionDeath подсказал
Вот с диапазоном
Код: Bash
  1. #!/bin/bash
  2.  
  3. YIP='167.9.106.116'    #свой айпишник
  4. PTS='3166'             #начало диапазона портов
  5. PTE='3466'             #конец диапазона портов
  6.                        #сильно большой диапазон не ставьте - долго выполняться будет
  7. TRY='3'                #на сколько портов должет постучаться бот
  8.  
  9. TMP=$(mktemp)
  10.  
  11. soun() {
  12. sort $1 | uniq  
  13. }
  14.  
  15. for i in $(seq $PTS $PTE); do
  16. grep -Eo "$YIP:$i ([0-9]{1,3}\.){3}[0-9]{1,3}" \
  17. "$1" | sed "s/$YIP://">> $TMP
  18. done
  19.  
  20. soun $TMP > ${TMP}_sus
  21.  
  22. while read j ; do
  23. CN=$(grep -c $j ${TMP}_sus)
  24. if ((  CN >= TRY )); then
  25. echo $j >> ${TMP}_ban
  26. fi
  27. done <<< $(cat ${TMP}_sus | cut -d\  -f2)
  28. soun ${TMP}_ban > "${1}_banned"
  29.  
  30. rm $TMP ${TMP}_sus ${TMP}_ban &> /dev/null

Не разобрался, куда втыкать свой файл?
как обычно, сохраняете, например как ipban.sh
в терминале:
chmod +x ipban.sh
./ipban.sh файл.txt
« Последнее редактирование: 01 Февраль 2018, 18:37:10 от ALiEN175 »
417263686c696e7578

Онлайн Ввысь

  • Автор темы
  • Участник
  • *
  • Сообщений: 208
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #12 : 01 Февраль 2018, 18:43:30 »
ALiEN175, так я запускал, ошибка, файл пустой.

0 Feb  1 17:41 est.txt_banned

Решил что как-то иначе.
./ban.txt est.txt
sort: cannot read: /tmp/tmp.JiE7ArzbV8_ban: No such file or directory

файл выглядит так
167.9.106.116:8010 90.35.238.197:53378 ESTABLISHED
167.9.106.116:8010 90.35.238.197:53378 ESTABLISHED
167.9.106.116:8010 90.35.238.197:53378 ESTABLISHED
167.9.106.116:8010 90.35.238.197:53378 ESTABLISHED
167.9.106.116:8010 90.35.238.197:53378 ESTABLISHED
167.9.106.116:8010 90.35.238.197:53378 ESTABLISHED
167.9.106.116:8010 90.35.238.197:53378 ESTABLISHED
167.9.106.116:8010 90.35.238.197:53378 ESTABLISHED

IP добавил, диапазон PTS='7800' PTE='9000'


Пользователь добавил сообщение 01 Февраль 2018, 18:44:19:
EvangelionDeath, проверил и Ваш вариант, точно такая же история.

Оффлайн ALiEN175

  • Старожил
  • *
  • Сообщений: 1646
  • X-9000SC
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #13 : 01 Февраль 2018, 18:46:30 »
у меня однинаковые порты не учитываются. Согласно вашей же задаче
Условие если один IP (на примере 62.76.75.209) подключался к трем разным портам 3166, 3045, 3095 то записать IP 62.76.75.209 в файл.

ща поправлю
417263686c696e7578

Онлайн Ввысь

  • Автор темы
  • Участник
  • *
  • Сообщений: 208
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #14 : 01 Февраль 2018, 18:47:46 »
ALiEN175, сек. это я гоню. Отвклекся)

Поправил

167.9.106.116:8010 90.35.238.197:53378 ESTABLISHED
167.9.106.116:8000 90.35.238.197:53378 ESTABLISHED
167.9.106.116:8001 90.35.238.197:53378 ESTABLISHED
167.9.106.116:8012 90.35.238.197:53378 ESTABLISHED
167.9.106.116:8013 90.35.238.197:53378 ESTABLISHED
167.9.106.116:8005 90.35.238.197:53378 ESTABLISHED
167.9.106.116:8070 90.35.238.197:53378 ESTABLISHED
167.9.106.116:7998 90.35.238.197:53378 ESTABLISHED

Теперь такая ошибка. Файл пустой.

./ban.txt est.txt
grep: 90.35.238.197: No such file or directory
grep: 90.35.238.197: No such file or directory
grep: 90.35.238.197: No such file or directory
grep: 90.35.238.197: No such file or directory
grep: 90.35.238.197: No such file or directory
grep: 90.35.238.197: No such file or directory
grep: 90.35.238.197: No such file or directory
./ban.txt: line 23: ((: /tmp/tmp.C7kHAe6SGk_sus:8: syntax error: operand expected (error token is "/tmp/tmp.C7kHAe6SGk_sus:8")
sort: cannot read: /tmp/tmp.C7kHAe6SGk_ban: No such file or directory
« Последнее редактирование: 01 Февраль 2018, 18:50:44 от Ввысь »

 

Страница сгенерирована за 0.233 секунд. Запросов: 24.