É possível executar ping em uma NIC por MAC

Eu tenho uma placa NIC em uma máquina Debian em algum lugar. A máquina está desligada, mas 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á-la. Tenho o endereço MAC da placa. Existe alguma maneira de fazer ping na placa Ethernet pelo MAC para ver se ela está ligada?

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, pois a placa NIC não tem este endereço IP. Portanto, a placa NIC receberia a solicitação de ping, mas não responderia a ela. Existe alguma maneira de contornar isso?

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

Resposta

Você pode ter mais sorte usando a ferramenta arping em vez disso. A ferramenta ping funciona no nível da camada 3 do modelo OSI , enquanto arping funciona na camada 2.

Você ainda precisa saber o IP do sistema, no entanto com esta ferramenta. Existem 2 versões de ele, o padrão incluído na maioria dos Unixes (Alexey Kuznetsov “s) é 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 um sistema ” s IP usando apenas o MAC

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

  1. nmap

    $ nmap -sP 192.168.1.0/24 

    Em seguida, procure em seu cache 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 arp, o mesmo que acima.

  3. ping

    $ ping -b -c1 192.168.1.255 

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

  4. nbtscan (hosts somente do 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 

Comentários

  • arping pode usar um endereço MAC como parâmetro: arping -c 5 38:e7:d8:63:5e:a6
  • @MichaelMr ozek – Eu fiz isso depois que alguém basicamente postou minha resposta como um comentário e não ‘ não leu o que eu disse sobre 2 versões de arping. A outra resposta parece ter sido excluída, então obrigado por eliminar minhas frustrações ousadas.
  • Obrigado pela ajuda. Marcando isso como resolvido. Não foi possível ‘ encontrar uma opção WOL na configuração do BIOS. Este é o meu palpite: o BIOS não tinha WOL ativado, mas a NIC tinha. Portanto, a NIC estava despertando no primeiro pacote WOL e enviando uma mensagem ao BIOS. Mas como não foi ativado no BIOS, o BIOS não fez nada. Desse momento em diante, a NIC respondeu ao ping, pois estava ativada, mas a máquina não. Pergunta rápida: é possível que o BIOS tenha WOL desligado e a NIC ligada ao mesmo tempo?
  • @AlastorMoody – eu diria que você ‘ provavelmente é permitido desligar o BIOS WOL w / NIC ‘ s WOL ativado. No entanto, se sua BIOS não ‘ suportar WOL, então eu não ‘ não acho que você ‘ poderei fazer uso dele mesmo que a NIC o faça. Consulte o artigo da wikipedia no WOL: en.wikipedia.org/wiki/Wake-on-LAN . Diz a mesma coisa que eu na seção ” solução de problemas de pacotes mágicos “.
  • @niervol: arping para um endereço MAC: Sim, existem duas implementações de arping 1. do Linux iputils 2. arte de Thomas Habets . — Apenas a implementação 2. pode executar ping em um endereço MAC, mas esse ping é muito complicado: a máquina com ping ainda precisa ter TCP / IP configurado (pelo menos um endereço IP) e deve ser capaz de responder a um ping para um endereço IP de transmissão.

Resposta

Você não pode executar ping em um NIC normal porque o NIC sozinho não envia respostas.

Apenas um computador em execução é capaz de 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 enviaria uma resposta a um ping.

Wake-on-LAN é unidirecional

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

Exceções

Existem certos NICs especiais que poderiam enviar respostas por si próprios, como por exemplo aqueles que implementam um descarregamento de handshake TCP completo .

Comentários

  • +1 – esta é a única resposta que realmente aborda o OP ‘ s pergunta. ” Wake-on-LAN é unidirecional “.

Resposta

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

Você pode ver a lista de seu cache ARP existente usando arp -an e grep para seu MAC para obter o IP do host de destino. No entanto, como arp é um cache, ele pode ter “atingido o tempo limite” do cache (e ainda estar “ativado”). Em seguida, 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 então procure 00: 0c: 0d: ef: 02: 03) – firewalls fornecidos e outras coisas semelhantes não atrapalham!

Comentários

  • Eu não ‘ não quero despertar a máquina agora. Mas quero garantir que a NIC possa receber minhas mensagens para que, quando eu for para fora do local e ligar a máquina por meio de um pacote WOL, eu saiba que ela vai ligar. É por ‘ que desejo fazer ping por IP ou MAC e não ativá-lo.
  • As máquinas adormecidas não respondem ao ping. Se a máquina estiver ligada e você executar ping por IP (e o host responder), ele colocará uma entrada no cache arp. Se a entrada lá corresponder ao endereço MAC do host, há uma chance razoável de que funcione (impedindo outros firewalls de rede, roteadores e outros problemas físicos que podem fazer com que ether-wake não alcançar). Na verdade, eu teria acesso a outro host no local, colocaria a máquina de destino em hibernação e tentaria ether-wake. Pela natureza de como WOL funciona, a solicitação terá que ser enviada na mesma sub-rede que o host de qualquer maneira
  • @DravSloan o Bonjour Proxy disponível em, por exemplo, O Time Capsule da Apples é uma maneira bastante engenhosa de lidar com esse problema. A máquina hiberna, mas o roteador responde por ela e só a desperta quando o proxy não pode ‘ não lidar mais com ela.
  • Não ‘ Não confie no WOL sem antes testá-lo. Em vez disso, obtenha um cartão IPMI nesse caso.

Resposta

Meu aplicativo era um servidor RSYNC entrando em uma estação de trabalho para obter o diretório de documentos 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 por DHCP). este código usa SOMENTE 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 

Resposta

Aqui está um script simples para fazer ping 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 outras coisas condicionalmente, 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; 

Resposta

Isso não depende de diferenças versões de arping nem em scripts bash complexos:

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

Eu usei arp-scan em vez de arp, pois ele parece ser muito mais rápido.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *