¿Cómo puedo verificar de manera confiable cuál es la última vez que una máquina Ubuntu se ha conectado a Internet?

24

¿Cómo puedo verificar de manera confiable cuál es la última vez que una máquina Ubuntu se ha conectado a Internet?

En caso de que esto no sea posible, una forma de verificar la última vez que una máquina Ubuntu se conectó a una red sería lo suficientemente buena.

kos
fuente

Respuestas:

28

Método 1

A pesar de que NetworkManager.conf permite el registro, aparentemente todavía entra en syslog. Sin embargo, kern.log también lo tiene.

grep 'associated' /var/log/kern.log | tail -n1                               
Jun 21 17:08:25 anaconda kernel: [ 4910.819781] wlan1: associated

Método 2

Descubrí que NetworkManager almacena el último tiempo de conexión, y está ordenado en /var/lib/NetworkManager/timestampsarchivo, en el formato de tiempo de época de Unix (segundos desde 1970). El mío se ve así, por ejemplo:

$ cat /var/lib/NetworkManager/timestamps                                       
[timestamps]
c562ac2d-8911-4273-b165-ed1495b28c9a=1432777079
46cfcdd9-d095-418f-acd6-0a7ca282bb9a=0
d81fb3d0-1717-42c0-903d-4622c2381597=1434895707
b0bdefe6-df88-49bb-83d8-154dd21d77d9=1433093286

Para mostrar la última entrada

date --date=@"$( awk -F'=' 'BEGIN {var=0}{if(var<$2) var=$2;} END{print var}' /var/lib/NetworkManager/timestamps )"

Awk buscará el mayor tiempo de época (en otras palabras, el más reciente), y la fecha lo convertirá a una forma legible para humanos.

Sospecho también que este archivo ( /var/lib/NetworkManager/timestamps) es utilizado por el menú gráfico Editar conexiones para mostrar la última vez de conexión

ingrese la descripción de la imagen aquí

El problema es que si todavía está conectado a un punto de acceso, la forma de la GUI sigue mostrando que nowno, la hora en que se estableció la conexión por última vez

Sergiy Kolodyazhnyy
fuente
¿Dónde encuentro el archivo? :) ¿También verifica esto la última vez que la máquina se conectó a Internet o la última vez que la máquina se conectó a una red? Por último, ¿funciona esto después?
kos
@kos aparentemente eso todavía entra en el syslog. Investigaré un poco más y, si encuentro algo, actualizaré mi respuesta.
Sergiy Kolodyazhnyy
Ok, lo comprobé man NetworkManager.conf, el archivo es /etc/NetworkManager/NetworkManager.conf; esto funcionará solo después de haber habilitado el inicio de sesión en el demonio, pero desafortunadamente necesito verificar esto luego, suponiendo que la máquina no haya sido configurada para esto. De todos modos +1 para la kern.logsolución y para la primera solución que podría ser útil en otros casos
kos
2
@kos Entonces ese archivo contiene hex-string = epoch-timestamp. las cadenas hexadecimales son puntos de acceso. Las marcas de tiempo de la época son el último momento de conexión. Prueba mi versión awk allí, he editado mi respuesta
Sergiy Kolodyazhnyy
2
@DeadChex Estuve fuera por un año :) Ya corregido
Sergiy Kolodyazhnyy
6

Puede verificar el archivo /var/log/syslogque se mostrará la última vez que se conectó a una red.


Ejemplo

Jun 21 08:00:00 Ubuntu dhclient: DHCPREQUEST of 192.0.0.0 on wlan0 to 192.0.0.0 port 67 (xid=0xec7c6e7)

Puede ejecutar un comando grep para extraer solo lo que necesita del registro

< /var/log/syslog grep DHCPREQUEST 
Mark Kirby
fuente
1
+1, todavía esperando una forma de verificar la última vez que se conectó a Internet. Si hoy no surge nada, aceptaré esta respuesta. Sin embargo, me gustaría sugerirle una solución un poco más fácil de usar, como las < /var/apt/syslog grep DHCPREQUESTvariaciones.
kos
1
DHCPREQUESTNo es confiable. Estoy en línea desde la tarde y desde que tuve muchas solicitudes de DHCP.
AB
@Kos parece haber puesto por error apt en lugar de iniciar sesión en su comentario.
Sri
@Sri De hecho, eso fue un error. ¡Afortunadamente, OP no cayó en eso!
kos
5

Compruebe CONNECTED_GLOBALdespués de haber encontrado link connecteden/var/log/syslog

