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

24

Como posso verificar com segurança qual é 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.

kos
fonte

Respostas:

28

Método 1

Embora o NetworkManager.conf permita o log, isso aparentemente ainda entra no syslog. No entanto, o kern.log também possui.

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 último horário da conexão e é classificado em /var/lib/NetworkManager/timestampsarquivo, no formato de horário da época unix (segundos desde 1970). O meu se parece com isso, 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 entrada mais recente

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

O Awk procurará o maior período de época (em outras palavras, mais recente) e a data o converterá em formato legível por humanos.

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

insira a descrição da imagem aqui

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

Sergiy Kolodyazhnyy
fonte
Onde encontro o arquivo? :) Também verifica a última vez que o equipamento foi conectado à Internet ou a última vez que o equipamento foi conectado a uma rede? Por fim, isso funciona depois?
kos
@ kos aparentemente isso ainda entra no syslog. Vou pesquisar um pouco mais e, se encontrar algo, atualizarei minha resposta.
Sergiy Kolodyazhnyy
Ok, verifiquei man NetworkManager.conf, o arquivo é /etc/NetworkManager/NetworkManager.conf; isso funcionará somente depois de ativar o logon no daemon, mas infelizmente preciso verificar isso posteriormente, supondo que a máquina não tenha sido configurada para isso. Enfim +1 para a kern.logsolução e para a primeira solução que pode ser útil em outros casos
kos
2
@ kos Para que o arquivo contenha hex-string = epoch-timestamp. cadeias hexadecimais são pontos de acesso. epoch-timestamps são o último horário da conexão. Tente minha versão awk lá, eu editei a minha resposta
Sergiy Kolodyazhnyy
2
@DeadChex Eu estava de folga por um ano :) Já corrigido #
Sergiy Kolodyazhnyy
6

Você pode verificar o arquivo /var/log/syslogque será exibido na última vez em 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 obter apenas o que precisa do log

< /var/log/syslog grep DHCPREQUEST 
Mark Kirby
fonte
1
+1, ainda esperando uma maneira de verificar a última vez que ele foi conectado à Internet. Se nada acontecer hoje, aceitarei esta resposta. No entanto, gostaria de sugerir uma solução um pouco mais fácil de usar, como < /var/apt/syslog grep DHCPREQUESTvariações.
kos
1
DHCPREQUESTnão é confiável. Estou online desde a tarde e desde que recebi muitas solicitações de DHCP.
AB
@Kos parece que você colocou o apt por engano no lugar do log no seu comentário.
Sri
@ Sri De fato, isso foi um deslize. Felizmente, o OP não caiu nessa!
kos
5

Verifique CONNECTED_GLOBALdepois de encontrarmos link connectedem/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
fonte
Não há necessidade sudono primeiro, no entanto, nada disso está funcionando, acho que é por causa do POSIXly [[:space:]]. Qual versão awkvocê está executando?
kos
@kos Ups, sudoremovido. GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)
AB
Ok, agora está funcionando :). +1
kos
@kos eu preciso do meu %;) Se houver uma saída na linha abaixo
AB
1
Eu não gosto %. Tudo, mas isso é perfeito!
Helio
2

Se você não encontrar o caminho "certo" para fazer isso, sempre poderá fabricar o seu!

A função bash a seguir informa se você está online (na Internet) ou não.

Você apenas teria que escrever um script que o chamasse (em loop e depois inseja) e registre a última data e hora em um arquivo (sobrescrevendo, para que ele tenha apenas o valor mais recente).

Você precisaria adicionar código ao loop para que ele verifique assim que for chamado inicialmente e faça logon (para que seu estado inicial seja definido corretamente).

Depois disso, você só registraria novamente quando o estado ficar offline primeiro e quando ficar online depois de ficar offline. É mais fácil codificar do que explicar. ;)

Isso teria precisão limitada por quanto tempo um atraso (inatividade) você usa no loop (para impedir que ele seja um loop muito apertado que pode consumir muitos recursos do sistema.) Também não teria conhecimento do que acontece antes de ser iniciado ou quando não estiver em execução.

O script em si pode ser iniciado (como um trabalho em segundo plano ( &no final da invocação), possivelmente com um nohuppara mantê-lo em execução se o processo pai terminar) quando o usuário fizer login executando-o no seu arquivo $ HOME / .profile, iniciando-o com o utilitário de inicialização automática da área de trabalho (KDE ou Gnome), a partir de um trabalho cron que verifica periodicamente se já não está em execução ou mesmo de qualquer sistema de inicialização que você tenha (init / systemd / etc., se você souber o suficiente para fazer) aquele.)

Quando você não consegue encontrar algo assim que faça exatamente o que deseja, geralmente 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 comum, se possível - a menos que você o codifique em uma linguagem robusta como C ou Python - porque os scripts de shell executados com privilégios de root geralmente representam riscos à segurança.

Essa abordagem tem outro problema. Às vezes, o ping atinge o tempo limite, fornecendo a você um status offline falso.

Eu tenho um script completo, offline_alert , que praticamente faz o oposto do que você deseja - me alerta quando estou offline - mas o código pode ser útil. Possui uma função offline melhor que tenta reduzir falsos positivos de 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
}
Joe
fonte
2

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

Veja dpkg -L ntpdatepara ganchos de estado de rede

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

(Observe, 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

Confirmo que ele está instalado por padrão nas edições de desktop e servidor Ubuntu 14.04 LTS 64Bit.

Eu tentei na VM, mostra apenas o tempo em que ele se conecta ou se reconecta (com a Internet disponível). Não é o que você deseja (a última vez que foi conectada)

Observe que syslog é um log de rotação, se você deseja pesquisar todos os logs, mesmo os antigos compactados, use zgrep

zgrep -ih ntpdate /var/log/syslog* | sort -bn -k2
user.dz
fonte
Parece bom, no entanto, você pode confirmar se está ativado por padrão pelo menos no Ubuntu Desktop? Eu não posso testá-lo pessoalmente agora, mas eu vou de fato fazer isso amanhã
kos
1
Não exclua, é útil e é bom para o meu escopo. Se eu entendi isso relatará a última vez que uma conexão (mais ou menos) persistente foi estabelecida, por isso, se eu deixar a máquina conectada por 2 dias, ela informará a data e a hora em que a última conexão foi feita (ou seja, 2 dias antes), certo? Apenas a última coisa, o que acontece quando alguém se desconecta da rede e se reconecta, digamos, 5 minutos depois? A verificação NTP é executada novamente? Ou existe algum tipo de limite após a última verificação NTP antes de uma nova verificação NTP ser executada?
kos
1
@kos, não se confunda, ntpdateé instalado por padrão, mas não o ntpd/ openntpddaemon / service que vem em pacotes separados. Para verificar se a hora e a data estão incorretas, desconecte e reconecte.
user.dz
1
@kos, ntpdatepode ser usado cronpara atualizar o tempo periodicamente, ele terá os mesmos resultados que a execução de um serviço (ntpd / openntpd). Mas você está procurando uma configuração padrão e sem ajustes adicionais, certo?
user.dz
1
Desculpe, eu interpretei errado. Sim, eu estava procurando algo para usar em uma máquina não configurada. Ok, isso funciona para mim, deixarei a pergunta em aberto de qualquer maneira, talvez alguém tenha uma resposta matadora. Obrigado! É um grande passo à frente. De qualquer forma, lembre-se de que esses registros são difíceis, talvez você queira adicionar isso à sua resposta.
kos