Como posso verificar com segurança qual foi a última vez que uma máquina Ubuntu foi conectada à Internet?

24

Como posso verificar com segurança qual foi a última vez que uma máquina Ubuntu foi conectada à Internet?

Caso isso não seja possível, uma maneira de verificar a última vez que uma máquina Ubuntu foi conectada a uma rede seria boa o suficiente.

    
por kos 21.06.2015 / 15:47

5 respostas

28

Método 1

Mesmo que o NetworkManager.conf permita o registro, isso aparentemente continua no syslog. No entanto, kern.log também tem isso.

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

Método 2

Descobri que o NetworkManager armazena o tempo da última conexão e é classificado no arquivo /var/lib/NetworkManager/timestamps , no formato de hora unix epoch (segundos desde 1970). O meu parece assim, por exemplo:

$ 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 a última entrada

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

O awk pesquisará o maior horário de época (em outras palavras, o mais recente) e a data converterá para o formato legível.

Suspeito também que este arquivo ( /var/lib/NetworkManager/timestamps ) é usado pelo menu gráfico Editar Conexões para exibir a última hora da conexão

O problema é que, se você ainda estiver conectado a um ponto de acesso, a maneira da GUI continuará mostrando now não, a hora em que a conexão foi estabelecida pela última vez

    
por Sergiy Kolodyazhnyy 21.06.2015 / 16:05
6

Você pode verificar o arquivo /var/log/syslog que exibirá a última vez que você se conectou a uma rede.

Exemplo

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

Você pode executar um comando grep para extrair apenas o que precisa do log

< /var/log/syslog grep DHCPREQUEST 
    
por Mark Kirby 21.06.2015 / 15:59
5

Verifique CONNECTED_GLOBAL depois de encontrar link connected em /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
    
por A.B. 21.06.2015 / 16:16
2

Se você não encontrar a maneira "certa" de fazer isso, você pode sempre fabricar o seu próprio!

A seguinte função bash informará se você está on-line (na Internet) ou não.

Você teria apenas que escrever um script que o chamasse (em um loop e depois adormecesse) e registrasse a última data e hora em um arquivo (sobrescrevendo, de modo que tivesse apenas o valor mais recente).

Você teria que adicionar código ao loop para que ele fosse verificado assim que fosse inicialmente chamado e registrado (assim seu estado inicial é definido corretamente).

Depois disso, você só registraria novamente quando o estado ficar offline primeiro e quando estiver on-line pela primeira vez depois de ficar offline. É mais fácil codificar do que explicar. ;)

Isso seria limitado em precisão por quanto tempo um atraso (suspensão) você usa no loop (para evitar que seja um loop muito apertado que pode consumir muitos recursos do sistema.) Também não saberia o que quer que aconteça antes é iniciado ou quando não está em execução.

O próprio script pode ser iniciado (como uma tarefa em segundo plano ( & no final da chamada), possivelmente com nohup para mantê-lo em execução se o processo pai for encerrado) quando o usuário fizer login executando-o do seu arquivo $ HOME / .profile, iniciando-o com o utilitário de autoinicialização de desktop (KDE ou Gnome), a partir de uma tarefa cron que verifica periodicamente se ainda não está em execução ou até mesmo de qualquer sistema de inicialização (init / systemd / etc, se você souber o suficiente para fazer isso.)

Quando você não consegue encontrar algo assim que faz exatamente o que você quer, muitas vezes não é muito difícil escrever seu próprio script para executá-lo e executá-lo como um daemon em segundo plano.

É melhor executá-lo a partir de uma conta de usuário regular, se possível - a menos que você o codifique em uma linguagem robusta como C ou Python - porque os scripts de shell com privilégios de root geralmente representam riscos de segurança.

Essa abordagem tem outro problema. Às vezes, um ping demora a fornecer um status offline falso.

Eu tenho um script completo, offline_alert , que praticamente faz o oposto do que você quer - alerta-me quando fico offline - mas o código pode ser útil. Ele tem uma função offline melhor que tenta reduzir os falsos positivos dos tempos limite 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
}
    
por Joe 25.06.2015 / 09:43
2

Uma maneira de verificar qualquer serviço / log de daemon que retransmite a Internet para o trabalho. Por exemplo, atualizações NTP (Network Time Protocol).

Veja dpkg -L ntpdate para ganchos de estado de rede

Bem, como eu verifiquei seu log para o desktop Ubuntu, sua atualização é executada sempre que a rede estiver ativa e continue tentando após um pequeno atraso se a última atualização falhar. Ele conecta ntp.ubuntu.com .

(nota, eu adicionei a primeira coluna na saída para meus comentários)

$ 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

Eu confirmo que ele é instalado por padrão para o Ubuntu 14.04 LTS 64Bit desktop & edições do servidor.

Experimentei na VM, só mostra o tempo que conecta ou reconecta (com a Internet disponível). Não é o que você quer (a última vez foi conectada)

Note que o syslog é um log rotativo, se você quiser pesquisar todos os registros, mesmo os antigos compactados, use zgrep

zgrep -ih ntpdate /var/log/syslog* | sort -bn -k2
    
por user.dz 12.07.2015 / 00:03