/link connected/,/CONNECTED_GLOBAL/

% awk '/link connected/,/CONNECTED_GLOBAL/ {line=$0} END{print line}' /var/log/syslog
Jun 21 11:12:54 sturm NetworkManager[736]: <info> NetworkManager state is now CONNECTED_GLOBAL Jun 21 11:12:54

% awk '/link connected/,/CONNECTED_GLOBAL/ {month=$1;day=$2;time=$3} END{print month,day,time}' /var/log/syslog
Jun 21 11:12:54
AB
fuente
No es necesario sudoen el primero, sin embargo, ninguno de estos está funcionando, creo que es debido a POSIXly [[:space:]]. ¿Qué versión de awkestás ejecutando?
kos
@kos Ups, sudoeliminado. GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)
AB
Ok ahora está funcionando :). +1
kos
@kos necesito mi %;) Si hay una salida en la línea de abajo
AB
1
No me gusta %. ¡Todo menos esto es perfecto!
Helio
2

Si no encuentra la forma "correcta" de hacer esto, ¡siempre puede fabricar la suya!

La siguiente función bash le dirá si está conectado (a Internet) o no.

Simplemente tendría que escribir un script que lo llame (en un bucle y luego duerma) y registre la última fecha y hora en un archivo (sobrescribiendo, por lo que solo tiene el último valor).

Tendría que agregar código al bucle para que verifique tan pronto como se llame inicialmente y registre (para que su estado inicial esté configurado correctamente).

Después de eso, solo volvería a iniciar sesión cuando el estado se desconecte por primera vez y cuando se vuelva a conectar después de desconectarse. Es más fácil codificar que explicar. ;)

Esto tendría una precisión limitada por la cantidad de retraso (suspensión) que use en el ciclo (para evitar que sea un ciclo muy ajustado que pueda consumir demasiados recursos del sistema). Tampoco sería consciente de lo que suceda antes de que comience o cuando no se está ejecutando.

El script en sí podría iniciarse (como un trabajo &en segundo plano ( al final de la invocación), posiblemente con una nohuppara mantenerlo ejecutándose si su proceso padre finaliza) cuando su usuario inicie sesión ejecutándolo desde su archivo $ HOME / .profile, comenzando con su utilidad de inicio automático de escritorio (KDE o Gnome), desde un trabajo cron que verifica periódicamente para ver si aún no se está ejecutando, o incluso desde cualquier sistema de inicio que tenga (init / systemd / etc., si sabe lo suficiente para hacerlo ese.)

Cuando no puede encontrar algo como esto que hace exactamente lo que desea, a menudo no es demasiado difícil escribir su propio script para ejecutarlo y ejecutarlo como un demonio en segundo plano.

Es posible ejecutarlo desde una cuenta de usuario normal si es posible, a menos que lo codifique en un lenguaje robusto como C o Python, porque los scripts de shell que se ejecutan con privilegios de root a menudo plantean riesgos de seguridad.

Este enfoque tiene otro problema. A veces, un ping expirará dándole un falso estado fuera de línea.

Tengo un script completo, offline_alert , que prácticamente hace lo contrario de lo que quieres, me avisa cuando me desconecto, pero el código puede resultar útil. Tiene una mejor función fuera de línea que intenta reducir los falsos positivos de los tiempos de espera de ping.

function offline {
  ## Test if offline
  ## Returns 0 if online, 2 if offline
  local RC
  ping -c 1 google.com > /dev/null 2>&1
  RC=$?
  ##echo "offline returning [${RC}]"
  return $RC
}
Joe
fuente
2

Una forma de verificar cualquier servicio / registro de daemon que se retransmita en Internet para que funcione. Por ejemplo, actualizaciones de NTP (Protocolo de tiempo de red).

Consulte dpkg -L ntpdatelos ganchos de estado de red

Bueno, como he comprobado su registro para el escritorio de Ubuntu, su actualización se ejecuta cada vez que se conecta a la red y sigo intentando después de un breve retraso si falla la última actualización. Se conecta ntp.ubuntu.com.

(Nota, agregué la primera columna en la salida para mis comentarios)

$ grep -r ntpdate /var/log/syslog*

