add quick-install aftercheck

This commit is contained in:
dperegudov
2026-09-17 11:42:11 +03:00
parent fa49a86d37
commit fe3ebbe593
+121
View File
@@ -94,6 +94,113 @@ start_service() {
systemctl status "$SERVICE_NAME" --no-pager || true systemctl status "$SERVICE_NAME" --no-pager || true
} }
# Extract a JSON string field value (flat JSON): json_get "<json>" "<key>"
json_get() {
printf '%s' "$1" \
| grep -oE "\"$2\"[[:space:]]*:[[:space:]]*\"[^\"]*\"" \
| head -1 \
| sed -E "s/^\"$2\"[[:space:]]*:[[:space:]]*\"//; s/\"$//"
}
# Probe ip-api.com through a local SOCKS5 proxy on the given port.
# Prints 8 values separated by 0x1F: latency, status, country, regionName,
# city, timezone, isp, query.
probe_values() {
local port="$1"
local sep=$'\037'
local resp tsec body ms status country regionName city timezone isp query
resp=$(curl -s --connect-timeout 8 --max-time 15 \
--proxy "socks5h://127.0.0.1:${port}" \
-w $'\n%{time_total}' "http://ip-api.com/json" 2>/dev/null)
tsec=$(printf '%s' "$resp" | tail -n1)
body=$(printf '%s' "$resp" | sed '$d')
if [ -z "$body" ] || ! printf '%s' "$body" | grep -q '"status"'; then
printf 'ERR%sno response%s-%s-%s-%s-%s-%s-' \
"$sep" "$sep" "$sep" "$sep" "$sep" "$sep" "$sep"
return
fi
ms=$(awk "BEGIN{printf \"%d\", ${tsec:-0}*1000}")
status=$(json_get "$body" status)
country=$(json_get "$body" country)
regionName=$(json_get "$body" regionName)
city=$(json_get "$body" city)
timezone=$(json_get "$body" timezone)
isp=$(json_get "$body" isp)
query=$(json_get "$body" query)
printf '%sms%s%s%s%s%s%s%s%s%s%s%s%s%s%s' \
"$ms" "$sep" "$status" "$sep" "$country" "$sep" "$regionName" \
"$sep" "$city" "$sep" "$timezone" "$sep" "$isp" "$sep" "$query"
}
# Pad a string with trailing spaces to a given display width (char count).
_pad() {
local s="$1" w="$2" len=${#1} i
printf '%s' "$s"
i=$len
while [ "$i" -lt "$w" ]; do printf ' '; i=$((i + 1)); done
}
_dashes() {
local i=0
while [ "$i" -lt "$1" ]; do printf -- '-'; i=$((i + 1)); done
}
check_outbounds() {
if ! command -v curl >/dev/null 2>&1; then
echo "curl not found, cannot run checks." >&2
return 1
fi
local labels=("ms до ответа" "status" "country" "regionName" "city" "timezone" "isp" "query")
local n=${#labels[@]}
local -a warp_col=() proton_col=()
local have_warp="$ENABLE_WARP" have_proton="$ENABLE_PROTON"
local w0=4 ww=4 wp=6 # widths of "поле" / "warp" / "proton"
local i
if [ "$have_warp" -eq 1 ]; then
echo "Probing WARP (socks5://127.0.0.1:2080) ..."
IFS=$'\037' read -r -a warp_col <<< "$(probe_values 2080)"
fi
if [ "$have_proton" -eq 1 ]; then
echo "Probing Proton (socks5://127.0.0.1:3080) ..."
IFS=$'\037' read -r -a proton_col <<< "$(probe_values 3080)"
fi
for ((i = 0; i < n; i++)); do
[ ${#labels[i]} -gt "$w0" ] && w0=${#labels[i]}
if [ "$have_warp" -eq 1 ]; then [ ${#warp_col[i]} -gt "$ww" ] && ww=${#warp_col[i]}; fi
if [ "$have_proton" -eq 1 ]; then [ ${#proton_col[i]} -gt "$wp" ] && wp=${#proton_col[i]}; fi
done
_sep_line() {
printf '+'; _dashes $((w0 + 2)); printf '+'
[ "$have_warp" -eq 1 ] && { _dashes $((ww + 2)); printf '+'; }
[ "$have_proton" -eq 1 ] && { _dashes $((wp + 2)); printf '+'; }
printf '\n'
}
_row() {
printf '| '; _pad "$1" "$w0"; printf ' |'
[ "$have_warp" -eq 1 ] && { printf ' '; _pad "$2" "$ww"; printf ' |'; }
[ "$have_proton" -eq 1 ] && { printf ' '; _pad "$3" "$wp"; printf ' |'; }
printf '\n'
}
echo ""
_sep_line
_row "поле" "warp" "proton"
_sep_line
for ((i = 0; i < n; i++)); do
_row "${labels[i]}" "${warp_col[i]:--}" "${proton_col[i]:--}"
done
_sep_line
}
echo "=== Sing-Box WARP Quick Installer ===" echo "=== Sing-Box WARP Quick Installer ==="
echo "" echo ""
@@ -347,16 +454,30 @@ fi
echo " Default route for non-SOCKS traffic: $DEFAULT_ROUTE" echo " Default route for non-SOCKS traffic: $DEFAULT_ROUTE"
echo "" echo ""
SERVICE_STARTED=0
if [ "$REINSTALL" -eq 1 ]; then if [ "$REINSTALL" -eq 1 ]; then
echo "Reinstall complete, starting service..." echo "Reinstall complete, starting service..."
start_service start_service
SERVICE_STARTED=1
else else
read -p "Start service now? (y/n) " -n 1 -r < /dev/tty read -p "Start service now? (y/n) " -n 1 -r < /dev/tty
echo echo
if [[ $REPLY =~ ^[Yy]$ ]]; then if [[ $REPLY =~ ^[Yy]$ ]]; then
start_service start_service
SERVICE_STARTED=1
fi fi
fi fi
echo ""
read -p "Проверить созданные ауты? (y/n) " -n 1 -r < /dev/tty
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
if [ "$SERVICE_STARTED" -eq 0 ] && ! systemctl is-active --quiet "$SERVICE_NAME"; then
echo "Service is not running — starting it for the check..."
start_service
fi
check_outbounds
fi
echo "" echo ""
echo "Done!" echo "Done!"