Доработка. Получение данных о навигации

This commit is contained in:
sasha80
2025-04-17 08:58:21 +03:00
parent f40528941c
commit f4fbc03667

62
ip-tables-navigation.sh Normal file
View File

@@ -0,0 +1,62 @@
#!/usr/bin/env bash
## Скрипт предназначен для настройки дублирования udp-пакетов
## назначенных на порт IP_PORT_IN на заданный порт IP_PORT_OUT.
INI_FILE="/opt/5p28/device.ini" ## Путь к NI-файлу п528
SECTION_NAME="navigat" ## Название секции
IP_PORT_NAME="port" ## Имя поля в котором хранится номер порта назначения
IP_PORT_OUT="60000" ## Порт на который направлять дублированные пакеты
SUDO_PASS="12345678" ## Пароль администратора
set -e
if [[ -n "$1" ]]; then
INI_FILE="$1"
fi
if [[ -n "$2" ]]; then
SUDO_PASS="$2"
fi
if [[ -n "$3" ]]; then
IP_PORT_OUT="$3"
fi
# Возвращает значение из INI-файла
read_ini() {
local section="$1"
local key="$2"
# Игнорируем комментарии (# и ;), обрезаем пробелы
awk -F '=' -v section="$section" -v key="$key" '
/^\[/ { current_section = substr($0, 2, length($0)-2) }
current_section == section && $1 ~ /^[[:space:]]*'$key'[[:space:]]*$/ {
gsub(/^[[:space:]]+|[[:space:]]+$/, "", $2)
gsub(/^"|"$/, "", $2) # Удаляем кавычки, если есть
print $2
exit
}
' "${INI_FILE}"
}
# Проверка существования файла
if [[ ! -f "${INI_FILE}" ]]; then
echo "ошибка: файл \"${INI_FILE}\" не найден"
exit 1
fi
# Чтение значений из ini-файла
IP_PORT_IN=$(read_ini "${SECTION_NAME}" "${IP_PORT_NAME}")
# Проверка достоверности
if [[ -z "$IP_PORT_IN" ]]; then
echo "ошибка: параметр \"${IP_PORT_NAME}\" не найден в секции [${SECTION_NAME}]"
exit 1
fi
# Дублирование трафика на другой порт. Перенаправить копии входящих UDP-пакетов
# с порта ${IP_PORT_IN} на порт ${IP_PORT_OUT} (или любой другой), чтобы оригинальная программа
# продолжала работать с портом ${IP_PORT_IN}, а копии пакетов отправлялись на ${IP_PORT_OUT}:
echo "${SUDO_PASS}" | sudo -S iptables -t nat -A PREROUTING -p udp --dport "${IP_PORT_IN}" -j REDIRECT --to-ports "${IP_PORT_OUT}"
echo "${SUDO_PASS}" | sudo -S iptables -A INPUT -p udp --dport "${IP_PORT_IN}" -j ACCEPT
echo "${SUDO_PASS}" | sudo -S iptables -t nat -L -n -v и iptables -L -n -v