Bagaimana saya bisa mendapatkan informasi tentang uptime antarmuka jaringan?

8

Saya memiliki mesin Ubuntu dan mesin Debian.

Pada keduanya saya ingin dapat melihat berapa lama antarmuka jaringan telah terhubung. (Yaitu, terhubung ke jaringan yang mendapatkan IP dll. Bukan keadaan fisik dari cabel). Waktu aktif dalam detik atau tanggal + waktu sejak perubahan terakhir atau yang serupa.

Sampai sekarang saya telah menulis skrip kecil untuk melakukan tugas tetapi tampaknya harus ada cara yang lebih umum untuk memeriksa ini. Suatu program atau sesuatu di / proc atau semacamnya.

Skrip saya:

#!/bin/bash

if [ -f /etc/os-release ]; then

    if TMP=$(grep -i 'ubuntu' /etc/os-release); then

        # we are on ubuntu
        for i in $(/bin/ls -1 /var/log/syslog* | sort -r); do
                TMP=$(zgrep '(eth0): device state change: ip-config -> activated' "$i" | tail -1 | sed "s/ "$(hostname)"/*/")
        done

        WHEN=$(echo "$TMP" | cut -f1 -d '*')
        SEC=$(echo "$(date +%s) - $(date -d "$WHEN" +%s)" | bc)
        echo "Last link up: $WHEN ($SEC seconds ago)."

    elif TMP=$(grep -i 'debian' /etc/os-release); then

        # we are on debian
        TMP=$(grep 'eth0: link up' /var/log/syslog* | tail -1 | cut -f2- -d':' | sed "s/ "$(uname -n)" kernel:/*/")
        WHEN=$(echo "$TMP" | cut -f1 -d '*')
        SEC=$(echo "$(date +%s) - $(date -d "$WHEN" +%s)" | bc)
        echo "Last link up: $WHEN ($SEC seconds ago)."

    fi

else
    echo "File /etc/os-release not found."
fi
Stefan Lithén
sumber
1
Tidak ada yang namanya "terhubung ke jaringan" selain memiliki koneksi kabel fisik. Memiliki alamat IP yang ditetapkan untuk NIC bukan merupakan indikator status jaringan. Jika Anda ingin menentukan konektivitas jaringan untuk NIC, Anda harus memantaunya secara aktif (misalnya, dengan mengirim ping berkala ke target lain atau memiliki koneksi TCP yang persisten).
Der Hochstapler
Hum, yah ketika router saya reboot (membutuhkan waktu sekitar 1 menit), NIC saya telah IP-nya dihapus dan kemudian dipindahkan lagi (by NetworkManager). iMac saya melakukan hal serupa. Yang saya benar-benar ingin tahu adalah ketika router reboot. Dalam log di iMac saya dan di linux saya bisa melihat ketika itu dipindahkan lagi, tapi saya kira tanpa sesuatu seperti NetworkManager itu masih akan memiliki IP yang ditugaskan? Mungkin saya harus melihat lebih dekat pada NetworkManager. Terima kasih.
Stefan Lithén
1
Saya berasumsi bahwa NetworkManager (atau komponen lain) melakukan pemantauan pada koneksi aktif. Jika koneksi terputus, itu menentukan ketersediaan gateway (router) Anda, setelah mendeteksi bahwa itu turun, itu mungkin melepaskan alamat IP yang ditetapkan melalui DHCP. Atau mungkin menunggu gateway tersedia lagi dan kemudian meminta alamat IP untuk dipindahkan. Either way, pertanyaan ini mengusulkan penggunaan ip monitor(antara lain), mungkin layak untuk dilihat.
Der Hochstapler
1
Mungkin menempatkan skrip /etc/dhcp3/dhclient-enter-hooks.d/juga bisa menjadi pilihan. Tetapi saya tidak menemukan cukup informasi untuk mengatakan bagaimana tepatnya itu bekerja.
Der Hochstapler
Jika router Anda reboot, Anda mungkin ingin melihat efeknya pada jaringan. Saya memiliki NAS yang membuat serangkaian bunyi bip saat saya mencabut kabel darinya. Saat ini, ia memiliki kabel crossover yang menghubungkannya ke server. Jika saya me-reboot server, NAS kehilangan tautan, dan membuat suara. Dari apa yang Anda jelaskan, Anda tidak terlalu peduli tentang paket IP, atau apakah kabel dicolokkan ke port NIC komputer Anda, tetapi Anda ingin tahu tentang tautan. Itu bisa dideteksi menggunakan teknologi yang disebut Media Sense. (Fitur ini mungkin juga sering disebut "Media State".) Coba masuk perubahan itu.
TOOGAM

Jawaban:

1

Kernel Linux tidak melacak waktu antarmuka dimulai.

Di dalam struct net_devicetidak ada bidang yang memegang jiffiesnilai ketika antarmuka dimulai.

Yang terbaik yang dapat Anda kelola adalah beberapa metode yang disimpulkan dari skrip dan log userspace.

suprjami
sumber
1

Di mesin saya dhclientdihidupkan ulang oleh NetworkManager ketika menghubungkan kembali ke jaringan. Jadi mungkin Anda bisa menggunakan waktu mulai dhclientproses?

ps -o start,cmd $(pgrep dhclient)
hfs
sumber
0

Ini varian saya (sangat mirip dengan Anda):

~ # expr $(echo $(date +%s) - $(date -d "`grep 'eth0: leased' /var/log/messages | tail -1 | awk '{print $1, $2, $3}'`" +%s))
1116
~ #

1116 - detik setelah IP disewa.

September
sumber
0

Ini akan melakukan apa yang Anda inginkan, dalam hitungan detik:

#!/bin/bash
STARTTIME=`date +%s`
GATEWAY=`ip r s | grep default | cut -d' ' -f3`
INTERVAL=1
while ping -c 1 -W 1 ${GATEWAY} >/dev/null 2>&1; 
do
  awk -v STIME="$STARTTIME" 'BEGIN {
   DTIME=systime()-STIME;
   printf "Seconds of uptime since %s: %d\n",
     strftime("%a %b %e %H:%M:%S %Z %Y",STIME),
     DTIME; }';
  sleep $INTERVAL;
done

echo "HOST DROPPED!"

Output yang mana:

user@host $ sh test-script.sh
Seconds of uptime since Sat Nov 15 01:14:26 EST 2014: 0
Seconds of uptime since Sat Nov 15 01:14:26 EST 2014: 1
Seconds of uptime since Sat Nov 15 01:14:26 EST 2014: 2
Seconds of uptime since Sat Nov 15 01:14:26 EST 2014: 3
Seconds of uptime since Sat Nov 15 01:14:26 EST 2014: 4
HOST DROPPED!

Teori: Dapatkan cap waktu STARTTIME, lalu uji setiap INTERVALapakah gateway (melalui ip route show) masih naik, jika demikian, kurangi cap waktu saat ini dari yang asli dan cetak. Jika tidak, keluar dan tunjukkan bahwa host telah menjatuhkan koneksinya. Lihat halaman manual untuk penjelasan masing-masing opsi perintah. Jika Anda tidak ingin output setiap detik, naikkan INTERVAL.

Glallen
sumber