Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # nota mental (por que usar una ip):
- #hacer ping 8.8.8.8 verifica conectividad ip a la capa 3 pero sin depender de dns
- #podrias usar cualquier servidor fiable que autorice icmp como cloudfare u opendns
- #si el problema es solo de dns el ping puede pasar pero los nombres no resuelven y por eso meti la prueba de resolucion
- PING_TARGETS=( "8.8.8.8" "1.1.1.1" "208.67.222.222" ) # ip
- DNS_TEST_HOST="google.com" # un host dns cualquiera (ejemplo comun)
- CURL_URLS=("https://google.com" "https://wikipedia.org") # ejemplos mas comunes
- MAX_PING_LATENCY_MS=200 # latencia maxima en ms (subirla despues porque soy re pobre y tengo 300)
- # ping y latencia media
- ping_test() {
- local target=$1 # tiempo de espera maximo
- # ejecuta 3 paquetes con tiempo de espera y devuelve latencia media en ms o no te da nada
- local out
- out=$(ping -c3 -W1 "$target" 2>/dev/null \
- | awk -F'[/ ]+' '/rtt/ {print $5}')
- printf '%s' "$out"
- }
- echo -n "ping: "
- ping_ok=false # esto es para verificar que pasaste la primer prueba
- for ip in "${PING_TARGETS[@]}"; do
- if latency=$(ping_test "$ip") && [ -n "$latency" ]; then
- # redondeo y comparo con el maximo
- latency_int=${latency%.*}
- if (( latency_int < MAX_PING_LATENCY_MS )); then
- # pasaste una de las ip a ciertos ms
- echo "ok a $ip (${latency_int} ms)"
- ping_ok=true
- break
- else
- echo "ping alto: $ip responde lento (sos pobre) (${latency_int} ms) — seguimos probando"
- fi
- fi
- done
- # ok una vez tenes el ping vamos a probar una resolucion de dns
- # basicamente nos vamos a traducir los dominios de ejemplo a una direccion ip y vamos a tratar de llamarla
- # si todo sale bien, encontramos el servidor correcto para conectarnos
- echo -n "probando dns de $DNS_TEST_HOST: "
- if getent hosts "$DNS_TEST_HOST" &>/dev/null; then
- echo "ok anda bien"
- dns_ok=true
- else
- echo "fallo dns"
- dns_ok=false
- fi
- # http head (con curl)
- # https://reqbin.com/req/c-tmyvmbgu/curl-head-request-example
- # no es muy normal en un shell, tampoco es tan necesario
- # solicita los metadatos de un recurso en forma de encabezados
- echo -n "http head: "
- curl_ok=false
- for url in "${CURL_URLS[@]}"; do
- if curl --head --silent --fail --max-time 5 "$url" >/dev/null; then
- echo "ok a $url"
- curl_ok=true
- break
- else
- echo " fallo en $url..."
- fi
- done
- if $ping_ok && $dns_ok && $curl_ok; then
- echo "ok tenes internet"
- exit 0
- else
- # poner un coso que te diga cual fue el problema
- echo "no hay coneccion a internet"
- exit 1
- fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement