Bisakah satu ping NIC oleh MAC

28

Saya memiliki kartu NIC di mesin Debian di suatu tempat. Mesin dimatikan, tetapi saya perlu tahu apakah kartu NIC dihidupkan sehingga saya dapat mengirim paket magic wake-on-lan nanti (dari mesin Debian lain) untuk membangunkannya. Saya memiliki alamat MAC kartu. Apakah ada cara saya dapat melakukan ping kartu ethernet oleh MAC untuk melihat apakah kartu itu aktif?

Saya mencoba membuat entri ARP:

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

Itu tidak berhasil, karena kartu NIC tidak memiliki alamat ip ini. Jadi kartu NIC akan menerima permintaan ping tetapi tidak mau membalasnya. Apakah ada cara untuk mengatasi ini?

Saya menggunakan paket etherwake untuk mengirim pesan wake-on-lan.

Alastor Moody
sumber

Jawaban:

23

Anda mungkin lebih beruntung menggunakan alat ini arpingsebagai gantinya. Alat ini pingbekerja pada level 3 dari model OSI , sedangkan arpingbekerja pada layer 2.

Anda masih perlu mengetahui IP sistem namun dengan alat ini. Ada 2 versi itu, satu standar yang disertakan dengan sebagian besar Unix (Alexey Kuznetsov) adalah versi yang hanya dapat menangani alamat IP. Versi lain (Thomas Habets ') konon dapat menggunakan alamat 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)

arpingberfungsi sama dengan pingkecuali alih-alih mengirim paket ICMP, ia mengirim paket ARP.

Mendapatkan IP sistem hanya dengan menggunakan MAC

Berikut adalah beberapa metode untuk melakukan pencarian balik MAC ke IP.

  1. nmap

    $ nmap -sP 192.168.1.0/24
    

    Kemudian lihat di cache arp Anda untuk mesin yang sesuai arp -an.

  2. fping

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

    Kemudian lihat di cache arp Anda, sama seperti di atas.

  3. ping

    $ ping -b -c1 192.168.1.255
    

    Kemudian lihat di cache arp Anda, sama seperti di atas.

  4. nbtscan (host hanya 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
    
slm
sumber
3
arpingdapat mengambil alamat MAC sebagai parameter:arping -c 5 38:e7:d8:63:5e:a6
@MichaelMrozek - Saya melakukannya setelah seseorang pada dasarnya memposting jawaban saya sebagai komentar dan belum membaca apa yang saya katakan tentang 2 versi arping. Jawaban yang lain sepertinya sudah dihapus jadi terima kasih telah menghilangkan rasa frustrasi saya yang berani.
slm
Terima kasih untuk bantuannya. Menandai ini sebagai terselesaikan. Kami tidak dapat menemukan opsi WOL di pengaturan BIOS. Ini dugaan saya: BIOS tidak mengaktifkan WOL, tetapi NIC melakukannya. Jadi NIC bangun pada paket WOL pertama, dan mengirim pesan ke BIOS. Tetapi karena tidak dihidupkan di BIOS, BIOS tidak melakukan apa-apa. Sejak saat ini dan seterusnya, NIC merespons ping sejak terjaga, tetapi mesin tidak. Pertanyaan yang begitu cepat: Apakah mungkin bagi BIOS untuk mematikan WOL dan NIC untuk menyalakannya secara bersamaan?
Alastor Moody
1
@AlastorMoody - Saya akan mengatakan bahwa Anda mungkin diizinkan untuk mematikan BIOS WOL w / NIC's WOL dihidupkan. Namun jika Anda BIOS tidak mendukung WOL, maka saya tidak berpikir Anda akan dapat menggunakannya meskipun NIC mendukungnya. Lihat artikel wikipedia di WOL: en.wikipedia.org/wiki/Wake-on-LAN . Mengatakan hal yang sama seperti saya di bagian "pemecahan masalah paket sihir".
slm
@niervol: arpingke alamat MAC: Ya, ada dua implementasi arping 1. dari Linux iputils 2. arping oleh Thomas Habets . --- Hanya 2. implementasi yang dapat melakukan ping alamat MAC tetapi ping tersebut sangat rumit: Mesin ping masih harus memiliki TCP / IP yang dikonfigurasi (setidaknya alamat IP) dan itu harus dapat menanggapi ping ke alamat IP broadcast.
pabouk
12

Anda tidak dapat melakukan ping ke NIC normal karena NIC sendiri tidak mengirim balasan apa pun.

Hanya komputer yang berjalan yang dapat mengirim balasan

Kartu antarmuka jaringan yang normal tidak mengirim balasan sendiri. Mereka selalu memerlukan perangkat lunak yang berjalan di komputer untuk melakukannya.

Ketika CPU komputer dimatikan maka tidak ada perangkat lunak yang sedang berjalan yang akan mengirim balasan ke ping.

Wake-on-LAN adalah searah

Wake-on-LAN memungkinkan komputer membiarkan NIC dihidupkan sebagian untuk menerima frame Ethernet dan mencari urutan bangun ajaib di dalamnya, tetapi NIC tetap tidak akan mengirim balasan apa pun. Wake-on-LAN benar-benar searah. Tidak ada respons yang dikirim.

Pengecualian

Ada beberapa NIC khusus yang dapat mengirim balasan sendiri seperti misalnya yang mengimplementasikan handshake offload TCP lengkap .

pabouk
sumber
1
+1 - ini adalah satu-satunya jawaban yang benar-benar menjawab pertanyaan OP. "Wake-on-LAN adalah searah".
Celada
5

The ether-wakeperintah akan bekerja berdasarkan alamat mac, jadi pasti Anda (a) tidak akan membutuhkan sebuah alamat IP dan (b) dapat mengirim perintah tanpa membahayakan (jika sudah terjaga, bangun itu tidak akan berdampak?)

Anda dapat melihat daftar cache arp yang ada dengan menggunakan arp -andan mengambil MAC Anda untuk mendapatkan IP dari host target. Namun, karena arp adalah cache, itu mungkin telah "habis" dari cache (dan masih 'bangun'). Anda mungkin harus menggunakan metode brute force untuk menemukan IP-nya, seperti:

 sudo nmap -sP 192.168.2.0/24 | less  

(dan kemudian cari 00: 0c: 0d: ef: 02: 03) - asalkan firewall dan hal-hal lain seperti itu tidak menghalangi!

Drav Sloan
sumber
Saya tidak ingin membangunkan mesin sekarang. Tetapi saya ingin memastikan bahwa NIC dapat menerima pesan saya sehingga ketika saya pergi ke luar kantor dan menghidupkan mesin melalui paket WOL, saya tahu itu akan menyala. Itu sebabnya saya ingin melakukan ping dengan IP atau MAC dan tidak membangunkannya.
Alastor Moody
2
Mesin tidur tidak akan merespons ping. Jika mesin dihidupkan dan Anda melakukan ping dengan IP (dan host reponds), itu akan memasukkan entri dalam cache arp. Jika entri di sana cocok dengan alamat MAC host, ada kemungkinan wajar bahwa itu akan berfungsi (mem-bongkar firewall jaringan lain, router, dan masalah fisik lainnya yang dapat menyebabkan ether-waketidak mencapainya). Saya benar-benar akan mendapatkan akses ke host host lain, meletakkan mesin target untuk tidur dan mencoba ether-wake. Sesuai sifat cara kerja WOL, permintaan tersebut harus dikirim pada subnet yang sama dengan host
Drav Sloan
2
@ DropSloan Bonjour Proxy tersedia di mis. Apples Time Capsule adalah cara yang cukup cerdik untuk menangani masalah ini. Mesin tidur tetapi router merespons untuk itu, dan hanya membangunkannya ketika proxy tidak dapat menanganinya lagi.
Thorbjørn Ravn Andersen
Jangan mengandalkan WOL tanpa diuji terlebih dahulu. Alih-alih mendapatkan kartu IPMI dalam kasus itu.
sjas
0

Aplikasi saya adalah server RSYNCing ke workstation untuk mendapatkan direktori Dokumen workstation ... tetapi workstation tidak memiliki alamat IP yang dijamin tetapi memang memiliki alamat MAC yang dikenal (alamat IP dilakukan oleh DHCP). kode ini menggunakan ping SAJA.

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
Don Matheson
sumber
0

Berikut ini adalah skrip sederhana untuk melakukan ping melalui alamat mac. Simpan dan jalankan mis
macping aa:bb:cc:dd:ee:ff

Anda juga dapat daisy chain hasilnya untuk melakukan hal lain secara kondisional, misalnya:

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;
Mtl Dev
sumber
0

Ini tidak bergantung pada versi arping yang berbeda atau pada skrip bash yang rumit:

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

Saya telah menggunakan arp-scan daripada arp karena tampaknya berjalan jauh lebih cepat.

Julian Knight
sumber