네트워크 인터페이스 가동 시간에 대한 정보는 어떻게 얻을 수 있습니까?


8

우분투 머신과 데비안 머신이 있습니다.

둘 다 네트워크 인터페이스가 얼마나 오랫동안 연결되어 있는지보고 싶습니다. (즉, IP를 얻는 네트워크에 연결됩니다. cabel의 물리적 상태가 아닙니다). 마지막 변경 이후의 가동 시간 (초 또는 날짜 + 시간)

현재로서는 작업을 수행하는 작은 스크립트를 작성했지만 더 일반적인 방법으로 확인해야합니다. / 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의 네트워크 연결을 확인하려면 주기적으로 핑을 다른 대상에 보내거나 지속적인 TCP 연결을 통해 활발하게 모니터링해야합니다.
Der Hochstapler

그렇다면 라우터가 재부팅 될 때 (약 1 분 소요) NIC가 IP를 제거한 다음 다시 할당합니다 (NetworkManager에 의해). 나의 iMac은 비슷한 것을합니다. 내가 정말로 알고 싶은 것은 라우터가 재부팅되었을 때입니다. iMac 및 Linux의 로그에서 다시 할당 된 시점을 볼 수 있지만 NetworkManager와 같은 것이 없으면 IP가 할당 된 것 같습니다. 어쩌면 NetworkManager를 자세히 살펴 봐야 할 것입니다. 감사합니다.
Stefan Lithén

1
가정 이 네트워크 매니저 (또는 다른 구성 요소) 활성 연결에 대한 모니터링을 수행합니다. 연결이 끊어지면 게이트웨이 (라우터)의 가용성이 결정되고 다운 된 것을 감지하면 DHCP를 통해 할당 된 IP 주소가 해제 될 수 있습니다. 또는 게이트웨이를 다시 사용할 수있을 때까지 기다린 다음 IP 주소를 다시 할당하도록 요청할 수 있습니다. 어느 쪽이든, 이 질문ip monitor(다른 것들 중에서) 사용을 제안 하지만, 가치가 있습니다.
Der Hochstapler

1
스크립트를 삽입하는 /etc/dhcp3/dhclient-enter-hooks.d/것도 옵션 일 수 있습니다. 그러나 나는 그것이 정확히 어떻게 작동하는지 말할 충분한 정보를 찾지 못했습니다.
Der Hochstapler

라우터가 재부팅되면 네트워크에 어떤 영향을 미치는지 확인할 수 있습니다. 케이블을 분리 할 때 경고음이 울리는 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
~ #

IP 임대 후 1116 초


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게이트웨이 (via ip route show)가 여전히 작동 중인지 여부 를 테스트 하십시오. 그렇다면 현재 타임 스탬프를 원본에서 빼고 인쇄하십시오. 그렇지 않은 경우 종료하고 호스트 연결이 끊 겼음을 표시하십시오. 각 명령 옵션에 대한 설명은 맨 페이지를 참조하십시오. 매초마다 출력하지 않으려면을 늘리십시오 INTERVAL.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.