หนึ่งสามารถปิง NIC โดย MAC


28

ฉันมีการ์ด NIC ในเครื่องเดเบียนที่ไหนสักแห่ง เครื่องปิดอยู่ แต่ฉันจำเป็นต้องทราบว่าการ์ด NIC เปิดอยู่หรือไม่เพื่อให้ฉันสามารถส่งแพ็กเก็ตเวคการ์ดปลุกในภายหลัง (จากเครื่องเดเบียนอื่น) เพื่อปลุก ฉันมีที่อยู่ MAC ของการ์ด มีวิธีใดที่ฉันสามารถ ping การ์ด ethernet โดย MAC เพื่อดูว่าเปิดหรือไม่

ฉันพยายามสร้างรายการ ARP:

arp -s 192.168.2.2 00-0c-0d-ef-02-03
ping 192.168.2.2

ไม่ทำงานเนื่องจากการ์ด NIC ไม่มีที่อยู่ IP นี้ ดังนั้นการ์ด NIC จะได้รับคำขอ ping แต่จะไม่ตอบกลับ มีวิธีแก้ไขไหม?

ฉันใช้แพ็กเกจ etherwake เพื่อส่งข้อความ wake-on-lan

คำตอบ:


23

คุณอาจโชคดีกว่าในการใช้เครื่องมือarpingแทน เครื่องมือpingทำงานที่ระดับเลเยอร์ 3 ของโมเดล OSIในขณะที่arpingทำงานที่เลเยอร์ 2

คุณยังจำเป็นต้องรู้ IP ของระบบอย่างไรก็ตามด้วยเครื่องมือนี้ มี 2 ​​รุ่นมาตรฐานหนึ่งที่รวมอยู่ใน Unixes ส่วนใหญ่ (ของ Alexey Kuznetsov) เป็นรุ่นที่สามารถจัดการกับที่อยู่ IP ได้เท่านั้น รุ่นอื่น ๆ (โทมัส Habets') คาดคะเนสามารถสอบถามโดยใช้ที่อยู่ MAC

$ sudo arping 192.168.1.1 -c 1
ARPING 192.168.1.1 from 192.168.1.218 eth0
Unicast reply from 192.168.1.1 [00:90:7F:85:BE:9A]  1.216ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)

arpingทำงานคล้ายกับpingยกเว้นแทนที่จะส่งแพ็คเก็ต ICMP มันส่งแพ็คเก็ต ARP

รับ IP ของระบบโดยใช้เพียง MAC

ต่อไปนี้เป็นสองวิธีสำหรับการค้นหาแบบย้อนกลับของ MAC กับ IP

  1. nmap

    $ nmap -sP 192.168.1.0/24
    

    จากนั้นค้นหา arp cache ของคุณสำหรับเครื่องที่arp -anเกี่ยวข้อง

  2. fping

    $ fping -a -g 192.168.1.0/24 -c 1
    

    จากนั้นดูในแคช arp ของคุณเหมือนด้านบน

  3. ปิง

    $ ping -b -c1 192.168.1.255
    

    จากนั้นดูในแคช arp ของคุณเหมือนด้านบน

  4. nbtscan (โฮสต์ windows เท่านั้น)

    $ nbtscan 192.168.1.0/24
    
    Doing NBT name scan for addresses from 192.168.1.0/24
    
    IP address       NetBIOS Name     Server    User             MAC address      
    ------------------------------------------------------------------------------
    192.168.1.0 Sendto failed: Permission denied
    192.168.1.4      MACH1            <server>  <unknown>        00-0b-12-60-21-dd
    192.168.1.5      MACH2            <server>  <unknown>        00-1b-a0-3d-e7-be
    192.168.1.6      MACH3            <server>  <unknown>        00-21-9b-12-b6-a7
    

3
arpingสามารถใช้ที่อยู่ MAC เป็นพารามิเตอร์:arping -c 5 38:e7:d8:63:5e:a6

@MichaelMrozek - ฉันทำหลังจากมีคนโพสต์คำตอบของฉันเป็นความคิดเห็นและไม่ได้อ่านสิ่งที่ฉันพูดเกี่ยวกับ arping 2 รุ่น คำตอบอื่น ๆ ดูเหมือนจะถูกลบไปแล้วขอบคุณที่สละความอึดอัดใจของฉันออกไป
slm

ขอบคุณสำหรับความช่วยเหลือ ทำเครื่องหมายว่าแก้ไขแล้ว เราไม่พบตัวเลือก WOL ในการตั้งค่า BIOS นี่คือฉันเดา: BIOS ไม่ได้เปิด WOL แต่ NIC ทำ ดังนั้น NIC จึงตื่นขึ้นมาบนแพ็กเก็ต WOL แรกและได้ส่งข้อความไปยัง BIOS แต่เนื่องจากมันไม่ได้เปิดใน BIOS BIOS จึงไม่ทำอะไรเลย ตั้งแต่เวลานี้เป็นต้นไป NIC ตอบสนองต่อการ ping เนื่องจากมันตื่น แต่เครื่องก็ไม่ได้ คำถามที่รวดเร็วมาก: เป็นไปได้ไหมที่ BIOS จะปิด WOL และ NIC จะเปิดพร้อมกันหรือไม่?
Alastor Moody

