Comment puis-je vérifier de manière fiable la dernière fois qu'une machine Ubuntu a été connectée à Internet?

24

Comment puis-je vérifier de manière fiable la dernière fois qu'une machine Ubuntu a été connectée à Internet?

Dans le cas où cela n'est pas possible, un moyen de vérifier la dernière fois qu'une machine Ubuntu a été connectée à un réseau serait suffisant.

kos
la source

Réponses:

28

Méthode 1

Même si NetworkManager.conf autorise la journalisation, cela va apparemment toujours dans syslog. Cependant, kern.log l'a également.

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

Méthode 2

J'ai trouvé que NetworkManager stocke l'heure de la dernière connexion, et il est trié dans un /var/lib/NetworkManager/timestampsfichier, au format de l'heure unix (secondes depuis 1970). La mienne ressemble à ceci par exemple:

$ 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

Pour afficher la dernière entrée

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

Awk recherchera la plus grande époque (en d'autres termes la plus récente) et la date la convertira en une forme lisible par l'homme.

Je soupçonne également que ce fichier ( /var/lib/NetworkManager/timestamps) est utilisé par le menu graphique Edit Connections pour afficher la dernière connexion

entrez la description de l'image ici

Le problème est que si vous êtes toujours connecté à un point d'accès, la manière GUI continue de nowne pas montrer l'heure de la dernière connexion établie

Sergiy Kolodyazhnyy
la source
Où puis-je trouver le fichier? :) Cela vérifie-t-il également la dernière connexion de la machine à Internet ou la dernière connexion de la machine à un réseau? Enfin, cela fonctionne-t-il après?
kos
@kos apparemment, cela va toujours dans le syslog. Je vais faire des recherches un peu plus, et si je trouve quelque chose, je mettrai à jour ma réponse.
Sergiy Kolodyazhnyy
Ok j'ai vérifié man NetworkManager.conf, le fichier est /etc/NetworkManager/NetworkManager.conf; cela ne fonctionnera qu'après avoir activé la connexion dans le démon, mais malheureusement, je dois vérifier cela par la suite en supposant que la machine n'a pas été configurée pour cela. Quoi qu'il en soit +1 pour la kern.logsolution et pour la première solution qui pourraient être utiles dans d'autres cas
kos
2
@kos Donc, ce fichier contient hex-string = epoch-timestamp. les chaînes hexadécimales sont des points d'accès. les horodatages sont les derniers temps de connexion. Essayez ma version awk là-bas, j'ai édité ma réponse
Sergiy Kolodyazhnyy
2
@DeadChex J'étais parti d'un an :) Corrigé déjà
Sergiy Kolodyazhnyy
6

Vous pouvez vérifier le fichier /var/log/syslogqu'il affichera lors de votre dernière connexion à un réseau.


Exemple

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

Vous pouvez exécuter une commande grep pour extraire uniquement ce dont vous avez besoin du journal

< /var/log/syslog grep DHCPREQUEST 
Mark Kirby
la source
1
+1, en espérant toujours un moyen de vérifier la dernière fois qu'il a été connecté à Internet. Si rien ne se produit aujourd'hui, j'accepterai cette réponse. Cependant, je voudrais vous suggérer une solution un peu plus conviviale telle que < /var/apt/syslog grep DHCPREQUESTou variantes.
kos
1
DHCPREQUESTn'est pas fiable. Je suis en ligne depuis l'après-midi et depuis j'ai eu beaucoup de requêtes DHCP.
AB
@Kos vous semblez avoir mis par erreur apt au lieu de vous connecter dans votre commentaire.
Sri
@Sri En effet, c'était une erreur. Heureusement, OP n'est pas tombé amoureux de ça!
kos
5

Vérifiez CONNECTED_GLOBALaprès avoir trouvé link connecteddans/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
UN B
la source
Il n'y en a pas besoin sudodans le premier, mais rien de tout cela ne fonctionne, je pense que c'est à cause du POSIXly [[:space:]]. Quelle version awkutilisez-vous?
kos
@kos Ups, sudosupprimé. GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)
AB
Ok maintenant ça marche :). +1
kos
@kos j'ai besoin de mon %;) S'il y a une sortie dans la ligne ci
AB
1
Je n'aime pas %. Tout mais c'est parfait!
Helio
2

Si vous ne trouvez pas la "bonne" façon de procéder, vous pouvez toujours fabriquer la vôtre!

La fonction bash suivante vous indiquera si vous êtes en ligne (sur Internet) ou non.

Il vous suffirait d'écrire un script qui l'appelle (en boucle puis s'endort) et enregistre la dernière date et heure dans un fichier (écrasement, il n'a donc que la dernière valeur).

Vous devez ajouter du code à la boucle pour qu'elle vérifie dès son premier appel et se connecte (afin que votre état initial soit correctement défini).

