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


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

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

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

Оффлайн Ввысь

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

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3487
  • Ubuntu 22.04 х64
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #1 : 01 Февраля 2018, 12:24:52 »
Ввысь, ТЗ покажите...
HP Pro 840 G3: Intel i5-6300U, 32GB DDR4 2133MHz, Intel 520, Intel Pro 2500 180GB/Ubuntu 22.04
Dell Latitude 5590: Intel i5-8350U, 16GB DDR4 2400MHz, Intel 620, Samsung 1TB/Ubuntu 22.04

Оффлайн Ввысь

  • Автор темы
  • Активист
  • *
  • Сообщений: 473
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #2 : 01 Февраля 2018, 12: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, 12:41:51 от Ввысь »

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3487
  • Ubuntu 22.04 х64
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #3 : 01 Февраля 2018, 13:03:28 »
Ввысь, А не проще написать правило для фаервола для лимитирования количества установленных соединений с одного ИП? Или вообще использовать тот же fail2ban ? %)
HP Pro 840 G3: Intel i5-6300U, 32GB DDR4 2133MHz, Intel 520, Intel Pro 2500 180GB/Ubuntu 22.04
Dell Latitude 5590: Intel i5-8350U, 16GB DDR4 2400MHz, Intel 620, Samsung 1TB/Ubuntu 22.04

Оффлайн Ввысь

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

bghno

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

Оффлайн Ввысь

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

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3487
  • Ubuntu 22.04 х64
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #7 : 01 Февраля 2018, 16:31:56 »
Я смотрел на fail2ban, но что-то не сообразил как он сможет регистрировать попытки подключения с одного и того же IP к различным портам.
Ну а) я же не знаю, что у вас за ПО развернуто на этих портах и формат его логов) Если ПО пишет логи, то надо написать для этого файлика фильтр с регэкспами и fail2ban узнает)
Давайте так: все же озвучьте правильно задачу:
 - блокировать никого не надо
 - учет подулючений вы ведете сами?
HP Pro 840 G3: Intel i5-6300U, 32GB DDR4 2133MHz, Intel 520, Intel Pro 2500 180GB/Ubuntu 22.04
Dell Latitude 5590: Intel i5-8350U, 16GB DDR4 2400MHz, Intel 620, Samsung 1TB/Ubuntu 22.04

Оффлайн ALiEN175

  • Администратор
  • Старожил
  • *
  • Сообщений: 6599
  • 20% Cooler
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #8 : 01 Февраля 2018, 16:36:27 »
пробуйте
Код: (bash) [Выделить]
#!/bin/bash
 
YIP='167.9.106.116'    #свой айпишник
PORTS='3166 3045 3095' #на какие порты смотрим
TRY='3'                #на сколько портов должет постучаться бот
 
TMP=$(mktemp)
 
soun() {
sort $1 | uniq 
}
 
for i in ${PORTS[@]}; do
grep -Eo "$YIP:$i ([0-9]{1,3}\.){3}[0-9]{1,3}" \
"$1" | sed "s/$YIP://">> $TMP
done
 
soun $TMP > ${TMP}_sus
 
while read j ; do
CN=$(grep -c $j ${TMP}_sus)
if ((  CN >= TRY )); then
echo $j >> ${TMP}_ban
fi
done <<< $(cat ${TMP}_sus | cut -d\  -f2)
soun ${TMP}_ban > "${1}_banned"
 
rm $TMP ${TMP}_sus ${TMP}_ban &> /dev/null

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

Денег не надо, да и код не очень-то (точно можно лучше), но если сработало и очень хочется поблагодарить - пишите в личку ;)
« Последнее редактирование: 01 Февраля 2018, 16:47:31 от ALiEN175 »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3487
  • Ubuntu 22.04 х64
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #9 : 01 Февраля 2018, 16:58:42 »
ALiEN175, ну раз такая пьянка)))
Код: (bash) [Выделить]
#!/bin/bash

YIP='167.9.106.116'    #свой айпишник
TRY='2'                #на сколько портов должет постучаться бот

TMP=$(mktemp)

soun() {
    sort $1 | uniq
}

for i in $(cat "$1" | awk '{print $1}' | awk -F':' '{print $2}'); do
    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
done

if [ ! -f $TMP ]; then
    exit 0
fi

soun $TMP > ${TMP}_sus

while read j ; do
    if [[ $(grep -c $j ${TMP}_sus) -ge $TRY ]]; then
        echo $j >> ${TMP}_ban
    fi
done < <(cat ${TMP}_sus | cut -d\  -f2)

rm $TMP ${TMP}_sus &> /dev/null

if [ ! -f ${TMP}_ban ]; then
    soun ${TMP}_ban > "$1_banned"
    exit 0
fi
rm ${TMP}_ban &> /dev/null

HP Pro 840 G3: Intel i5-6300U, 32GB DDR4 2133MHz, Intel 520, Intel Pro 2500 180GB/Ubuntu 22.04
Dell Latitude 5590: Intel i5-8350U, 16GB DDR4 2400MHz, Intel 620, Samsung 1TB/Ubuntu 22.04

Оффлайн Ввысь

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

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

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

Оффлайн ALiEN175

  • Администратор
  • Старожил
  • *
  • Сообщений: 6599
  • 20% Cooler
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #11 : 01 Февраля 2018, 17:28:24 »
По всем портам вам EvangelionDeath подсказал
Вот с диапазоном
Код: (bash) [Выделить]
#!/bin/bash
 
YIP='167.9.106.116'    #свой айпишник
PTS='3166'             #начало диапазона портов
PTE='3466'             #конец диапазона портов
                       #сильно большой диапазон не ставьте - долго выполняться будет
TRY='3'                #на сколько портов должет постучаться бот
 
TMP=$(mktemp)
 
soun() {
sort $1 | uniq 
}
 
for i in $(seq $PTS $PTE); do
grep -Eo "$YIP:$i ([0-9]{1,3}\.){3}[0-9]{1,3}" \
"$1" | sed "s/$YIP://">> $TMP
done
 
soun $TMP > ${TMP}_sus
 
while read j ; do
CN=$(grep -c $j ${TMP}_sus)
if ((  CN >= TRY )); then
echo $j >> ${TMP}_ban
fi
done <<< $(cat ${TMP}_sus | cut -d\  -f2)
soun ${TMP}_ban > "${1}_banned"
 
rm $TMP ${TMP}_sus ${TMP}_ban &> /dev/null

Не разобрался, куда втыкать свой файл?
как обычно, сохраняете, например как ipban.sh
в терминале:
chmod +x ipban.sh
./ipban.sh файл.txt
« Последнее редактирование: 01 Февраля 2018, 17:37:10 от ALiEN175 »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Ввысь

  • Автор темы
  • Активист
  • *
  • Сообщений: 473
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #12 : 01 Февраля 2018, 17: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, 17:44:19:
EvangelionDeath, проверил и Ваш вариант, точно такая же история.

Оффлайн ALiEN175

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

ща поправлю
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Ввысь

  • Автор темы
  • Активист
  • *
  • Сообщений: 473
    • Просмотр профиля
Re: Напишите мне скрипт за деньги
« Ответ #14 : 01 Февраля 2018, 17: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, 17:50:44 от Ввысь »

 

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