1
@AlastorMoody - ฉันจะบอกว่าคุณอาจได้รับอนุญาตให้ปิด BIOS WOL โดยที่ WOL ของ NIC เปิดใช้งานอยู่ อย่างไรก็ตามถ้า BIOS ของคุณไม่รองรับ WOL ฉันไม่คิดว่าคุณจะสามารถใช้ประโยชน์ได้แม้ว่า NIC จะทำเช่นนั้น ดูบทความวิกิพีเดียใน WOL: en.wikipedia.org/wiki/Wake-on-LAN พูดในสิ่งเดียวกันกับฉันในส่วน "การแก้ปัญหาแพ็คเก็ตเวทย์มนตร์"
slm

@niervol: arpingไปยังที่อยู่ MAC: ใช่มีสองการใช้งานของarping 1.จากลินุกซ์iputils 2. arping โดยโทมัส Habets --- การใช้งาน2.เท่านั้นที่สามารถ ping ที่อยู่ MAC ได้ แต่การ ping นั้นยุ่งยากมาก: เครื่อง pinged ยังต้องมีการกำหนดค่า TCP / IP (อย่างน้อยที่อยู่ IP) และจะต้องสามารถตอบสนองต่อการ ping ที่อยู่ IP ที่ออกอากาศ
pabouk

12

คุณไม่สามารถ ping NIC ปกติได้เพราะ NIC เพียงอย่างเดียวไม่ได้ส่งคำตอบใด ๆ

คอมพิวเตอร์ที่ใช้งานเท่านั้นที่สามารถส่งการตอบกลับได้

การ์ดอินเทอร์เฟซเครือข่ายปกติไม่ส่งการตอบกลับด้วยตนเอง พวกเขาต้องการซอฟต์แวร์ที่ทำงานอยู่บนคอมพิวเตอร์เสมอ

เมื่อซีพียูของคอมพิวเตอร์ปิดตัวลงไม่มีซอฟต์แวร์ที่ทำงานอยู่ซึ่งจะส่งการตอบกลับไปยัง ping

Wake-on-LAN เป็นทิศทางเดียว

Wake-on-LANอนุญาตให้คอมพิวเตอร์ปล่อยให้ NIC เปิดบางส่วนเท่านั้นเพื่อรับเฟรม Ethernet และมองหาลำดับมายากลเวคอัพในพวกเขา แต่ NIC จะยังไม่ส่งคำตอบใด ๆ Wake-on-LAN เป็นทิศทางเดียวอย่างเคร่งครัด ไม่มีการตอบกลับ

ข้อยกเว้น

มีนิคส์พิเศษบางอย่างที่อาจจะส่งข้อความตอบกลับด้วยตัวเองเช่นสำหรับคนตัวอย่างเช่นการดำเนินการเสร็จสมบูรณ์Offload TCP จับมือกัน


1
+1 - นี่คือคำตอบเดียวที่ตอบคำถามของ OP อย่างแท้จริง "Wake-on-LAN เป็นทิศทางเดียว"
Celada

5

ether-wakeคำสั่งจะทำงานตามที่อยู่แม็ดังนั้นแน่นอนคุณ (ก) จะไม่จำเป็นต้องมีที่อยู่ IP และ (ข) สามารถส่งคำสั่งโดยไม่เป็นอันตราย (ถ้ามันตื่นแล้วตื่นมันจะมีผลกระทบหรือไม่?)

คุณสามารถดูรายการของแคช arp ที่มีอยู่ของคุณโดยใช้arp -anและ grepping สำหรับ MAC ของคุณเพื่อรับ IP ของโฮสต์เป้าหมาย อย่างไรก็ตามเนื่องจาก arp เป็นแคชจึงอาจมีการ "หมดเวลา" ของแคช (และยังคงเป็น 'ตื่น') จากนั้นคุณอาจต้องใช้วิธีการเดรัจฉานเพื่อค้นหาว่าเป็น IP เช่น:

 sudo nmap -sP 192.168.2.0/24 | less  

(และจากนั้นมองหา 00: 0c: 0d: ef: 02: 03) - ไฟร์วอลล์ที่มีให้และสิ่งอื่น ๆ ไม่สามารถเข้าถึงได้!


