v1.2.14: меню выбора сайта маскировки по скану + снос не обрывается на set -e
This commit is contained in:
@@ -261,6 +261,34 @@ def main():
|
||||
' # Наш шов: подписки «-awg»/«-tg» есть только у установок с AmneziaWG и MTProto — не тянем их,\n # если эти протоколы не выбраны (никаких лишних обращений к панели).\n if [[ " ${PROTOS[*]} " == *" awg "* || " ${PROTOS[*]} " == *" awg3 "* || " ${PROTOS[*]} " == *" mtproto "* ]]; then\n extra=$(sub_links "$SUBID-awg" 1; sub_links "$SUBID-tg" 1)\n fi',
|
||||
'не тянуть legacy-подписки awg/tg, если протоколы не выбраны',
|
||||
),
|
||||
(
|
||||
'scripts/3x-ui.sh',
|
||||
'SNI_CANDIDATES=(dl.google.com www.amazon.com www.samsung.com www.yahoo.com)',
|
||||
False,
|
||||
'# Наш шов: добавлены известные сайты (Microsoft, AMD, Intel, NVIDIA) — их можно выбрать вручную.\nSNI_CANDIDATES=(dl.google.com www.amazon.com www.samsung.com www.yahoo.com www.microsoft.com www.amd.com www.intel.com www.nvidia.com)',
|
||||
'список известных сайтов расширен',
|
||||
),
|
||||
(
|
||||
'scripts/3x-ui.sh',
|
||||
' # Маскировка: из флагов, по вопросу пользователю или автоматически (сосед по подсети).',
|
||||
False,
|
||||
'# ---------------------------------------------------------------------------\n# Наш шов: выбор сайта маскировки по результатам скана подсети.\n# Печатает выбранное имя в stdout (пусто — оставляем автоподбор автора).\n# Роль: reality (только найденные и ручной ввод) или xhttp (плюс известные сайты).\nkl_sni_menu() {\n local role=$1; shift\n local -a found=("$@")\n local -a known=("${SNI_CANDIDATES[@]}")\n local src=${KL_ASK_SRC:-/dev/tty} ans i n try\n [[ $role == xhttp ]] || known=() # REALITY маскируем только под соседа или введённый вручную\n printf \'\\n%s%s%s\\n\' "$B" "$role" "$N" >&2\n if ((${#found[@]})); then\n printf \' найдено в вашей подсети (TLS 1.3, h2, сертификат верный):\\n\' >&2\n for i in "${!found[@]}"; do printf \' %2d) %s\\n\' "$((i + 1))" "${found[i]}" >&2; done\n else\n printf \' в подсети подходящих сайтов не нашлось\\n\' >&2\n fi\n if [[ $role == xhttp ]]; then\n n=${#found[@]}\n printf \' известные сайты (заметнее, чем соседи по подсети):\\n\' >&2\n for i in "${!known[@]}"; do printf \' %2d) %s\\n\' "$((i + 1 + n))" "${known[i]}" >&2; done\n fi\n printf \' 0) ввести адрес сайта вручную\\n\' >&2\n printf \' Enter — оставить автоподбор. Выбор: \' >&2\n for try in 1 2 3; do\n ans=""\n read -r -t 300 ans <"$src" 2>/dev/null || true\n ans=${ans//[[:space:]]/}\n [[ -z $ans ]] && return 0\n if [[ $ans == 0 ]]; then\n printf \' адрес сайта (например vpn.example.com): \' >&2\n ans=""\n read -r -t 300 ans <"$src" 2>/dev/null || true\n ans=${ans//[[:space:]]/}\n if [[ $ans =~ ^[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$ ]]; then printf \'%s\' "$ans"; return 0; fi\n printf \' не похоже на адрес сайта\\n\' >&2\n elif [[ $ans =~ ^[0-9]+$ ]]; then\n local total=${#found[@]}\n ((total)) && known=() # для reality известные не предлагаются\n local idx=$((10#$ans))\n if ((idx >= 1 && idx <= total)); then printf \'%s\' "${found[idx - 1]}"; return 0; fi\n if ((idx > total && idx <= total + ${#known[@]})); then printf \'%s\' "${known[idx - total - 1]}"; return 0; fi\n printf \' такого номера нет\\n\' >&2\n else\n printf \' не понял «%s» — введите номер или 0\\n\' "$ans" >&2\n fi\n printf \' ещё раз (Enter — автоподбор): \' >&2\n done\n return 0\n}\n\n # Маскировка: из флагов, по вопросу пользователю или автоматически (сосед по подсети).',
|
||||
'меню выбора сайта маскировки (наш код)',
|
||||
),
|
||||
(
|
||||
'scripts/3x-ui.sh',
|
||||
' echo\n echo "Подбираю сайт для маскировки среди соседей по подсети… (около 250 коротких обращений к порту 443 соседних адресов, около минуты; не нужно – запустите с --sni или --domain)"',
|
||||
False,
|
||||
' echo\n echo "Сканирую подсеть: около 250 коротких обращений к порту 443 соседних адресов (около минуты)."\n echo "По результатам предложу сайты для маскировки. Не нужно – запустите с --sni или --domain."\n local -a nb=()\n mapfile -t nb < <(nearby_sites | shuf)\n NB_ALL=("${nb[@]}")\n',
|
||||
'скан + выбор сайта вместо автоподбора',
|
||||
),
|
||||
(
|
||||
'scripts/3x-ui.sh',
|
||||
' SNI=${nb[0]}; SNI2=${nb[1]:-}; SNI3=${nb[2]:-}\n ok "найден: ${B}$SNI${N} · та же подсеть · TLS 1.3, h2, сертификат верный"',
|
||||
False,
|
||||
' SNI=${nb[0]}; SNI2=${SNI2:-${nb[1]:-}}; SNI3=${nb[2]:-}\n ok "найден: ${B}$SNI${N} · та же подсеть · TLS 1.3, h2, сертификат верный"',
|
||||
'не перетирать выбранный SNI2',
|
||||
),
|
||||
]
|
||||
|
||||
bad = 0
|
||||
|
||||
Reference in New Issue
Block a user