Pode um ping de um NIC pelo MAC

27

Eu tenho uma placa NIC em uma máquina Debian em algum lugar. A máquina está desligada, mas eu preciso saber se a placa NIC está ligada para que eu possa enviar um pacote mágico wake-on-lan mais tarde (de outra máquina Debian) para ativá-lo. Eu tenho o endereço MAC do cartão. Existe alguma maneira eu posso pingar a placa ethernet por MAC para ver se ele está ligado?

Eu tentei criar uma entrada ARP:

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

Isso não funcionou, já que a placa NIC não possui esse endereço IP. Assim, a placa NIC receberia a solicitação de ping, mas não responderia a ela. Existe alguma maneira de contornar isso?

Estou usando o pacote etherwake para enviar uma mensagem wake-on-lan.

    
por Alastor Moody 09.08.2013 / 20:25

6 respostas

22

Você pode ter mais sorte ao usar a ferramenta arping . A ferramenta ping funciona no nível da camada 3 do modelo OSI , enquanto arping trabalha na camada 2.

Você ainda precisa conhecer o IP do sistema, no entanto, com essa ferramenta. Existem duas versões, a padrão incluída na maioria dos Unixes (a de Alexey Kuznetsov) é a versão que só pode lidar com endereços IP. A outra versão (Thomas Habets ') supostamente pode consultar usando endereços 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 funciona de maneira semelhante a ping , exceto que, em vez de enviar pacotes ICMP, ele envia pacotes ARP.

Obtendo o IP de um sistema usando apenas o MAC

Aqui estão alguns métodos para fazer a pesquisa inversa de MAC para IP.

  1. nmap

    $ nmap -sP 192.168.1.0/24
    

    Em seguida, procure em seu cache de arp pela máquina correspondente arp -an .

  2. fping

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

    Em seguida, procure em seu cache de arp, o mesmo que acima.

  3. ping

    $ ping -b -c1 192.168.1.255
    

    Em seguida, procure em seu cache de arp, o mesmo que acima.

  4. nbtscan (somente windows hosts)

    $ 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
    
por 09.08.2013 / 22:54
12

Você não pode fazer o ping de um NIC normal porque o NIC sozinho não envia nenhuma resposta.

Apenas um computador em execução pode enviar respostas

As placas de interface de rede normais não enviam respostas por si mesmas. Eles sempre precisam de um software em execução no computador para fazer isso.

Quando a CPU do computador é desligada, não há software em execução que envie uma resposta a um ping.

O Wake-on-LAN é unidirecional

Wake-on-LAN permite que o computador deixe apenas a NIC ser parcialmente ligada para receber Quadros Ethernet e procure a seqüência de ativação mágica neles, mas a NIC ainda não enviará nenhuma resposta. Wake-on-LAN é estritamente unidirecional. Não há respostas enviadas.

Exceções

Existem determinados NICs especiais que podem enviar respostas por si próprios, como, por exemplo, os que implementam um descarregamento de handshake TCP completo

    
por 19.08.2015 / 11:43
5

O comando ether-wake funcionará pelo endereço mac, então certamente você (a) não precisará de um endereço IP e (b) poderá enviar o comando sem danos (se ele já estiver acordado, ele não terá impacto? )

Você pode ver a lista do seu cache de arp existente usando arp -an e grepping para o seu MAC para obter o IP do host de destino. No entanto, como arp é um cache, ele pode ter sido "expirado" do cache (e ainda estar "acordado"). Você pode ter que usar um método de força bruta para encontrar seu IP, como:

 sudo nmap -sP 192.168.2.0/24 | less  

(e depois procure por 00: 0c: 0d: ef: 02: 03) - desde firewalls e outras coisas assim não atrapalham!

    
por 09.08.2013 / 21:05
1

Aqui está um script simples para pingar via endereço mac. Basta salvar e executar, por exemplo, macping aa:bb:cc:dd:ee:ff

Você também pode encadear o resultado para fazer condicionalmente outras coisas, por exemplo:

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;
    
por 18.04.2017 / 20:10
0

Meu aplicativo era um servidor RSYNCing em uma estação de trabalho para obter o diretório Document da estação de trabalho ... mas a estação de trabalho não tinha um endereço IP garantido, mas tinha um endereço MAC conhecido (o endereço IP era feito pelo DHCP). este código usa o ping SOMENTE.

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
    
por 03.04.2017 / 03:34
0

Isso não depende de versões diferentes do arping nem de scripts bash complexos:

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

Eu usei o arp-scan em vez de arp, já que ele parece rodar muito mais rápido.

    
por 05.08.2017 / 01:15