ネットワークインターフェイスの稼働時間に関する情報を取得するにはどうすればよいですか?


8

私はUbuntuマシンとDebianマシンを持っています。

どちらの場合も、ネットワークインターフェイスが接続されている時間を確認できるようにしたいと思います。(つまり、IPなどを取得するネットワークに接続されています。ケーブルの物理的な状態ではありません)。秒単位の日付または日付+最後の変更以降の時間または同様のもの。

今のところ、タスクを実行するための小さなスクリプトを作成しましたが、これを確認するより一般的な方法があるはずです。/ procなどにあるプログラムまたは何か。

私のスクリプト:

#!/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
物理的なケーブル接続以外に、「ネットワークに接続されている」というようなものはありません。NICにIPアドレスを割り当てても、ネットワークの状態を示すものではありません。NICのネットワーク接続を確認する場合は、NICをアクティブに監視する必要があります(たとえば、定期的にpingを別のターゲットに送信するか、永続的なTCP接続を行うことにより)。
Der Hochstapler 2013

ええと、ルーターが再起動すると(約1分かかります)、NICのIPが削除され、再度割り当てられます(NetworkManagerによって)。私のiMacも似たようなことをします。私が本当に知りたいのは、ルータが再起動したときです。iMacとLinuxのログで、いつ再割り当てされたかを確認できますが、NetworkManagerのようなものがなければ、IPが割り当てられていると思いますか?多分私は代わりにNetworkManagerをよく見るべきです。ありがとうございました。
StefanLithén2013

1
アイム仮定 NetworkManagerの(または他の成分)を行うが、アクティブな接続上で監視すること。接続が切断されると、ゲートウェイ(ルーター)の可用性が決定され、接続がダウンしていることが検出されると、DHCPを介して割り当てられたIPアドレスが解放される可能性があります。または、ゲートウェイが再び使用可能になるのを待ってから、IPアドレスの再割り当てを要求します。いずれにせよ、この質問ip monitor(とりわけ)の使用を提案しているので、一見の価値があるかもしれません。
Der Hochstapler 2013

1
スクリプトを配置する/etc/dhcp3/dhclient-enter-hooks.d/こともオプションになる可能性があります。しかし、それがどのように機能するかを正確に説明するのに十分な情報が見つかりません。
Der Hochstapler 2013

ルーターが再起動した場合、ルーターがネットワークにどのような影響を与えているかを確認する必要があります。NASを使用していますが、ケーブルを取り外すと、一連のビープ音が鳴ります。現在、サーバーに接続するクロスケーブルがあります。サーバーを再起動すると、NASがリンクを失い、異音が発生します。あなたが説明していることから、IPパケットについては本当に気にしていませんし、ケーブルがコンピューターのNICポートに接続されているかどうかも気にしていませんが、リンクについては知りたいと思っています。Media Senseと呼ばれるテクノロジーを使用して検出できます。(この機能は「メディア状態」と呼ばれることもあります。)その変更のロギングを試みてください。
TOOGAM

回答:


1

Linuxカーネルは、インターフェースの開始時刻を追跡しません。

その中struct net_deviceにはjiffies、インターフェースが開始されたときの値を保持するフィールドはありません。

管理できる最善の方法は、ユーザー空間のスクリプトとログから推測される方法です。


1

私のマシンでdhclientは、ネットワークに再接続するとNetworkManagerによって再起動されます。では、dhclientプロセスの開始時間を使用できますか?

ps -o start,cmd $(pgrep dhclient)

0

これが私の変種です(あなたに非常に似ています):

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

1116-IPがリースされてから数秒。


0

これは、秒単位であなたが望むことをするはずです:

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

どの出力:

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!

理論:タイムスタンプを取得し、ゲートウェイ(経由)がまだ稼働してSTARTTIMEいるINTERVALかどうかをすべてテストip route showします。稼働している場合は、元のタイムスタンプから現在のタイムスタンプを差し引いて印刷します。そうでない場合は、終了して、ホストが接続をドロップしたことを示します。各コマンドオプションの説明については、マンページを参照してください。1秒ごとに出力したくない場合は、を増やしINTERVALます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.