-
Notifications
You must be signed in to change notification settings - Fork 67
Description
Line 975 in dcc4e83
| get_ip_by_inface() { |
Функция: get_ip_by_inface()
Описание проблемы:
Функция определяет IP-адрес интерфейса с помощью команды:
/opt/sbin/ip a | grep global | grep "${entware_inf}" | sed 's/.*inet.\(.*\)\/.*/\1/'
или в новой версии
/opt/sbin/ip a | grep -F "${net_interface}" | grep -F 'global' | grep -oE "inet ${IP_FILTER}" | cut -d' ' -f2
Это приводит к ошибочному результату, если существует два интерфейса с пересекающимися именами, например nwg0 и wg0. При поиске "wg0" grep возвращает обе строки, так как nwg0 также содержит wg0, и IP-адрес может продублироваться.
Пример результата:
inet 10.8.1.2/32 scope global nwg0
inet 10.8.1.2/32 scope global wg0
Результат функции:
10.8.1.2
10.8.1.2
Ожидаемое поведение:
Функция должна возвращать IP только точного интерфейса, например только wg0.
варианты
это для 1.1.8-2
get_ip_by_inface() {
entware_inf="${1}"
/opt/sbin/ip -4 a show "${entware_inf}" 2>/dev/null | awk '$1 == "inet" {print $2}' | cut -d'/' -f1 | head -n1
}
Этот вариант:
- не ловит мусор,
- строго смотрит только на inet,
- работает даже если интерфейс не существует (не будет ошибки, а просто пустой вывод),
- берёт только первый IP, если их несколько.
так же можно посмотреть
/opt/sbin/ip -4 -o addr show dev "${net_interface}" scope global | awk '{print $4}' | cut -d/ -f1 | head -n1
но Вы смотрите сами, это просто для заметки
"device": Keenetic Giga II
"release": "2.16.D.12.0-8",
"arch": "mips", (странно entware грузит mipsel)
BusyBox v1.36.1 (2024-03-19 14:07:09 UTC)
Версия пакета 1.1.8 release-2