Advertisement
s_ff

Untitled

Jun 27th, 2025
536
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.52 KB | None | 0 0
  1. # nota mental (por que usar una ip):
  2. #hacer ping 8.8.8.8 verifica conectividad ip a la capa 3 pero sin depender de dns
  3. #podrias usar cualquier servidor fiable que autorice icmp como cloudfare u opendns
  4. #si el problema es solo de dns el ping puede pasar pero los nombres no resuelven y por eso meti la prueba de resolucion
  5.  
  6. PING_TARGETS=( "8.8.8.8" "1.1.1.1" "208.67.222.222" ) # ip
  7. DNS_TEST_HOST="google.com" # un host dns cualquiera (ejemplo comun)
  8. CURL_URLS=("https://google.com" "https://wikipedia.org") # ejemplos mas comunes
  9. MAX_PING_LATENCY_MS=200 # latencia maxima en ms (subirla despues porque soy re pobre y tengo 300)
  10.  
  11. # ping y latencia media
  12. ping_test() {
  13.   local target=$1 # tiempo de espera maximo
  14.   # ejecuta 3 paquetes con tiempo de espera y devuelve latencia media en ms o no te da nada
  15.   local out
  16.   out=$(ping -c3 -W1 "$target" 2>/dev/null \
  17.         | awk -F'[/ ]+' '/rtt/ {print $5}')
  18.   printf '%s' "$out"
  19. }
  20.  
  21. echo -n "ping: "
  22. ping_ok=false # esto es para verificar que pasaste la primer prueba
  23. for ip in "${PING_TARGETS[@]}"; do
  24.   if latency=$(ping_test "$ip") && [ -n "$latency" ]; then
  25.     # redondeo y comparo con el maximo
  26.     latency_int=${latency%.*}
  27.     if (( latency_int < MAX_PING_LATENCY_MS )); then
  28.       # pasaste una de las ip a ciertos ms
  29.       echo "ok a $ip (${latency_int} ms)"
  30.       ping_ok=true
  31.       break
  32.     else
  33.       echo "ping alto: $ip responde lento (sos pobre) (${latency_int} ms) — seguimos probando"
  34.     fi
  35.   fi
  36. done
  37.  
  38. # ok una vez tenes el ping vamos a probar una resolucion de dns
  39. # basicamente nos vamos a traducir los dominios de ejemplo a una direccion ip y vamos a tratar de llamarla
  40. # si todo sale bien, encontramos el servidor correcto para conectarnos
  41. echo -n "probando dns de $DNS_TEST_HOST: "
  42. if getent hosts "$DNS_TEST_HOST" &>/dev/null; then
  43.   echo "ok anda bien"
  44.   dns_ok=true
  45. else
  46.   echo "fallo dns"
  47.   dns_ok=false
  48. fi
  49.  
  50. # http head (con curl)
  51. # https://reqbin.com/req/c-tmyvmbgu/curl-head-request-example
  52. # no es muy normal en un shell, tampoco es tan necesario
  53. #  solicita los metadatos de un recurso en forma de encabezados
  54.  
  55. echo -n "http head: "
  56. curl_ok=false
  57. for url in "${CURL_URLS[@]}"; do
  58.   if curl --head --silent --fail --max-time 5 "$url" >/dev/null; then
  59.     echo "ok a $url"
  60.     curl_ok=true
  61.     break
  62.   else
  63.     echo "  fallo en $url..."
  64.   fi
  65. done
  66.  
  67. if $ping_ok && $dns_ok && $curl_ok; then
  68.   echo "ok tenes internet"
  69.   exit 0
  70. else
  71.   # poner un coso que te diga cual fue el problema
  72.   echo "no hay coneccion a internet"
  73.   exit 1
  74. fi
  75.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement