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メッセージを送信しています。
代わりにツールarping
を使用すると幸運になるかもしれません。ツールping
は OSIモデル のレイヤー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への逆ルックアップを行うためのいくつかの方法を次に示します。
nmap
$ nmap -sP 192.168.1.0/24
次に、対応するマシンのarpキャッシュを調べますarp -an
。
fping
$ fping -a -g 192.168.1.0/24 -c 1
次に、上記と同じようにarpキャッシュを調べます。
ping
$ ping -b -c1 192.168.1.255
次に、上記と同じようにarpキャッシュを調べます。
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
NICだけでは応答が送信されないため、通常のNICにpingを送信することはできません。
通常のネットワークインターフェイスカードは、それ自体では応答を送信しません。そのためには、コンピューターでソフトウェアを実行する必要があります。
コンピュータのCPUの電源が切られている場合、pingに応答を送信する実行中のソフトウェアはありません。
Wake-on-LAN は、コンピュータがNICのみを部分的にパワーオンしてイーサネットフレームを受信し、それらの中で魔法のウェイクアップシーケンスを探すことを許可しますが、NICはまだ応答を送信しません。 Wake-on-LANは厳密に単方向です。送信された応答はありません。
たとえば、完全な TCPハンドシェイクオフロード を実装するNICのように、独自に応答を送信できる特定のNICがあります。
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を探してください)-提供されているファイアウォールなどのものが邪魔になりません!
これは、arpingの異なるバージョンや複雑なbashスクリプトには依存しません。
ping $(arp-scan --localnet | grep 80:1f:02:fa:90:b7 | awk ' { printf $1 } ')
私はarpではなくarp-scanを使用しました。これは、はるかに高速に実行されるようです。
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;
私のアプリケーションは、ワークステーションのドキュメントディレクトリを取得するためにワークステーションに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