Загрузка данных


#!/usr/bin/env bash

echo "========================================"
echo " GitHub Copilot / VPN network diagnostic"
echo "========================================"
echo

echo "=== 1. External IPv4 ==="
IPV4=$(curl -4 -s --max-time 10 https://ifconfig.me)
if [ -n "$IPV4" ]; then
    echo "IPv4: $IPV4"
else
    echo "IPv4: FAILED"
fi
echo

echo "=== 2. External IPv6 ==="
IPV6=$(curl -6 -s --max-time 10 https://ifconfig.me)
if [ -n "$IPV6" ]; then
    echo "IPv6: $IPV6"
    echo "WARNING: IPv6 is available. Check that it also goes through VPN."
else
    echo "IPv6: unavailable / blocked"
fi
echo

echo "=== 3. IP geolocation ==="
curl -4 -s --max-time 10 https://ipinfo.io/json
echo
echo

echo "=== 4. DNS resolution ==="

HOSTS=(
    "github.com"
    "api.github.com"
    "api.githubcopilot.com"
    "copilot-proxy.githubusercontent.com"
)

for HOST in "${HOSTS[@]}"; do
    echo "--- $HOST ---"
    if command -v dig >/dev/null 2>&1; then
        dig +short A "$HOST"
        echo "IPv6:"
        dig +short AAAA "$HOST"
    else
        getent ahosts "$HOST" 2>/dev/null | head
    fi
    echo
done

echo "=== 5. Copilot endpoints ==="

check_url() {
    URL="$1"

    echo "--- $URL ---"

    RESULT=$(curl \
        -sS \
        -o /dev/null \
        --max-time 15 \
        -w "HTTP=%{http_code} remote_ip=%{remote_ip} local_ip=%{local_ip} time=%{time_total}s\n" \
        "$URL" 2>&1)

    echo "$RESULT"
    echo
}

check_url "https://copilot-proxy.githubusercontent.com/_ping"
check_url "https://api.githubcopilot.com/_ping"
check_url "https://api.github.com"

echo "=== 6. Force IPv4 ==="

for URL in \
    "https://copilot-proxy.githubusercontent.com/_ping" \
    "https://api.githubcopilot.com/_ping"
do
    echo "--- $URL ---"

    curl -4 \
        -sS \
        -o /dev/null \
        --max-time 15 \
        -w "HTTP=%{http_code} remote_ip=%{remote_ip} local_ip=%{local_ip}\n" \
        "$URL" 2>&1

    echo
done

echo "=== 7. Force IPv6 ==="

for URL in \
    "https://copilot-proxy.githubusercontent.com/_ping" \
    "https://api.githubcopilot.com/_ping"
do
    echo "--- $URL ---"

    curl -6 \
        -sS \
        -o /dev/null \
        --max-time 10 \
        -w "HTTP=%{http_code} remote_ip=%{remote_ip} local_ip=%{local_ip}\n" \
        "$URL" 2>&1

    echo
done

echo "=== 8. Routing table ==="

if command -v ip >/dev/null 2>&1; then
    echo "--- IPv4 default route ---"
    ip route
    echo

    echo "--- IPv6 default route ---"
    ip -6 route
elif command -v route >/dev/null 2>&1; then
    route -n
fi

echo
echo "========================================"
echo " Diagnostic finished"
echo "========================================"