#!/bin/bash
# ------------------------------
# MikroTik Auto-Block Script
# ------------------------------
ROUTER_IP="192.168.88.1"
ROUTER_USER="admin"
ROUTER_PASSWORD="Tr!ckyP@ssword." # use sshpass Alt use keys(had trouble trying to use a key)
WHITELIST="whitelist.txt"
LOG_FILE="blocked_devices.log"
INTERVAL=60 # check every 60 seconds
# List connected clients
CMD="/interface wireless registration-table print terse"
while true; do
echo "==== Checking connected clients ===="
# Fetch connected clients
clients=$(sshpass -p "$ROUTER_PASSWORD" ssh -o StrictHostKeyChecking=no $ROUTER_USER@$ROUTER_IP "$CMD" 2>/dev/null)
# Extract MAC addresses of connected devices
connected_macs=$(echo "$clients" | grep -ioP 'mac-?address=\K[0-9A-F:]{17}')
# Fetch current access-list MACs
blocked_macs=$(sshpass -p "$ROUTER_PASSWORD" ssh -o StrictHostKeyChecking=no $ROUTER_USER@$ROUTER_IP "/interface wireless access-list print terse" 2>/dev/null | grep -ioP 'mac-?address=\K[0-9A-F:]{17}')
# Block any connected MAC not in whitelist
for mac in $connected_macs; do
if ! grep -iq "$mac" "$WHITELIST"; then
if ! echo "$blocked_macs" | grep -iq "$mac"; then
sshpass -p "$ROUTER_PASSWORD" ssh -o StrictHostKeyChecking=no $ROUTER_USER@$ROUTER_IP "/interface wireless access-list add mac-address=$mac comment='Blocked unknown device' disabled=no"
echo "$(date '+%Y-%m-%d %H:%M:%S') - BLOCKED $mac" | tee -a "$LOG_FILE"
fi
fi
done
# Remove any blocked MAC that is not in whitelist
for mac in $blocked_macs; do
if ! grep -iq "$mac" "$WHITELIST"; then
# Remove MAC from access list
sshpass -p "$ROUTER_PASSWORD" ssh -o StrictHostKeyChecking=no $ROUTER_USER@$ROUTER_IP "/interface wireless access-list remove [find mac-address=$mac]"
echo "$(date '+%Y-%m-%d %H:%M:%S') - REMOVED $mac (illegal)" | tee -a "$LOG_FILE"
fi
done
echo "==== Sleeping for $INTERVAL seconds ===="
sleep $INTERVAL
done
< /code>
В настоящее время я запускаю сценарий из ящика, подключенного к одной и той же сети, но я хочу знать, смогу ли я запустить сценарий из другой сети и сказать через VPS. Таким образом, я знаю, что она работает, даже если машина выключена (настройте Cronjob для сценария), я также не хочу включать учетные данные маршрутизатора в сценарий и использовать ключ, но я продолжал получать ошибку синтаксиса, когда я пытался использовать ключ ранее. Я также сейчас пытаюсь сделать это немного более "белым воротником"
Подробнее здесь: https://stackoverflow.com/questions/797 ... ine-script
Как сделать Cronjob для автономного сценария [закрыто] ⇐ Linux
-
Anonymous
1757010960
Anonymous
#!/bin/bash
# ------------------------------
# MikroTik Auto-Block Script
# ------------------------------
ROUTER_IP="192.168.88.1"
ROUTER_USER="admin"
ROUTER_PASSWORD="Tr!ckyP@ssword." # use sshpass Alt use keys(had trouble trying to use a key)
WHITELIST="whitelist.txt"
LOG_FILE="blocked_devices.log"
INTERVAL=60 # check every 60 seconds
# List connected clients
CMD="/interface wireless registration-table print terse"
while true; do
echo "==== Checking connected clients ===="
# Fetch connected clients
clients=$(sshpass -p "$ROUTER_PASSWORD" ssh -o StrictHostKeyChecking=no $ROUTER_USER@$ROUTER_IP "$CMD" 2>/dev/null)
# Extract MAC addresses of connected devices
connected_macs=$(echo "$clients" | grep -ioP 'mac-?address=\K[0-9A-F:]{17}')
# Fetch current access-list MACs
blocked_macs=$(sshpass -p "$ROUTER_PASSWORD" ssh -o StrictHostKeyChecking=no $ROUTER_USER@$ROUTER_IP "/interface wireless access-list print terse" 2>/dev/null | grep -ioP 'mac-?address=\K[0-9A-F:]{17}')
# Block any connected MAC not in whitelist
for mac in $connected_macs; do
if ! grep -iq "$mac" "$WHITELIST"; then
if ! echo "$blocked_macs" | grep -iq "$mac"; then
sshpass -p "$ROUTER_PASSWORD" ssh -o StrictHostKeyChecking=no $ROUTER_USER@$ROUTER_IP "/interface wireless access-list add mac-address=$mac comment='Blocked unknown device' disabled=no"
echo "$(date '+%Y-%m-%d %H:%M:%S') - BLOCKED $mac" | tee -a "$LOG_FILE"
fi
fi
done
# Remove any blocked MAC that is not in whitelist
for mac in $blocked_macs; do
if ! grep -iq "$mac" "$WHITELIST"; then
# Remove MAC from access list
sshpass -p "$ROUTER_PASSWORD" ssh -o StrictHostKeyChecking=no $ROUTER_USER@$ROUTER_IP "/interface wireless access-list remove [find mac-address=$mac]"
echo "$(date '+%Y-%m-%d %H:%M:%S') - REMOVED $mac (illegal)" | tee -a "$LOG_FILE"
fi
done
echo "==== Sleeping for $INTERVAL seconds ===="
sleep $INTERVAL
done
< /code>
В настоящее время я запускаю сценарий из ящика, подключенного к одной и той же сети, но я хочу знать, смогу ли я запустить сценарий из другой сети и сказать через VPS. Таким образом, я знаю, что она работает, даже если машина выключена (настройте Cronjob для сценария), я также не хочу включать учетные данные маршрутизатора в сценарий и использовать ключ, но я продолжал получать ошибку синтаксиса, когда я пытался использовать ключ ранее. Я также сейчас пытаюсь сделать это немного более "белым воротником"
Подробнее здесь: [url]https://stackoverflow.com/questions/79756005/how-to-do-a-cronjob-for-an-offline-script[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия