MACでNICにpingを実行できますか


28

どこかのDebianマシンにNICカードがあります。マシンはオフになっていますが、後で(別のDebianマシンから)wake-on-lanマジックパケットを送信してウェイクアップできるように、NICカードがオンになっているかどうかを知る必要があります。カードの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メッセージを送信しています。

回答:


23

arping代わりにツールを使用する方が幸運かもしれません。ツールは、pingレイヤ3レベルで動作するOSIモデルに対し、arpingレイヤ2で動作します。

ただし、このツールではシステムのIPを知る必要があります。それには2つのバージョンがあり、ほとんどのUnix(Alexey Kuznetsovのもの)に含まれている標準バージョンは、IPアドレスのみを処理できるバージョンです。他のバージョン(トーマス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)

arpingpingICMPパケットを送信する代わりに、ARPパケットを送信する以外は同様に機能します。

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
    

3
arpingMACアドレスをパラメーターとして使用できますarping -c 5 38:e7:d8:63:5e:a6

@MichaelMrozek-誰かが基本的に私の答えをコメントとして投稿し、2つのバージョンのarpingについて私が言ったことを読んでいないので、それをしました。他の答えは削除されたように見えるので、大胆なフラストレーションを解消してくれてありがとう。
slm

助けてくれてありがとう。これを解決済みとしてマークします。BIOSセットアップにWOLオプションが見つかりませんでした。これは私の推測です:BIOSはWOLをオンにしませんでしたが、NICはオンにしました。そのため、NICは最初のWOLパケットで起動し、BIOSにメッセージを送信していました。しかし、BIOSでオンになっていないため、BIOSは何もしませんでした。この瞬間以降、NICはpingに応答しましたが、起動していたため、マシンは応答しませんでした。簡単な質問:BIOSでWOLをオフにし、NICで同時にオンにすることは可能ですか?
アラ

1
@AlastorMoody-NICのWOLをオンにしてBIOS WOLをオフにすることはおそらく許可されていると思います。ただし、BIOSがWOLをサポートしていない場合、NICがWOLをサポートしていても、それを利用できるとは思いません。WOLに関するウィキペディアの記事:en.wikipedia.org/wiki/Wake-on-LANを参照してください。「マジックパケットのトラブルシューティング」セクションで私と同じことを言います。
slm

@niervol:arpingMACアドレスへ:はい、Linux iputilsからのarpingの 2つの実装があります。2 . Thomas Habetsによるarpingです。--- 2.実装のみがMACアドレスをpingできますが、そのようなpingは非常にトリッキーです:pingされたマシンは、TCP / IPを設定する必要があり(少なくともIPアドレス)、pingに応答できる必要があります。ブロードキャストIPアドレス。
パブーク

12

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

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

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

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

Wake-on-LANは単方向です

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

例外

例えば完全なTCPハンドシェイクオフロードを実装するもののように自分で返信を送ることができるある特別なNICがあります。


1
+1 —これは、OPの質問に真に対処する唯一の答えです。「ウェイクオンLANは単方向です」。
セラダ

5

ether-wakeコマンドはそう確かに()IPアドレス、および(b)を必要としませんが、MACアドレスで動作します(それはすでに起きていた場合、それは影響を与えないだろう目覚め、?)害せずにコマンドを送信することができます

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

 sudo nmap -sP 192.168.2.0/24 | less  

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


今はマシンを起こしたくありません。しかし、オフサイトに行き、WOLパケットを介してマシンの電源を入れると、NICがメッセージを受信できることを確認したいので、電源がオンになることを知っています。そのため、IPまたはMACでpingを実行し、起動しないようにします。
アラ

2
スリープ状態のマシンはpingに応答しません。マシンの電源がオンになっていて、IPでpingを実行すると(ホストが応答すると)、arpキャッシュにエントリが追加されます。そこのエントリがホストのMACアドレスと一致する場合、それが機能する合理的な可能性があります(他のネットワークファイアウォール、ルーター、およびether-wake到達できない原因となる他の物理的な問題がありません)。私は実際にオンサイトで別のホストにアクセスし、ターゲットマシンをスリープ状態にしてからを試みますether-wake。WOLがどのように動作するかの性質上、要求はとにかくホストと同じサブネット上に送信する必要があります
Dravスローン

2
@DravSloan例えばApples Time Capsuleで利用可能なBonjourプロキシは、この問題を処理するための非常に独創的な方法です。マシンはスリープしますが、ルーターはそれに応答し、プロキシが処理できなくなったときにのみウェイクアップします。
トールビョーンラヴンアンデルセン

最初にテストせずにWOLに依存しないでください。その場合は、むしろIPMIカードを入手してください。
sjas

0

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

以下は、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

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

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

私は、arpではなくarp-scanを使用しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.