ฉันจะรับข้อมูลเกี่ยวกับสถานะการออนไลน์ของเน็ตเวิร์กอินเตอร์เฟสได้อย่างไร


8

ฉันมีเครื่อง Ubuntu และเครื่อง Debian

ในทั้งสองฉันต้องการที่จะสามารถดูว่าระยะเวลาที่เชื่อมต่อเครือข่ายเชื่อมต่อ (นั่นคือเชื่อมต่อกับเครือข่ายเพื่อรับ 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
ไม่มีสิ่งเช่น "การเชื่อมต่อกับเครือข่าย" นอกเหนือจากการเชื่อมต่อสายเคเบิลทางกายภาพ การมีที่อยู่ IP ที่กำหนดให้กับ NIC ไม่ใช่ตัวบ่งชี้สถานะเครือข่าย หากคุณต้องการตรวจสอบการเชื่อมต่อเครือข่ายสำหรับ NIC คุณจะต้องตรวจสอบมันอย่างแข็งขัน (ตัวอย่างเช่นโดยส่งปิงเป็นระยะไปยังเป้าหมายอื่นหรือมีการเชื่อมต่อ TCP แบบถาวร)
Der Hochstapler

ครวญแล้วเมื่อเราเตอร์ของฉันรีบูต (ใช้เวลาประมาณ 1 นาที) NIC ของฉันมี IP ที่ถูกลบแล้วมอบหมายใหม่อีกครั้ง (byt NetworkManager) iMac ของฉันทำสิ่งที่คล้ายกัน สิ่งที่ฉันอยากรู้คือเมื่อเราเตอร์รีบูท ในบันทึกใน iMac ของฉันและใน linux ฉันสามารถดูได้เมื่อมันถูกกำหนดใหม่อีกครั้ง แต่ฉันเดาว่าไม่มีอะไรอย่าง NetworkManager มันจะยังคงมีการกำหนด IP หรือไม่ บางทีฉันควรมอง NetworkManager อย่างใกล้ชิดแทน ขอบคุณ.
Stefan Lithén

1
ฉันสมมติว่า NetworkManager (หรือส่วนประกอบอื่น) ทำการตรวจสอบการเชื่อมต่อที่ใช้งานอยู่ หากการเชื่อมต่อหยุดชะงักจะเป็นตัวกำหนดความพร้อมใช้งานของเกตเวย์ (เราเตอร์) เมื่อตรวจพบว่าการเชื่อมต่อหยุดทำงานก็อาจปล่อยที่อยู่ IP ที่กำหนดผ่าน DHCP หรืออาจรอให้เกตเวย์พร้อมใช้งานอีกครั้งจากนั้นขอให้ที่อยู่ IP ถูกกำหนดใหม่ ไม่ว่าจะด้วยวิธีใดคำถามนี้เสนอให้ใช้ip monitor(เหนือสิ่งอื่นใด) มันอาจคุ้มค่ากับการดู
Der Hochstapler

1
บางทีการวางสคริปต์/etc/dhcp3/dhclient-enter-hooks.d/อาจเป็นตัวเลือกก็ได้ แต่ฉันไม่พบข้อมูลเพียงพอที่จะบอกว่ามันทำงานอย่างไร
Der Hochstapler

หากเราเตอร์ของคุณเริ่มต้นใหม่คุณอาจต้องการดูว่ามีผลกระทบอะไรกับเครือข่าย ฉันมี NAS ที่ทำเสียงบี๊บเป็นชุดเมื่อฉันถอดสายเคเบิลออก ตอนนี้มันมีสายเคเบิลแบบไขว้เสียบเข้ากับเซิร์ฟเวอร์ หากฉันรีบูทเซิร์ฟเวอร์ NAS จะสูญเสียการเชื่อมโยงและทำให้เกิดเสียงดัง จากสิ่งที่คุณอธิบายคุณไม่สนใจแพ็กเก็ต IP หรือสายเคเบิลที่เสียบเข้ากับพอร์ต NIC ของคอมพิวเตอร์ แต่คุณต้องการทราบเกี่ยวกับลิงก์ ที่สามารถตรวจจับได้โดยใช้เทคโนโลยีที่เรียกว่า Media Sense (คุณสมบัตินี้อาจเรียกว่า "Media State" ด้วย) ลองบันทึกการเปลี่ยนแปลงของสิ่งนั้น
TOOGAM

คำตอบ:


1

เคอร์เนล Linux ไม่ติดตามเวลาที่เริ่มต้นอินเตอร์เฟส

ภายในstruct net_deviceไม่มีฟิลด์ที่เก็บjiffiesค่าเมื่อเริ่มต้นอินเตอร์เฟส

วิธีที่ดีที่สุดที่คุณสามารถจัดการได้คือวิธีการอนุมานจากสคริปต์และบันทึกของ userspace


1

dhclientNetworkManager บนเครื่องของฉันถูกรีสตาร์ทเมื่อเชื่อมต่อกับเครือข่ายอีกครั้ง ดังนั้นคุณอาจใช้เวลาเริ่มต้นของ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) ยังคงทำงานอยู่หรือไม่หากใช่ให้แทนที่การประทับเวลาปัจจุบันจากต้นฉบับและพิมพ์ หากไม่ออกให้ออกและระบุว่าโฮสต์ได้ขาดการเชื่อมต่อ ดู manpages สำหรับคำอธิบายของแต่ละตัวเลือกคำสั่ง INTERVALหากคุณไม่ต้องการส่งออกทุกวินาทีเพิ่มขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.