Podemos utilizar una llamada system2
para obtener el estado de devolución del comando ping en el shell. En Windows (y, probablemente, Linux) siguiente funcionará:
ping <- function(x, stderr = FALSE, stdout = FALSE, ...){
pingvec <- system2("ping", x,
stderr = FALSE,
stdout = FALSE,...)
if (pingvec == 0) TRUE else FALSE
}
# example
> ping("google.com")
[1] FALSE
> ping("ugent.be")
[1] TRUE
Si desea capturar la salida de la mesa de ping, puede establecer stdout = ""
, o utilizar una llamada al sistema:
> X <- system("ping ugent.be", intern = TRUE)
> X
[1] "" "Pinging ugent.be [157.193.43.50] with 32 bytes of data:"
[3] "Reply from 157.193.43.50: bytes=32 time<1ms TTL=62" "Reply from 157.193.43.50: bytes=32 time<1ms TTL=62"
[5] "Reply from 157.193.43.50: bytes=32 time<1ms TTL=62" "Reply from 157.193.43.50: bytes=32 time<1ms TTL=62"
[7] "" "Ping statistics for 157.193.43.50:"
[9] " Packets: Sent = 4, Received = 4, Lost = 0 (0% loss)," "Approximate round trip times in milli-seconds:"
[11] " Minimum = 0ms, Maximum = 0ms, Average = 0ms"
utilizando la opción intern = TRUE
hace posible guardar la salida en un vector. Dejo al lector como un ejercicio para reorganizar esto con el fin de obtener un rendimiento decente.
Un comentario sobre la terminología: pinging se dirige a un host, no a un sitio web. Si es importante, es posible que desee comprender la diferencia entre un servidor, host, IP, dominio y sitio web. Sin embargo, no es un gran problema para la mayoría de los propósitos. – Iterator
Tenga en cuenta que algunas personas interpretan que "hacer ping en un sitio web" significa "enviar una consulta GET y asegurarse de que se devuelva un código de respuesta 200". Estoy de acuerdo en que no es la terminología común, pero está por ahí. – patrickmdnet