1st_trial   Jul 14 00:35:56 user-VirtualBox ntpdate[774]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 14 00:35:56 user-VirtualBox ntpdate[774]: no servers can be used, exiting
2nd_trial   Jul 14 03:38:57 user-VirtualBox ntpdate[2571]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 14 03:38:57 user-VirtualBox ntpdate[2571]: no servers can be used, exiting
3rd_trial   Jul 14 03:46:09 user-VirtualBox ntpdate[2782]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 14 03:46:09 user-VirtualBox ntpdate[2782]: no servers can be used, exiting
4th_trial   Jul 14 03:47:48 user-VirtualBox ntpdate[2917]: step time server 91.189.89.199 offset 3.458355 sec
1st_trial   Jul 14 10:23:07 user-VirtualBox ntpdate[728]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 14 10:23:07 user-VirtualBox ntpdate[728]: no servers can be used, exiting
2nd_trial   Jul 14 10:37:22 user-VirtualBox ntpdate[2099]: step time server 91.189.89.199 offset 2.021103 sec
dis-/re-con Jul 14 15:27:09 user-VirtualBox ntpdate[20174]: step time server 91.189.89.199 offset 1.677465 sec
1st_trial   Jul 14 23:55:00 user-VirtualBox ntpdate[807]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 14 23:55:00 user-VirtualBox ntpdate[807]: no servers can be used, exiting
2nd_trial   Jul 15 00:00:24 user-VirtualBox ntpdate[2041]: step time server 91.189.94.4 offset 1.619839 sec
1st_trial   Jul 15 05:39:08 user-VirtualBox ntpdate[767]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 15 05:39:08 user-VirtualBox ntpdate[767]: no servers can be used, exiting
2nd_trial   Jul 15 05:39:21 user-VirtualBox ntpdate[1088]: step time server 91.189.94.4 offset 2.897077 sec
1st_trial   Jul 15 05:49:40 user-VirtualBox ntpdate[787]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 15 05:49:40 user-VirtualBox ntpdate[787]: no servers can be used, exiting
2nd_trial   Jul 15 05:49:50 user-VirtualBox ntpdate[1101]: adjust time server 91.189.94.4 offset 0.090520 sec
reconnect   Jul 15 05:55:50 user-VirtualBox ntpdate[2251]: adjust time server 91.189.94.4 offset 0.261432 sec
reconnect   Jul 15 06:04:53 user-VirtualBox ntpdate[2702]: step time server 91.189.94.4 offset 0.525658 sec

Confirmo que está instalado de forma predeterminada para las ediciones de escritorio y servidor Ubuntu 14.04 LTS 64Bit.

Lo probé en VM, muestra solo el tiempo que se conecta o se vuelve a conectar (con Internet disponible). No es lo que quieres (la última vez que estuviste conectado)

Tenga en cuenta que syslog es un registro de rotación, si desea buscar todos los registros, incluso los comprimidos antiguos, use zgrep

zgrep -ih ntpdate /var/log/syslog* | sort -bn -k2
user.dz
fuente
Esto se ve bien, sin embargo, ¿puede confirmar que está habilitado de forma predeterminada al menos en Ubuntu Desktop? No puedo probarlo personalmente en este momento, pero lo haré mañana
kos
1
No lo elimine, es útil y es bueno para mi alcance, si entendí esto informará la última vez que se realizó una conexión (más o menos) persistente, por lo que si dejo la máquina conectada durante unos 2 días, informará la fecha y la hora en que se realizó la última conexión (es decir, 2 días antes) ¿verdad? Solo lo último, ¿qué sucede cuando alguien se desconecta de la red y se vuelve a conectar, digamos, 5 minutos después? ¿La verificación NTP se ejecuta nuevamente? ¿O hay algún tipo de umbral después de la última verificación NTP antes de que se ejecute una nueva verificación NTP?
kos
1
@kos, no se confunda, ntpdateestá instalado por defecto pero no ntpd/ openntpddaemon / service que viene en paquetes separados. Para verificar que cambie su hora y fecha a una incorrecta, desconecte y vuelva a conectar.
user.dz
1
@kos, ntpdatepodría usarse cronpara actualizar el tiempo periódicamente, tendrá los mismos resultados que ejecutar un servicio (ntpd / openntpd). Pero está buscando una configuración predeterminada y sin ajustes adicionales, ¿verdad?
user.dz
1
Lo siento, leí mal. Sí, estaba buscando algo para usar en una máquina no configurada. Ok, esto funciona para mí, dejaré la pregunta abierta de todos modos, tal vez a alguien se le ocurra una respuesta asesina. ¡Gracias! Es un gran paso adelante. De todos modos, tenga en cuenta que esos registros rotan con fuerza, tal vez desee agregar eso a su respuesta.
kos