web-dev-qa-db-ja.com

MACでNIC=

NICカードがDebianマシンのどこかにあります。マシンはオフになっていますが、NICカードがオンになっているかどうかを確認するために、ウェイクオンランマジックパケットを後で(別のDebianマシンから)送信してウェイクアップできます。カードのMACアドレスを持っています。MACでイーサネットカードにpingして、カードがオンになっているかどうかを確認する方法はありますか?

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メッセージを送信しています。

28
Alastor Moody

代わりにツールarpingを使用すると幸運になるかもしれません。ツールpingOSIモデル のレイヤー3レベルで機能しますが、arpingはレイヤー2で機能します。

ただし、このツールを使用しても、システムのIPを知る必要があります。それには2つのバージョンがあり、ほとんどのUnix(Alexey Kuznetsov's)に含まれている標準バージョンは、IPアドレスのみを処理できるバージョンです。 他のバージョン (Thomas 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は、ICMPパケットを送信する代わりにARPパケットを送信することを除いて、pingと同様に機能します。

MACだけを使用してシステムのIPを取得する

MACからIPへの逆ルックアップを行うためのいくつかの方法を次に示します。

  1. nmap

    $ nmap -sP 192.168.1.0/24
    

    次に、対応するマシンのarpキャッシュを調べますarp -an

  2. fping

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

    次に、上記と同じようにarpキャッシュを調べます。

  3. ping

    $ 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
    
23
slm

NICだけでは応答が送信されないため、通常のNICにpingを送信することはできません。

実行中のコンピュータのみが返信を送信できます

通常のネットワークインターフェイスカードは、それ自体では応答を送信しません。そのためには、コンピューターでソフトウェアを実行する必要があります。

コンピュータのCPUの電源が切られている場合、pingに応答を送信する実行中のソフトウェアはありません。

Wake-on-LANは単方向です

Wake-on-LAN は、コンピュータがNICのみを部分的にパワーオンしてイーサネットフレームを受信し、それらの中で魔法のウェイクアップシーケンスを探すことを許可しますが、NICはまだ応答を送信しません。 Wake-on-LANは厳密に単方向です。送信された応答はありません。

例外

たとえば、完全な TCPハンドシェイクオフロード を実装するNICのように、独自に応答を送信できる特定のNICがあります。

12
pabouk

ether-wakeコマンドはMACアドレスで機能するため、(a)IPアドレスは不要であり、(b)害を及ぼすことなくコマンドを送信できます(すでに起動している場合は、起動しても影響はありませんか?)

arp -anを使用してMACをgreppingし、ターゲットホストのIPを取得することで、既存のarpキャッシュのリストを表示できます。ただし、arpはキャッシュであるため、キャッシュから「タイムアウト」した可能性があります(それでも「起動」しています)。次に、次のようにブルートフォースメソッドを使用してIPを見つける必要があります。

 Sudo nmap -sP 192.168.2.0/24 | less  

(そして00:0c:0d:ef:02:03を探してください)-提供されているファイアウォールなどのものが邪魔になりません!

5
Drav Sloan

これは、arpingの異なるバージョンや複雑なbashスクリプトには依存しません。

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

私はarpではなくarp-scanを使用しました。これは、はるかに高速に実行されるようです。

0
Julian Knight

MACアドレスを介してpingする簡単なスクリプトを次に示します。保存して実行するだけです
macping aa:bb:cc:dd:ee:ff

結果をデイジーチェーンして、条件付きで他のことを行うこともできます。

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
Mtl Dev

私のアプリケーションは、ワークステーションのドキュメントディレクトリを取得するためにワークステーションに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
Don Matheson