How to ping MAC address in Linux

后端 未结 5 1406
南方客
南方客 2021-01-31 12:19

I want to ping a known MAC address, I tried to use nmap:

sudo nmap -sP 192.168.15.1/24 | grep  20:64:32:3F:B1:A9

But in this case its ping all

5条回答
  •  隐瞒了意图╮
    2021-01-31 13:12

    Combining the above good answers into a single script: (Usage: macping aa:bb:cc:dd:ee:ff)

    #!/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 -T4 $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;
    

    Extending: To maintain a list of network devices, by mac address, and display the online/offline status of each.
    Uses include:

    • Monitoring your server status's
    • checking your internet connection is up
    • checking if a specific device has connected to your wifi
    • checking your smart TV is really off
    • etc

    Each device name is displayed in green if online, red if offline.
    A desktop notification is displayed when a device status changes.

    Tested under linux mint, should work on other distro's.

    #!/bin/bash
    
    #Create associated array's 
    declare -A devicelist #device name: mac address
    declare -A statuslist #device name: online status
    
    devicelist[Server01]=aa:bb:cc:dd:ee:01
    devicelist[Server02]=aa:bb:cc:dd:ee:02
    devicelist[MyPhone] =aa:bb:cc:dd:ee:03
    devicelist[SmartTV] =aa:bb:cc:dd:ee:04
    
    #Colour Constants
    BRed='\033[1;31m'  
    BGreen='\033[1;32m' 
    Reset='\033[m'
    
    function mactoip(){
      echo $(arp -n | grep -i $mac | awk ' { print $1 }')
    }
    
    while [ true ]; do
        clear
        arp_cache_rebuilt=no
        for devicename in ${!devicelist[@]}; do
            status=OFFLINE
            mac=${devicelist[${devicename}]}
            ip=$( mactoip $mac )
            if [ -z $ip ] && [ $arp_cache_rebuilt = "no" ]; then
                #we need to rebuild the arp cache...
                nmap -sn -T4 192.168.1.0/24 >& /dev/null
                ip=$( mactoip $mac )
                arp_cache_rebuilt=yes
            fi;
    
            if [ ! -z $ip ]; then
                ping $ip -n -q -c 2 -i 0.2 -w 1 >& /dev/null
                if [ $? -eq 0 ]; then status=ONLINE; fi
            fi;
            #if device's previous status not yet recorded, then set it now.
            if [ ! ${statuslist[${devicename}]+_} ]; then statuslist[${devicename}]=$status; fi
    
            if [ $status = "ONLINE" ]; then colour=$BGreen; else colour=$BRed; fi;
            echo -e ${colour}${devicename}${Reset} - $ip
            if [ ${statuslist[${devicename}]} != $status ]; then
              notify-send -i ac-adapter -u critical -t 1000 $status "$devicename"
            fi;
            statuslist[$devicename]=$status
        done
        echo -
        sleep 5
    done
    

提交回复
热议问题