Come posso verificare in modo affidabile qual è l'ultima volta che una macchina Ubuntu è stata connessa a Internet?


24

Come posso verificare in modo affidabile qual è l'ultima volta che una macchina Ubuntu è stata connessa a Internet?

Nel caso ciò non fosse possibile, un modo per verificare l'ultima volta che una macchina Ubuntu è stata connessa a una rete sarebbe abbastanza buono.

Risposte:


28

Metodo 1

Anche se NetworkManager.conf consente la registrazione, sembra che vada comunque nel syslog. Tuttavia, ha anche kern.log.

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

Metodo 2

Ho scoperto che NetworkManager memorizza l'ora dell'ultima connessione, ed è ordinata in /var/lib/NetworkManager/timestampsfile, nel formato dell'ora unix (secondi dal 1970). Il mio si presenta così per esempio:

$ 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

Per mostrare l'ultima voce

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

Awk cercherà il tempo più grande dell'epoca (in altre parole più recente) e la data lo convertirà in forma leggibile dall'uomo.

Ho anche il sospetto che questo file ( /var/lib/NetworkManager/timestamps) sia utilizzato dal menu grafico Modifica connessioni per visualizzare l'ultima volta della connessione

inserisci qui la descrizione dell'immagine

Il problema è che se sei ancora connesso a un punto di accesso, la modalità GUI continua a nownon mostrare , l'ora in cui è stata stabilita la connessione per ultima


Dove trovo il file? :) Controlla anche l'ultima volta che la macchina è stata connessa a Internet o l'ultima volta che la macchina è stata connessa a una rete? Infine, funziona dopo?
kos

@kos apparentemente che va ancora nel syslog. Cercherò un po 'di più e, se trovo qualcosa, aggiornerò la mia risposta.
Sergiy Kolodyazhnyy,

Ok ho controllato man NetworkManager.conf, il file è /etc/NetworkManager/NetworkManager.conf; funzionerà solo dopo aver abilitato la registrazione nel demone, ma sfortunatamente devo verificarlo in seguito supponendo che la macchina non sia stata configurata per questo. Comunque +1 per la kern.logsoluzione e per la prima soluzione che potrebbe essere utile in altri casi
kos

2
@kos In modo che il file contenga hex-string = epoch-timestamp. le stringhe esadecimali sono punti di accesso. i timestamp sono il momento più recente della connessione. Prova qui la mia versione di awk, ho modificato la mia risposta
Sergiy Kolodyazhnyy il

2
@DeadChex Ero fuori di un anno :) Corretto già
Sergiy Kolodyazhnyy

6

Puoi controllare il file /var/log/syslogche verrà visualizzato l'ultima volta che ti sei connesso a una rete.


Esempio

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

È possibile eseguire un comando grep per estrarre solo ciò che è necessario dal registro

< /var/log/syslog grep DHCPREQUEST 

1
+1, sperando ancora in un modo per controllare l'ultima volta che è stato collegato a Internet. Se non dovesse succedere nulla entro oggi, accetterò questa risposta. Tuttavia, vorrei suggerirti una soluzione un po 'più user-friendly come < /var/apt/syslog grep DHCPREQUESTo variazioni.
kos,

1
DHCPREQUESTnon è affidabile. Sono online dal pomeriggio e da quando ho ricevuto molte richieste DHCP.
AB

@Kos sembra che tu abbia erroneamente inserito apt al posto del log nel tuo commento.
Sri

@Sri In effetti, è stato un errore. Fortunatamente OP non è caduto per questo!
kos,

5

Controllare CONNECTED_GLOBALdopo che abbiamo trovato link connectedin/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

Non sudoce n'è bisogno nel primo, tuttavia nessuno di questi funziona, penso che sia dovuto al POSIX [[:space:]]. Quale versione di awkstai utilizzando?
kos

@kos Ups, sudorimosso. GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)
AB

Ok ora funziona :). +1
kos

@kos I need my %;) Se c'è un output nella riga sottostante
AB

1
Non mi piace %. Tutto tranne questo è perfetto!
Helio,

2

Se non trovi il modo "giusto" per farlo, puoi sempre fabbricare il tuo!

La seguente funzione bash ti dirà se sei online (su Internet) o no.

Dovresti solo scrivere uno script che lo chiama (in un ciclo e quindi si ferma) e registra l'ultima data e ora su un file (sovrascrittura, quindi ha solo l'ultimo valore).

Dovresti aggiungere codice al loop in modo che controlli non appena viene inizialmente chiamato e registra (quindi il tuo stato iniziale è impostato correttamente).

