Как я могу надежно проверить, какой последний компьютер Ubuntu подключен к Интернету?

24

Как я могу надежно проверить, что последний раз, когда машина Ubuntu была подключена к Интернету?

В случае, если это невозможно, способ проверки последнего подключения компьютера Ubuntu к сети будет достаточно хорошим.

    
задан kos 21.06.2015 в 15:47
источник

5 ответов

28

Метод 1

Даже несмотря на то, что NetworkManager.conf позволяет вести журнал, который, по-видимому, все еще входит в syslog. Однако kern.log также имеет его.

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

Метод 2

Я обнаружил, что NetworkManager сохраняет последнее время соединения и сортируется в файле /var/lib/NetworkManager/timestamps в формате времени unix epoch (секунды с 1970 года). Шахта выглядит так:

$ 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

Чтобы отобразить последнюю запись

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

Awk будет искать наибольшее время эпохи (другими словами, последнее), а дата преобразует его в понятную для человека форму.

Я также подозреваю, что этот файл ( /var/lib/NetworkManager/timestamps ) используется графическим меню «Редактировать соединения», чтобы отображать последний раз подключения

Проблема заключается в том, что если вы все еще подключены к точке доступа, GUI-способ продолжает показывать now нет, время, когда соединение было установлено последним

    
ответ дан Sergiy Kolodyazhnyy 21.06.2015 в 16:05
6

Вы можете проверить файл /var/log/syslog , который отобразит последний раз, когда вы подключились к сети.

<ет> Пример

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

Вы можете запустить команду grep , чтобы вытащить только то, что вам нужно, из журнала

< /var/log/syslog grep DHCPREQUEST 
    
ответ дан Mark Kirby 21.06.2015 в 15:59
5

Проверить CONNECTED_GLOBAL после того, как мы нашли link connected в /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
    
ответ дан A.B. 21.06.2015 в 16:16
2

Если вы не найдете «правильный» способ сделать это, вы всегда можете создать свой собственный!

Следующая функция bash сообщит вам, если вы в сети (в Интернете) или нет.

Вам просто нужно написать сценарий, который вызывает его (в цикле, а затем спит), и записывает последнюю дату и время в файл (переписывание, поэтому оно имеет только самое последнее значение).

Вам нужно будет добавить код в цикл, чтобы он проверял, как только он изначально вызывается и регистрируется (поэтому ваше начальное состояние установлено правильно).

После этого вы будете только регистрироваться снова, когда состояние сначала переходит в автономный режим и когда он впервые появляется в сети после того, как он отключен. Кода легче кодировать, чем объяснять. ;)

Это будет ограничено в точности тем, насколько долго вы используете задержку (спящий режим) в цикле (чтобы он не был очень плотным циклом, который мог бы потреблять слишком много системных ресурсов). Также было бы не знать о том, что происходит раньше он запускается или когда он не работает.

Сам сценарий можно запустить (в качестве фонового задания ( & в конце вызова), возможно, с nohup , чтобы он работал, если его родительский процесс завершается), когда ваш пользователь входит в систему, запустив его из файла $ HOME / .profile, начиная с его утилиты автозапуска рабочего стола (KDE или Gnome), из задания cron, которое периодически проверяет, не запущено ли оно или даже из любой системы запуска (init / systemd / и т. д., если вы знаете достаточно, чтобы сделать это.)

Если вы не можете найти что-то вроде этого, которое делает именно то, что вы хотите, часто не так сложно написать собственный скрипт, чтобы сделать это, и запустить его как демон в фоновом режиме.

Лучше всего запускать его из обычной учетной записи пользователя, если это возможно - если вы не закодируете его на надежном языке, таком как C или Python, потому что сценарии оболочки, работающие с привилегиями root, часто представляют угрозу безопасности.

У этого подхода есть другая проблема. Иногда ping тайм-аут дает вам ложное состояние офлайн.

У меня есть полный скрипт, offline_alert , который в значительной степени делает противоположное тому, что вы хотите - предупреждает меня когда я выхожу в автономный режим, но код может оказаться полезным. Он имеет лучшую автономную функцию, которая пытается уменьшить ложные срабатывания от тайм-аутов 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 25.06.2015 в 09:43
2

Один из способов проверить любой журнал службы / демона, который ретранслирует в Интернете для работы. Например, обновления NTP (Network Time Protocol).

См. dpkg -L ntpdate для сетевых перехватов состояния

Хорошо, поскольку я проверил его журнал для рабочего стола Ubuntu, его обновление запускается всякий раз, когда происходит сеть, и продолжайте попытки после короткой задержки, если последнее обновление не удалось. Он связывает ntp.ubuntu.com .

(Заметьте, я добавил первый столбец в вывод для моих комментариев)

$ 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

Я подтверждаю, что он установлен по умолчанию для Ubuntu 14.04 LTS 64Bit desktop & amp; серверных выпусков.

Я попробовал в VM, он показывает только время, когда он подключается или переподключается (с доступом в Интернет). Не то, что вы хотите (последний раз был подключен)

Примечание. syslog - это журнал поворота, если вы хотите искать все журналы, даже старые сжатые, используйте zgrep

zgrep -ih ntpdate /var/log/syslog* | sort -bn -k2
    
ответ дан user.dz 12.07.2015 в 00:03