Après cela, vous ne vous connecterez à nouveau que lorsque l'état se déconnectera pour la première fois et lorsqu'il se connectera pour la première fois après avoir été déconnecté. Il est plus facile de coder que d'expliquer. ;)

La précision serait limitée par la durée pendant laquelle un délai (sommeil) que vous utilisez dans la boucle (pour l'empêcher d'être une boucle très serrée qui pourrait consommer trop de ressources système). ou lorsqu'il n'est pas en cours d'exécution.

Le script lui-même peut être démarré (en tant que tâche d'arrière-plan ( &à la fin de l'invocation), éventuellement avec un nohuppour le continuer à fonctionner si son processus parent se termine) lorsque votre utilisateur se connecte en l'exécutant à partir de votre fichier $ HOME / .profile, le démarrer avec votre utilitaire de démarrage automatique du bureau (KDE ou Gnome), à ​​partir d'un travail cron qui vérifie périodiquement s'il n'est pas déjà en cours d'exécution, ou même à partir du système de démarrage que vous avez (init / systemd / etc., si vous en savez assez pour le faire cette.)

Lorsque vous ne trouvez pas quelque chose comme ça qui fait exactement ce que vous voulez, il n'est souvent pas trop difficile d'écrire votre propre script pour le faire et de l'exécuter comme un démon en arrière-plan.

Il est préférable de l'exécuter à partir d'un compte utilisateur normal si possible - à moins que vous ne le codiez dans un langage robuste comme C ou Python - car les scripts shell s'exécutant avec les privilèges root posent souvent des risques de sécurité.

Cette approche a un autre problème. Parfois, un ping expirera, vous donnant un faux statut hors ligne.

J'ai un script complet, offline_alert , qui fait à peu près le contraire de ce que vous voulez - m'avertit lorsque je me déconnecte - mais le code peut s'avérer utile. Il a une meilleure fonction hors ligne qui tente de réduire les faux positifs des délais d'attente 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
la source
2

Une façon de vérifier tout journal de service / démon qui relaie sur Internet pour fonctionner. Par exemple, les mises à jour NTP (Network Time Protocol).

Voir dpkg -L ntpdatepour les crochets d'état du réseau

Eh bien, comme j'ai vérifié son journal pour le bureau Ubuntu, sa mise à jour s'exécute chaque fois que le réseau est en place et continue d'essayer après un court délai si la dernière mise à jour a échoué. Il se connecte ntp.ubuntu.com.

(Remarque, j'ai ajouté la première colonne dans la sortie pour mes commentaires)

$ 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

Je confirme qu'il est installé par défaut pour les éditions de bureau et de serveur Ubuntu 14.04 LTS 64Bit.

Je l'ai essayé dans VM, il ne montre que le temps qu'il se connecte ou se reconnecte (avec Internet disponible). Pas ce que vous voulez (la dernière fois que vous avez été connecté)

Remarque, syslog est un journal de rotation, si vous souhaitez rechercher tous les journaux, même les anciens compressés, utilisez zgrep

zgrep -ih ntpdate /var/log/syslog* | sort -bn -k2
user.dz
la source
Cela semble bon, mais pouvez-vous confirmer que c'est activé par défaut au moins sur Ubuntu Desktop? Je ne peux pas le tester personnellement pour le moment, mais je le ferai effectivement demain
kos
1
Ne le supprimez pas, c'est utile et c'est bon pour ma portée, si j'ai compris que cela signale la dernière fois qu'une connexion persistante (plus ou moins) a été établie, donc si je laisse la machine connectée pendant 2 jours, par exemple la date et l'heure de la dernière connexion (c'est-à-dire 2 jours avant), n'est-ce pas? Juste la dernière chose, que se passe-t-il lorsque quelqu'un se déconnecte du réseau et se reconnecte, disons, 5 minutes plus tard? La vérification NTP s'exécute-t-elle à nouveau? Ou existe-t-il une sorte de seuil après la dernière vérification NTP avant l'exécution d'une nouvelle vérification NTP?
kos
1
@kos, ne vous trompez pas, ntpdateest installé par défaut mais pas ntpd/ openntpddaemon / service qui vient dans des packages séparés. Pour vérifier que le changement d'heure et de date est incorrect, déconnectez-vous puis reconnectez-vous.
user.dz
1
@kos, ntpdatepourrait être utilisé avec cronpour mettre à jour périodiquement le temps, il aura les mêmes résultats que l'exécution d'un service (ntpd / openntpd). Mais vous recherchez une configuration par défaut et aucun réglage supplémentaire, non?
user.dz
1
Désolé, j'ai mal lu. Oui, je cherchais quelque chose à utiliser sur une machine non configurée. Ok, ça marche pour moi, je vais quand même laisser la question ouverte, peut-être que quelqu'un trouve une réponse qui tue. Merci! C'est un grand pas en avant. Quoi qu'il en soit, gardez à l'esprit que ces journaux tournent difficilement, vous pouvez peut-être ajouter cela à votre réponse.
kos