Доработка. Получение данных о навигации
This commit is contained in:
62
ip-tables-navigation.sh
Normal file
62
ip-tables-navigation.sh
Normal 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
|
||||
Reference in New Issue
Block a user