ตรวจสอบว่าเสียบสายเครือข่ายหรือไม่โดยไม่ต้องต่อส่วนต่อประสาน


9

ฉันกำลังพยายามระบุ NIC บนเซิร์ฟเวอร์ระยะไกล ~ 20 แห่ง (2-6 NIC บนทุกเซิร์ฟเวอร์) เริ่มต้นด้วยฉันต้องการระบุผู้ที่พร้อมใช้งานและฟรี ฉันจะตรวจสอบสถานะของสื่อทางกายภาพได้อย่างไร ฉันรู้ว่าวิธีการบางอย่างรวมทั้งifconfig|grep RUNNING, ethtool, cat /sys/class/net/eth0/carrierแต่สิ่งที่พวกเขาต้องการให้อินเตอร์เฟซเป็นขึ้น ฉันไม่ต้องการที่จะนำส่วนต่อประสานทั้งหมดขึ้นมา ไม่แน่ใจว่าทำไม แต่ฉันไม่ชอบที่จะเปิดใช้งาน แต่ไม่ได้กำหนดค่าอินเทอร์เฟซในเครือข่าย มีวิธีที่ฉันสามารถหลีกเลี่ยงปัญหานี้ได้หรือไม่?

หรือฉันผิดและไม่มีอะไรเลวร้ายเกี่ยวกับอินเทอร์เฟซทั้งหมดที่กำลังทำงาน (และไม่ได้กำหนดค่า) แม้ว่าพวกเขาจะเสียบปลั๊ก?

คำตอบ:


5

ip link showตามค่าเริ่มต้นจะแสดงอินเตอร์เฟสทั้งหมดใช้ip link show upเพื่อแสดงเฉพาะอินเตอร์เฟสที่รันอยู่ คุณสามารถใช้ตัวกรองเพื่อสร้างความแตกต่าง


เอเอชเอ และสายเคเบิลที่หายไปจะปรากฏเป็น NO-CARRIER ใช่ไหม
minaev

การเล่นชนิดหนึ่ง ขอบคุณ และip addr showยังเพิ่มที่อยู่ IP ไปยังเอาต์พุต
minaev

2
ไม่สามารถใช้งานได้บนเครื่องของฉัน (Debian squeeze, skge driver): ip link showไม่แสดงอะไรเกิน "ลง" ipรายงานข้อมูลเดียวกันifconfigและ/sys/class/net/ในกรณีใด ๆ ใช่ไหม คุณได้รับข้อมูลสถานะลิงก์ipซึ่งแตกต่างจากสิ่งที่คุณได้รับภายใต้/sys/class/netหรือจากifconfigบนเครื่องของคุณหรือไม่? หรือคุณได้รับสถานะลิงก์เกี่ยวกับอินเตอร์เฟสที่ไม่ทำงาน/sys/class/net(ฉันได้รับ/sys/class/net/eth0/carrier: Invalid argument)
Gilles 'หยุดความชั่วร้าย'

มันไม่ทำงานหากอินเตอร์เฟสไม่ทำงาน
Vladimir Kunschikov

@Nikhil Mulley คุณหมายถึงอะไรโดยตัวกรอง
Joe

2

นี่คือสคริปต์ของฉันจะเริ่มต้นเส้นทางการปรับปรุงขึ้นอยู่กับสถานะของการเชื่อมต่อในการเรียลไทม์ (ทำงานในพื้นหลัง) ทำงานได้กับหลายอินเตอร์เฟสฉันกำหนดลำดับความสำคัญใน/tmp/${iface}.metricไฟล์ส่วนติดต่อที่เชื่อมต่อ 'ดีที่สุด' จะถูกใช้เพื่อกำหนดเส้นทางการรับส่งข้อมูลเริ่มต้น

#!/bin/sh

/sbin/ip monitor link | while read -r line
do
    iface=$(echo $line | sed -ne 's/[^ ]* \([^ ]*\): .* state \([^ ]*\).*/\1/p')
    state=$(echo $line | sed -ne 's/[^ ]* \([^ ]*\): .* state \([^ ]*\).*/\2/p')
    if [ "$iface" != "" ] ; then
        echo "$iface is $state"
        if [ -f /tmp/${iface}.metric ] ; then
                echo "updating default route for ${iface}"
                if [ "$state" = "DOWN" ] ; then
                        ip route del default dev "${iface}"
                else
                        ip route add default dev "${iface}" metric `cat /tmp/${iface}.metric`
                fi
        fi
    fi
done

0

ip link show แสดงแฟล็ก "LOWER_UP" เพื่อระบุสายเคเบิลที่เสียบ คุณสามารถตรวจสอบ / sys / class / net / eth * / operstate หรือผู้ให้บริการ อย่างไรก็ตามสิ่งเหล่านี้ใช้ได้กับอินเตอร์เฟสที่มีที่อยู่ IP ผูกไว้เท่านั้น


1
ข้อมูลที่น่าสนใจ แต่ไม่ตอบโพสต์ต้นฉบับ
X Tian

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