feat: индикация доступности VLESS серверов (TCP check)
При выборе Y скрипт проверяет TCP-коннект к IP:port каждого сервера и показывает цветной статус: - зелёный ✓ доступен - красный ✗ недоступен Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
25
ai-setup.sh
25
ai-setup.sh
@@ -90,6 +90,8 @@ if [[ "$_vless_ans" =~ ^[Yy]$ ]]; then
|
|||||||
# Читаем список серверов
|
# Читаем список серверов
|
||||||
_VL_URLS=()
|
_VL_URLS=()
|
||||||
_VL_LABELS=()
|
_VL_LABELS=()
|
||||||
|
_VL_IPS=()
|
||||||
|
_VL_PORTS=()
|
||||||
_SERVERS_FILE="$SCRIPT_DIR/home-configs/vless/servers.conf"
|
_SERVERS_FILE="$SCRIPT_DIR/home-configs/vless/servers.conf"
|
||||||
|
|
||||||
if [ ! -f "$_SERVERS_FILE" ]; then
|
if [ ! -f "$_SERVERS_FILE" ]; then
|
||||||
@@ -102,21 +104,38 @@ if [[ "$_vless_ans" =~ ^[Yy]$ ]]; then
|
|||||||
_vl_rest="${line#vless://}"
|
_vl_rest="${line#vless://}"
|
||||||
_vl_rest="${_vl_rest#*@}"
|
_vl_rest="${_vl_rest#*@}"
|
||||||
_vl_ip="${_vl_rest%%:*}"
|
_vl_ip="${_vl_rest%%:*}"
|
||||||
|
_vl_tmp="${_vl_rest#*:}"
|
||||||
|
_vl_port="${_vl_tmp%%\?*}"
|
||||||
_vl_name="${line##*#}"
|
_vl_name="${line##*#}"
|
||||||
[[ "$_vl_name" == "$line" ]] && _vl_name=""
|
[[ "$_vl_name" == "$line" ]] && _vl_name=""
|
||||||
_VL_URLS+=("$line")
|
_VL_URLS+=("$line")
|
||||||
_VL_LABELS+=("$_vl_ip ($_vl_name)")
|
_VL_LABELS+=("$_vl_ip ($_vl_name)")
|
||||||
|
_VL_IPS+=("$_vl_ip")
|
||||||
|
_VL_PORTS+=("$_vl_port")
|
||||||
done < "$_SERVERS_FILE"
|
done < "$_SERVERS_FILE"
|
||||||
|
|
||||||
if [ "${#_VL_URLS[@]}" -eq 0 ]; then
|
if [ "${#_VL_URLS[@]}" -eq 0 ]; then
|
||||||
err "Нет VLESS серверов в $_SERVERS_FILE"
|
err "Нет VLESS серверов в $_SERVERS_FILE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Проверка доступности
|
||||||
echo ""
|
echo ""
|
||||||
info "Доступные VLESS серверы:"
|
info "Проверяю доступность серверов..."
|
||||||
for i in "${!_VL_LABELS[@]}"; do
|
_VL_STATUS=()
|
||||||
echo -e " ${GREEN}$((i+1))${NC}) ${_VL_LABELS[$i]}"
|
for i in "${!_VL_IPS[@]}"; do
|
||||||
|
_ip="${_VL_IPS[$i]}"
|
||||||
|
_port="${_VL_PORTS[$i]}"
|
||||||
|
_label="${_VL_LABELS[$i]}"
|
||||||
|
printf " %-45s" "$((i+1))) $_label"
|
||||||
|
if timeout 3 bash -c "echo >/dev/tcp/$_ip/$_port" 2>/dev/null; then
|
||||||
|
echo -e "${GREEN}✓ доступен${NC}"
|
||||||
|
_VL_STATUS+=("ok")
|
||||||
|
else
|
||||||
|
echo -e "${RED}✗ недоступен${NC}"
|
||||||
|
_VL_STATUS+=("fail")
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
echo ""
|
||||||
|
|
||||||
read -r -p "Выбери сервер [1-${#_VL_URLS[@]}]: " _vl_choice
|
read -r -p "Выбери сервер [1-${#_VL_URLS[@]}]: " _vl_choice
|
||||||
_vl_choice="${_vl_choice:-1}"
|
_vl_choice="${_vl_choice:-1}"
|
||||||
|
|||||||
Reference in New Issue
Block a user