Có thể ping một NIC bằng MAC


28

Tôi có một thẻ NIC trên máy Debian ở đâu đó. Máy đã tắt, nhưng tôi cần biết liệu thẻ NIC có được bật hay không để tôi có thể gửi gói ma thuật đánh thức sau (từ một máy Debian khác) để đánh thức nó. Tôi có địa chỉ MAC của thẻ. Có cách nào để tôi có thể ping thẻ ethernet bằng MAC để xem nó có bật không?

Tôi đã thử tạo một mục ARP:

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

Điều đó không hiệu quả, vì thẻ NIC không có địa chỉ IP này. Vì vậy, thẻ NIC sẽ nhận được yêu cầu ping nhưng sẽ không trả lời nó. Có cách nào để khắc phục điều này?

Tôi đang sử dụng gói etherwake để gửi tin nhắn báo thức.

Câu trả lời:


23

Bạn có thể có may mắn hơn bằng cách sử dụng công cụ arpingthay thế. Công cụ này pinghoạt động ở cấp độ 3 của mô hình OSI , trong khi arpinghoạt động ở lớp 2.

Bạn vẫn cần biết IP của hệ thống tuy nhiên với công cụ này. Có 2 phiên bản của nó, phiên bản tiêu chuẩn có trong hầu hết các Unix (Alexey Kuznetsov) là phiên bản chỉ có thể xử lý các địa chỉ IP. Các phiên bản khác (Thomas Habets') được cho là có thể truy vấn sử dụng địa chỉ 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 hoạt động tương tự như ping ngoại trừ thay vì gửi các gói ICMP, nó sẽ gửi các gói ARP.

Nhận IP của hệ thống chỉ bằng MAC

Dưới đây là một vài phương pháp để thực hiện tra cứu ngược MAC sang IP.

  1. nmap

    $ nmap -sP 192.168.1.0/24
    

    Sau đó tìm trong bộ đệm arp của bạn cho máy tương ứng arp -an .

  2. fping

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

    Sau đó nhìn vào bộ đệm arp của bạn, giống như trên.

  3. ping

    $ ping -b -c1 192.168.1.255
    

    Sau đó nhìn vào bộ đệm arp của bạn, giống như trên.

  4. nbtscan (chỉ lưu trữ máy chủ)

    $ 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
arpingcó thể lấy địa chỉ MAC làm tham số:arping -c 5 38:e7:d8:63:5e:a6

@MichaelMrozek - Tôi đã làm điều đó sau khi ai đó về cơ bản đã đăng câu trả lời của tôi dưới dạng một bình luận và đã không đọc những gì tôi nói về 2 phiên bản arping. Câu trả lời khác dường như đã bị xóa vì vậy cảm ơn vì đã loại bỏ sự thất vọng táo bạo của tôi.
slm

Cảm ơn đã giúp đỡ. Đánh dấu điều này là giải quyết. Chúng tôi không thể tìm thấy tùy chọn WOL trong thiết lập BIOS. Đây là dự đoán của tôi: BIOS không bật WOL, nhưng NIC thì có. Vì vậy, NIC đã thức dậy trên gói WOL đầu tiên và đang gửi tin nhắn đến BIOS. Nhưng vì nó không được bật trong BIOS, nên BIOS không làm gì cả. Từ thời điểm này trở đi, NIC đã phản hồi ping vì nó đã hoạt động, nhưng máy thì không. Vì vậy, câu hỏi nhanh: Liệu BIOS có thể tắt WOL và NIC được bật cùng lúc không?
Alastor Tâm trạng

1
@AlastorMoody - Tôi có thể nói rằng bạn có thể được phép tắt WOL BIOS khi bật WOL của W / NIC. Tuy nhiên, nếu BIOS của bạn không hỗ trợ WOL, thì tôi không nghĩ bạn sẽ có thể sử dụng nó ngay cả khi có NIC. Xem bài viết trên wikipedia về WOL: en.wikipedia.org/wiki/Wake-on-lan . Nói điều tương tự như tôi trong phần "xử lý sự cố gói ma thuật".
slm

@niervol: arpingđến địa chỉ MAC: Có, có hai triển khai arping 1. từ Linux iputils 2. arping by Thomas Habets . --- Chỉ thực hiện 2. có thể ping địa chỉ MAC nhưng ping như vậy rất khó: Máy ping vẫn phải được cấu hình TCP / IP (ít nhất là địa chỉ IP) và nó phải có khả năng đáp ứng ping một địa chỉ IP quảng bá.
pabouk

12

Bạn không thể ping một NIC bình thường vì một mình NIC không gửi bất kỳ câu trả lời nào.

Chỉ có một máy tính đang chạy là có thể gửi trả lời

Thẻ giao diện mạng bình thường không tự gửi bất kỳ câu trả lời nào. Họ luôn cần một phần mềm chạy trên máy tính để làm như vậy.

Khi CPU của máy tính bị tắt nguồn thì sẽ không có phần mềm nào chạy trả lời ping.

Wake-on-LAN là một hướng

Thức dậy trên mạng LAN cho phép máy tính cho phép NIC được cấp nguồn một phần để nhận các khung Ethernet và tìm kiếm chuỗi thức tỉnh kỳ diệu trong chúng nhưng NIC vẫn không gửi bất kỳ phản hồi nào. Wake-on-LAN hoàn toàn là một hướng. Không có phản hồi gửi.

Ngoại lệ

Có một số NIC đặc biệt nhất định có thể tự gửi trả lời như ví dụ: các NIC thực hiện giảm tải bắt tay TCP hoàn chỉnh .


1
+1 - đây là câu trả lời duy nhất thực sự giải quyết câu hỏi của OP. "Wake-on-LAN là một hướng".
Celada

5

Các ether-wakelệnh sẽ làm việc theo địa chỉ mac, vì vậy chắc chắn bạn (a) sẽ không cần một địa chỉ IP và (b) có thể gửi lệnh mà không gây hại (nếu nó đã thức giấc, thức dậy nó sẽ không có ảnh hưởng?)

Bạn có thể xem danh sách bộ đệm arp hiện tại của mình bằng cách sử dụng arp -anvà grepping cho MAC của bạn để lấy IP của máy chủ đích. Tuy nhiên, vì arp là bộ đệm, nên nó có thể đã bị "hết thời gian" của bộ đệm (và vẫn còn 'thức'). Sau đó, bạn có thể phải sử dụng phương pháp vũ phu để tìm IP của nó, chẳng hạn như:

 sudo nmap -sP 192.168.2.0/24 | less  

(và sau đó tìm 00: 0c: 0d: ef: 02: 03) - cung cấp tường lửa và những thứ khác không cản trở!


Tôi không muốn đánh thức máy ngay bây giờ. Nhưng tôi muốn đảm bảo rằng NIC có thể nhận được tin nhắn của tôi để khi tôi ra khỏi trang web và bật máy thông qua gói WOL, tôi biết rằng nó sẽ được bật. Đó là lý do tại sao tôi muốn ping bằng IP hoặc MAC và không đánh thức nó.
Alastor Tâm trạng

2
Máy ngủ sẽ không đáp ứng với ping. Nếu máy được bật và bạn ping bằng IP (và máy chủ lưu trữ lại), nó sẽ đặt một mục trong bộ đệm arp. Nếu mục nhập trong đó khớp với địa chỉ MAC của máy chủ, thì có khả năng nó sẽ hoạt động hợp lý (chặn các tường lửa mạng khác, bộ định tuyến và các vấn đề vật lý khác có thể khiến nó ether-wakekhông đến được). Tôi thực sự sẽ có quyền truy cập vào máy chủ khác tại chỗ, đặt máy mục tiêu vào chế độ ngủ và thử ether-wake. Theo bản chất của cách thức hoạt động của WOL, yêu cầu sẽ phải được gửi trên cùng một mạng con với máy chủ
Drav Sloan

2
@DravSloan Proxy Bonjour có sẵn trên ví dụ Apples Time Capsule là một cách khá khéo léo để xử lý vấn đề này. Máy ngủ nhưng bộ định tuyến đáp ứng cho nó và chỉ đánh thức nó khi proxy không thể xử lý được nữa.
Thorbjørn Ravn Andersen

Đừng dựa vào WOL mà không thử nghiệm trước. Thay vào đó hãy lấy thẻ IPMI trong trường hợp đó.
sjas

0

Ứng dụng của tôi là một máy chủ RSYNCing vào một máy trạm để lấy thư mục Tài liệu của máy trạm ... nhưng máy trạm không có địa chỉ IP được bảo đảm nhưng có địa chỉ MAC đã biết (địa chỉ IP được DHCP thực hiện). mã này chỉ sử dụng 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

Đây là một kịch bản đơn giản để ping thông qua địa chỉ mac. Chỉ cần lưu và chạy, vd
macping aa:bb:cc:dd:ee:ff

Bạn cũng có thể xâu chuỗi kết quả để làm điều kiện khác, ví dụ:

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

Điều này không phụ thuộc vào các phiên bản khác nhau của arping cũng như các tập lệnh bash phức tạp:

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

Tôi đã sử dụng arp-scan thay vì arp vì nó dường như chạy nhanh hơn rất nhiều.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.