Wie kann ich Informationen zur Verfügbarkeit einer Netzwerkschnittstelle abrufen?


8

Ich habe eine Ubuntu-Maschine und eine Debian-Maschine.

Auf beiden möchte ich sehen können, wie lange eine Netzwerkschnittstelle verbunden ist. (Das heißt, mit einem Netzwerk verbunden, das eine IP usw. erhält. Nicht der physische Zustand eines Kabels). Betriebszeit in Sekunden oder Datum + Uhrzeit seit der letzten Änderung oder Ähnlichem.

Bis jetzt habe ich ein kleines Skript geschrieben, um die Aufgabe zu erledigen, aber es scheint, dass es einen allgemeineren Weg geben sollte, dies zu überprüfen. Ein Programm oder etwas in / proc oder so.

Mein Skript:

#!/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

1
Es gibt keine Möglichkeit, "mit einem Netzwerk verbunden zu sein", außer eine physische Kabelverbindung zu haben. Die Zuweisung einer IP-Adresse zu einer Netzwerkkarte ist kein Indikator für einen Netzwerkstatus. Wenn Sie die Netzwerkkonnektivität für eine Netzwerkkarte ermitteln möchten, müssen Sie diese aktiv überwachen (z. B. indem Sie regelmäßig Pings an ein anderes Ziel senden oder eine dauerhafte TCP-Verbindung haben).
Der Hochstapler

Hum, na dann, wenn mein Router neu startet (dauert ungefähr 1 Minute), wird meiner IP-Adresse die IP entfernt und dann erneut zugewiesen (byt NetworkManager). Mein iMac macht etwas Ähnliches. Was ich wirklich wissen möchte, ist, wann der Router neu gestartet wurde. In den Protokollen in meinem iMac und unter Linux kann ich sehen, wann es wieder neu zugewiesen wurde, aber ich denke, ohne etwas wie NetworkManager hätte es immer noch seine IP zugewiesen? Vielleicht sollte ich mir stattdessen NetworkManager genauer ansehen. Vielen Dank.
Stefan Lithén

1
Ich gehe davon aus, dass NetworkManager (oder eine andere Komponente) die Überwachung aktiver Verbindungen durchführt. Wenn eine Verbindung unterbrochen wird, wird die Verfügbarkeit Ihres Gateways (Routers) ermittelt. Sobald festgestellt wird, dass die Verbindung unterbrochen ist, wird möglicherweise die über DHCP zugewiesene IP-Adresse freigegeben. Oder es wartet darauf, dass das Gateway wieder verfügbar ist, und fordert dann die Neuzuweisung der IP-Adresse an. In jedem Fall schlägt diese Frage vor, ip monitor(unter anderem) zu verwenden, es könnte einen Blick wert sein.
Der Hochstapler

1
Vielleicht /etc/dhcp3/dhclient-enter-hooks.d/könnte auch das Einfügen eines Skripts eine Option sein. Aber ich finde nicht genug Informationen, um zu sagen, wie genau es funktioniert.
Der Hochstapler

Wenn Ihr Router neu gestartet wird, möchten Sie möglicherweise sehen, welche Auswirkungen er auf das Netzwerk hat. Ich habe einen NAS, der eine Reihe von Signaltönen ausgibt, wenn ich das Kabel davon trenne. Derzeit wird es über ein Crossover-Kabel an einen Server angeschlossen. Wenn ich den Server neu starte, verliert der NAS die Verbindung und macht Geräusche. Nach Ihrer Beschreibung interessieren Sie sich nicht wirklich für IP-Pakete oder dafür, ob ein Kabel an den NIC-Anschluss Ihres Computers angeschlossen ist, aber Sie möchten etwas über die Verbindung wissen. Dies kann mithilfe der Technologie namens Media Sense erkannt werden. (Die Funktion wird möglicherweise auch häufig als "Medienstatus" bezeichnet.) Versuchen Sie, Änderungen daran zu protokollieren.
TOOGAM

Antworten:


1

Der Linux-Kernel verfolgt nicht den Zeitpunkt, zu dem eine Schnittstelle gestartet wird.

Innerhalb struct net_devicegibt es kein Feld, das einen jiffiesWert für den Start einer Schnittstelle enthält.

Das Beste, was Sie verwalten können, ist eine aus Userspace-Skripten und -Protokollen abgeleitete Methode.


1

Auf meinem Computer dhclientwird NetworkManager beim erneuten Herstellen einer Verbindung zum Netzwerk neu gestartet. Vielleicht können Sie die Startzeit des dhclientProzesses verwenden?

ps -o start,cmd $(pgrep dhclient)

0

Hier ist meine Variante (sehr ähnlich zu deiner):

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

1116 - Sekunden nach dem Leasing von IP.


0

Dies sollte in Sekundenschnelle tun, was Sie wollen:

#!/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!"

Welche Ausgänge:

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!

Theorie: Holen Sie sich einen Zeitstempel STARTTIMEund testen Sie dann, INTERVALob das Gateway (via ip route show) noch aktiv ist. Wenn ja, subtrahieren Sie den aktuellen Zeitstempel vom Original und drucken Sie ihn aus. Wenn nicht, beenden Sie und geben Sie an, dass der Host seine Verbindung getrennt hat. In den Manpages finden Sie Erläuterungen zu den einzelnen Befehlsoptionen. Wenn Sie nicht jede Sekunde eine Ausgabe wünschen, erhöhen Sie diese INTERVAL.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.