Dopodiché, accederai nuovamente solo quando lo stato diventa offline e quando diventa online dopo essere stato offline. È più facile codificare che spiegare. ;)

Ciò sarebbe limitato in termini di accuratezza da quanto tempo utilizzi un loop (sleep) nel loop (per evitare che sia un loop molto stretto che potrebbe consumare troppe risorse di sistema). Inoltre, sarebbe ignaro di tutto ciò che accade prima che venga avviato o quando non è in esecuzione.

Lo script stesso potrebbe essere avviato (come processo in background ( &alla fine dell'invocazione), possibilmente con a nohupper mantenerlo in esecuzione se termina il processo padre) quando l'utente accede eseguendolo dal file $ HOME / .profile, avviandolo con l'utilità di avvio automatico del desktop (KDE o Gnome), da un processo cron che controlla periodicamente per vedere se non è già in esecuzione, o anche da qualsiasi sistema di avvio che hai (init / systemd / ecc., se sai abbastanza da fare quella.)

Quando non riesci a trovare qualcosa del genere che fa esattamente quello che vuoi, spesso non è troppo difficile scrivere il tuo script per farlo ed eseguirlo come un demone in background.

È consigliabile eseguirlo da un normale account utente, se possibile, a meno che non lo si codifichi in un linguaggio robusto come C o Python, poiché gli script di shell in esecuzione con privilegi di root spesso comportano rischi per la sicurezza.

Questo approccio ha un altro problema. A volte un ping si interrompe dando un falso stato offline.

Ho uno script completo, offline_alert , che fa praticamente il contrario di quello che vuoi - mi avvisa quando vado offline - ma il codice potrebbe rivelarsi utile. Ha una migliore funzione offline che tenta di ridurre i falsi positivi dai timeout del 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
}

2

Un modo per controllare qualsiasi registro di servizio / demone che inoltra su Internet per funzionare. Ad esempio aggiornamenti NTP (Network Time Protocol).

Vedere dpkg -L ntpdateper gli hook di stato della rete

Anche se ho controllato il suo registro per il desktop Ubuntu, il suo aggiornamento viene eseguito ogni volta che si collega la rete e continua a provare dopo un breve ritardo se l'ultimo aggiornamento fallisce. Si collega ntp.ubuntu.com.

(Nota, ho aggiunto la prima colonna nell'output per i miei commenti)

$ 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

Confermo che è installato per impostazione predefinita per Ubuntu 14.04 LTS 64 bit edizioni desktop e server.

L'ho provato in VM, mostra solo il tempo in cui si connette o si riconnette (con Internet disponibile). Non quello che vuoi (l'ultima volta è stato collegato)

Nota, syslog è un registro di rotazione, se vuoi cercare tutti i registri anche quelli compressi vecchi, usa zgrep

zgrep -ih ntpdate /var/log/syslog* | sort -bn -k2

Sembra buono, tuttavia puoi confermare che è abilitato di default almeno su Ubuntu Desktop? Non posso provarlo personalmente in questo momento, ma io davvero farlo domani
kos

1
Non eliminarlo, è utile ed è buono per il mio ambito, se ho capito che riporterà l'ultima volta che è stata stabilita una connessione (più o meno) persistente, quindi se lascio la macchina connessa per 2 giorni, segnalerà la data e l'ora in cui è stata stabilita l'ultima connessione (ovvero 2 giorni prima) giusto? Solo l'ultima cosa, cosa succede quando qualcuno si disconnette dalla rete e si riconnette, diciamo, 5 minuti dopo? Il controllo NTP viene eseguito di nuovo? Oppure esiste una sorta di soglia dopo l'ultimo controllo NTP prima dell'esecuzione di un nuovo controllo NTP?
kos,

1
@kos, non ti confondere, ntpdateè installato di default ma non ntpd/ openntpddaemon / service che viene fornito in pacchetti separati. Per verificare che cambi la data e l'ora in una sbagliata, disconnetti e riconnetti.
user.dz,

1
@kos, ntpdatepotrebbe essere usato cronper aggiornare periodicamente il tempo, avrà gli stessi risultati dell'esecuzione di un servizio (ntpd / openntpd). Ma stai cercando una configurazione predefinita e nessun sintonizzazione aggiuntiva, giusto?
user.dz,

1
Scusa, ho letto male. Sì, stavo cercando qualcosa da usare su una macchina non configurata. Ok, questo funziona per me, lascerò comunque aperta la domanda, forse qualcuno troverà una risposta killer. Grazie! È un grande passo avanti. Comunque tieni presente che quei registri ruotano duramente, forse vuoi aggiungerlo alla tua risposta.
kos,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.