¿Cómo se puede probar una conexión a Internet sin hacer ping a algún sitio web? Quiero decir, ¿qué pasa si hay una conexión pero el sitio no funciona? ¿Hay alguna verificación de conexión con el mundo?
bash
connection
ping
lauriys
fuente
fuente
Respuestas:
Sin ping
-q : modo de silencio
--spider : no lo consigas, solo verifica la disponibilidad de la página
PS: código de retorno de shell
0 : código de shell "Todo OK"
Sin wget
fuente
nc
para asegurarse de que se agote. algo así comonc google.com 80 -w 10
Haga ping a su puerta de enlace predeterminada:
fuente
function ping_gw() { ... && return 0 || return 1 }
y luego usarla así:ping_gw || (echo "no network, bye" && exit 1)
ifconfig down wlan0
y todavía tengo una puerta de enlace predeterminada y se puede hacer ping, aunque de hecho no puedo llegar al mundo exterior.Super Gracias al usuario somedrew por su publicación aquí: https://bbs.archlinux.org/viewtopic.php?id=55485 en 2008-09-20 02:09:48
Aquí está mi secuencia de comandos para probar una conexión de red que no sea el bucle de retorno. Utilizo lo siguiente en otro script que tengo para probar periódicamente si mi sitio web es accesible. Si NO es accesible, una ventana emergente me avisa de un problema.
El siguiente script me impide recibir mensajes emergentes cada cinco minutos cuando mi computadora portátil no está conectada a la red.
Nota para los nuevos en bash: La declaración final 'if' prueba si NO [!] Está en línea y sale si este es el caso. Consulte man bash y busque "Las expresiones se pueden combinar" para obtener más detalles.
PD: Creo que ping no es lo mejor para usar aquí porque tiene como objetivo probar una conexión a un host en particular, NO probar si hay una conexión a una red de cualquier tipo.
PPS The Above funciona en Ubuntu 12.04. Es posible que / sys no exista en algunas otras distribuciones. Vea abajo:
fuente
cat /sys/class/net/wwan0/carrier
No funciona en ubuntu 14.04 LTS.2>/dev/null
despuéscat /sys/class/net/$interface/carrier
para no tener una salida de error en caso de que la red esté desactivada.Esto funciona tanto en MacOSX como en Linux:
fuente
ping: invalid option -- w
)fping google.com
o simplementefping 8.8.8.8
hace la magia con un bono, obtienes un código de estado sin la necesidad de probarlo ("google.com is alive
") ...En Bash, usando su envoltorio de red a través de / dev / { udp , tcp } / host / port :
(
:
es el no-op de Bash, porque solo desea probar la conexión, pero no el procesamiento).fuente
He escrito scripts antes de eso, simplemente use telnet para conectarse al puerto 80, luego transmita el texto:
seguido de dos secuencias CR / LF.
Siempre que obtenga algún tipo de respuesta HTTP, generalmente puede asumir que el sitio está funcionando.
fuente
La respuesta principal pasa por alto el hecho de que puede tener una conexión perfectamente estable a su puerta de enlace predeterminada, pero eso no significa automáticamente que pueda acceder a algo en Internet. El OP pregunta cómo puede probar una conexión con el mundo. Por lo tanto, sugiero modificar la respuesta principal cambiando la IP de la puerta de enlace a una IP conocida (xyzw) que esté fuera de su LAN.
Entonces la respuesta sería:
También se eliminan las comillas inversas desfavorecidas para la sustitución de comandos [1] .
Si solo desea asegurarse de estar conectado al mundo antes de ejecutar algún código, también puede usar:
fuente
asegúrese de que su red permita la entrada y salida del tráfico TCP, luego podría recuperar su IP pública con el siguiente comando
fuente
Ejecute el siguiente comando para verificar si un sitio web está activo y qué mensaje de estado muestra el servidor web:
$ curl -Is http://www.google.com |
head -1 HTTP/1.1 200 OK
El código de estado '200 OK' significa que la solicitud se ha realizado correctamente y se puede acceder a un sitio web.
fuente
curl -Is http://www.google.com | head -1 | grep 200; if [[ $? -eq 0 ]]; then; echo "Online"; else; echo "Offline"; fi;
Si su servidor de nombres local no funciona,
es una IP siempre activa fácil de recordar (en realidad es un servidor de nombres, incluso).
fuente
La respuesta más votada no funciona para MacOS, por lo que para aquellos en una Mac, he probado esto con éxito:
probado en MacOS High Sierra 10.12.6
fuente
route
comando aroute -n get default 2> /dev/null | grep gateway
para evitar escribir un error en stderr cuando esté desconectado.Este script bash busca continuamente Internet y emite un pitido cuando Internet está disponible.
fuente
camino más corto:
fping 4.2.2.1
=> "4.2.2.1 está vivo"prefiero esto porque es una salida más rápida y menos detallada
ping
, la desventaja es que tendrás que instalarlo.puede utilizar cualquier DNS público en lugar de un sitio web específico.
fping -q google.com && echo "do something because you're connected!"
-q
devuelve un código de salida, por lo que solo estoy mostrando un ejemplo de cómo ejecutar algo en línea.para instalar en Mac:
brew install fping
; en ubuntu:sudo apt-get install fping
fuente
Ping fue diseñado para hacer exactamente lo que busca hacer. Sin embargo, si el sitio bloquea el eco ICMP, siempre puede hacer el telnet al puerto 80 de algún sitio, wget o curl.
fuente
Verificar la página de índice de Google es otra forma de hacerlo:
fuente
De manera similar a la respuesta de @ Jesse , esta opción podría ser mucho más rápida que cualquier solución que use
ping
y quizás un poco más eficiente que la respuesta de @ Jesse .Explicación:
Este comando se usa
find
con-exec
para ejecutar el comando en todos los archivos que no se nombran*lo*
en/sys/class/net/
. Deben ser enlaces a directorios que contengan información sobre las interfaces de red disponibles en su máquina.El comando que se ejecuta es un
sh
comando que verifica el contenido del archivocarrier
en esos directorios. El valor de$interface/carrier
tiene 3 significados - Citando :La primera opción no se atiende en la respuesta de @ Jesse . El
sh
comando rayado es:cat
se utiliza para comprobar el contenidocarrier
y redirigir toda la salida a la salida estándar incluso cuando falla porque el archivo no es legible. Sigrep -q
encuentra"1"
entre esos archivos, significa que hay al menos 1 interfaz conectada. El código de salida degrep -q
será el código de salida final.Uso
Por ejemplo, usando el estado de salida de este comando, puede usarlo para iniciar un gnubiff en su
~/.xprofile
solo si tiene una conexión a Internet.Referencia
/sys/class/net/
fuente
Pong no significa que el servicio web en el servidor se esté ejecutando; simplemente significa que el servidor está respondiendo al eco ICMP. Recomendaría usar curl y verificar su valor de retorno.
fuente
Si su objetivo es comprobar el acceso a Internet , muchas de las respuestas existentes a esta pregunta son erróneas. Algunas cosas que debe tener en cuenta:
Con eso en mente, creo que la mejor estrategia es contactar a varios sitios a través de una conexión HTTPS y devolver el valor verdadero si alguno de esos sitios responde.
Por ejemplo:
Uso:
Algunas notas sobre este enfoque:
fuente
if wait $pid;
. No tengo idea de por qué eso no funciona en su sistema. ¿Estás seguro de que estás usando bash?wait
y ahora entiendo que el código de retorno se está probando. Volví a copiar tu código y hoy funciona. ¡Ups! Debo haber estropeado algo la última vez, aunque no puedo entender qué o cómo. Sin embargo, mea culpa. DisculpasCon este comando:
.
fuente
Esto es notablemente más rápido que cualquier solución publicada aquí y se puede utilizar para probar un host específico. .
El truco es resolver la IP utilizando un solucionador de DNS menos ocupado que el empleado por
ping
:fuente