Merge pull request #120 from Snowy-Fluffy/dev

Dev
This commit is contained in:
Luna River
2026-02-06 09:31:14 +03:00
committed by GitHub

View File

@@ -456,38 +456,53 @@ search_in_zapret_exc() {
test_domain() { test_domain() {
local domain="$1" local domain="$1"
local results=()
domain=$(echo "$domain" | sed 's/#.*//' | xargs) domain=$(echo "$domain" | sed 's/#.*//' | xargs)
[[ -z "$domain" ]] && return [[ -z "$domain" ]] && return
# Временный файл для хранения результатов
local r_file="$(mktemp)"
# FAIL - результат по-умолчанию для ping http tls1.2 tls1.3 (построчно)
echo -en "FAIL\nFAIL\nFAIL\nFAIL" > "$r_file"
# Таймауты
local t_ping=2
local t_http=5
if [[ "$domain" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then if [[ "$domain" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
test_ip "$domain" test_ip "$domain"
else else
ping_result=$(ping -c 2 -W 2 "$domain" 2>/dev/null | grep -E "rtt min/avg/max/mdev" | awk -F'/' '{print $5}') # Асинхронно запустим ping, http и https.
if [[ -n "$ping_result" ]]; then # sed запишет результат строго в указанную строку
results+=("${ping_result}ms") {
else result=$(ping -c 2 -W $t_ping "$domain" 2>/dev/null | grep -E "rtt min/avg/max/mdev" | awk -F'/' '{print $5}')
results+=("FAIL") if [[ -n "$result" ]]; then
fi sed -i "1c\\${result}ms" "$r_file"
http_result=$(timeout 5 curl -s -o /dev/null -w "%{http_code}" "http://$domain" 2>/dev/null || echo "FAIL") fi
if [[ "$http_result" =~ ^[0-9]+$ ]]; then } &
results+=("HTTP:$http_result") {
else result=$(curl -m $t_http -s -o /dev/null -w "%{http_code}" "http://$domain" 2>/dev/null || echo "FAIL")
results+=("FAIL") if [[ "$result" =~ ^[0-9]+$ ]]; then
fi sed -i "2c\\HTTP:$result" "$r_file"
tls12_result=$(timeout 5 curl -s -o /dev/null -w "%{http_code}" --tlsv1.2 "https://$domain" 2>/dev/null || echo "FAIL") fi
if [[ "$tls12_result" =~ ^[0-9]+$ ]]; then } &
results+=("TLS1.2:$tls12_result") # https будет синхронным - в обоих случаях подключение идет по одному и тому же порту (443)
else # и будет некорректно запускать оба подключения одновременно.
results+=("FAIL") {
fi result=$(curl -m $t_http -s -o /dev/null -w "%{http_code}" --tlsv1.2 "https://$domain" 2>/dev/null || echo "FAIL")
tls13_result=$(timeout 5 curl -s -o /dev/null -w "%{http_code}" --tlsv1.3 "https://$domain" 2>/dev/null || echo "FAIL") if [[ "$result" =~ ^[0-9]+$ ]]; then
if [[ "$tls13_result" =~ ^[0-9]+$ ]]; then sed -i "3c\\TLS1.2:$result" "$r_file"
results+=("TLS1.3:$tls13_result") fi
else result=$(curl -m $t_http -s -o /dev/null -w "%{http_code}" --tlsv1.3 "https://$domain" 2>/dev/null || echo "FAIL")
results+=("FAIL") if [[ "$result" =~ ^[0-9]+$ ]]; then
fi sed -i "4c\\TLS1.3:$result" "$r_file"
fi
} &
fi fi
echo "${results[@]}"
# Ждем окончания всех запросов, объединяем строки с результатами в одну, удаляем временный файл
wait
echo $(paste -sd ' ' "$r_file")
rm -f "$r_file"
} }
test_ip() { test_ip() {
@@ -728,8 +743,8 @@ check_conf() {
echo -e "\e[42m\e[30m║ ИТОГОВЫЙ РЕЗУЛЬТАТ ║\e[0m" echo -e "\e[42m\e[30m║ ИТОГОВЫЙ РЕЗУЛЬТАТ ║\e[0m"
echo -e "\e[42m\e[30m╠══════════════════════════════════════════════════════════════════════════╣\e[0m" echo -e "\e[42m\e[30m╠══════════════════════════════════════════════════════════════════════════╣\e[0m"
echo -e "\e[42m\e[30m║ ║\e[0m" echo -e "\e[42m\e[30m║ ║\e[0m"
printf "\e[42m\e[30m║ Лучшая стратегия: %-52s ║\n\e[0m" "$best_config" printf "\e[42m\e[30m║ Лучшая стратегия: %-50s ║\n\e[0m" "$best_config"
printf "\e[42m\e[30m║ Доступно доменов/IP: %-3d из %-3d (%.1f%%) ║\n\e[0m" "$best_available" "$total_domains" $(echo "scale=1; $best_available * 100 / $total_domains" | bc) printf "\e[42m\e[30m║ Доступно доменов/IP: %-52s ║\n\e[0m" "$best_available из $total_domains ($(echo "scale=1; $best_available * 100 / $total_domains" | bc)%)"
echo -e "\e[42m\e[30m║ ║\e[0m" echo -e "\e[42m\e[30m║ ║\e[0m"
echo -e "\e[42m\e[30m╚══════════════════════════════════════════════════════════════════════════╝\e[0m" echo -e "\e[42m\e[30m╚══════════════════════════════════════════════════════════════════════════╝\e[0m"
echo "" echo ""