ฉันไม่ต้องการปลุกเครื่องตอนนี้ แต่ฉันต้องการให้แน่ใจว่า NIC สามารถรับข้อความของฉันดังนั้นเมื่อฉันออกไปข้างนอกและเปิดเครื่องผ่านแพ็คเก็ต WOL ฉันรู้ว่ามันกำลังจะเปิดขึ้น นั่นเป็นเหตุผลที่ฉันต้องการ ping โดย IP หรือ MAC และไม่ปลุก
Alastor Moody

2
เครื่องนอนจะไม่ตอบสนองต่อการ ping หากเปิดเครื่องและคุณ ping โดย IP (และโฮสต์ reponds) เครื่องจะใส่รายการใน arp cache หากรายการในที่นั่นตรงกับที่อยู่ MAC ของโฮสต์มีโอกาสที่เหมาะสมที่จะทำงานได้ (การแยกไฟร์วอลล์เครือข่ายอื่น ๆ เราเตอร์และปัญหาทางกายภาพอื่น ๆ ที่อาจทำให้ether-wakeไม่สามารถเข้าถึงได้) ether-wakeที่จริงผมจะได้รับการเข้าถึงโฮสต์อื่นในสถานที่วางเครื่องเป้าหมายเพื่อการนอนหลับและพยายาม โดยธรรมชาติของวิธีการทำงาน WOL คำขอจะต้องถูกส่งไปในเครือข่ายย่อยเดียวกันเป็นเจ้าภาพอยู่แล้ว
Drav โลน

2
@DravSloan Bonjour Proxy ที่มีอยู่ในเช่น Apples Time Capsule เป็นวิธีที่แยบยลในการจัดการ proble นี้ เครื่องเข้าสู่โหมดสลีป แต่เราเตอร์ตอบกลับและปลุกเฉพาะเมื่อพร็อกซีไม่สามารถจัดการได้อีกต่อไป
Thorbjørn Ravn Andersen

อย่าพึ่งพา WOL โดยไม่ได้ทำการทดสอบก่อน ค่อนข้างรับการ์ด IPMI ในกรณีที่
sjas

0

แอปพลิเคชันของฉันคือเซิร์ฟเวอร์ที่ RSYNC กำลังเข้าสู่เวิร์กสเตชันเพื่อรับไดเรกทอรีเอกสารของเวิร์กสเตชัน ... แต่เวิร์กสเตชันไม่มีที่อยู่ IP ที่รับประกัน แต่มีที่อยู่ MAC ที่รู้จัก (ที่อยู่ IP ทำโดย DHCP) รหัสนี้ใช้การ ping เท่านั้น

export COUNTER=1
while [ $COUNTER -lt 255 ]
do
    #ping $1$COUNTER -c 1 -w 400 | grep -B 1 "Lost = 0" &
    # activate all 254 addresses  in the subnet..  dont really need to grep the ping output
    ping 192.168.0.$COUNTER -c 1 -w 4 2> /dev/null | grep -B 1 ' 0\% packet loss' > /dev/null &
    COUNTER=$(( $COUNTER + 1 ))
done
# wait till 254 background processes finished
wait
# the arp cache will automatically flush it's incomplete entries in about 10 minutes...
#echo "finished"

#
#SRC_SERVER_IP="192.168.0.160:873"
SRC_SERVER_IP=$(arp -a | grep "00:22:4d:81:8f:76" | awk '{print $2}' | sed 's/[()]//g')":873"

if [ $SRC_SERVER_IP == ":873"   ] ; then
    echo  "ws1.example.com is not on the network...  exiting..."
    exit 0
fi

0

นี่คือสคริปต์ง่ายๆในการ ping ผ่านที่อยู่ mac เพียงบันทึกและเรียกใช้เช่น
macping aa:bb:cc:dd:ee:ff

นอกจากนี้คุณยังสามารถ daisy chain ผลลัพธ์เพื่อทำสิ่งอื่นอย่างมีเงื่อนไขเช่น:

macping aa:bb:cc:dd:ee:ff && echo do something if online || echo do something if offline

-

#!/bin/bash
network=192.168.1.1/24

if [ "$#" -ne 1 ]; then echo Usage example: $0 aa:bb:cc:dd:ee:ff; exit 2; fi;

nmap -sP $network >& /dev/null
ip=$(arp -n | grep $1 | awk ' { print $1 }')
ping $ip -n -q -c 2 -i 0.2 -w 1 >& /dev/null
if [ $? -eq 0 ]; then
    echo Device is online \($ip\)
else
    echo Device is offline
    exit 1
fi;

0

สิ่งนี้จะไม่พึ่งพาเวอร์ชันที่ต่างกันของ arping หรือสคริปต์ bash ที่ซับซ้อน:

ping $(arp-scan --localnet | grep 80:1f:02:fa:90:b7  | awk ' { printf $1 } ')

ฉันใช้ arp-scan มากกว่า arp เพราะดูเหมือนว่าจะทำงานได้เร็วขึ้นมาก

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