Suponha que você tenha alguma placa incorporada com Ethernet conectada à porta Ethernet do seu laptop. Você não sabe nada sobre a configuração da rede (ainda). Você sabe que ele inicializa, mas não tem cabeça e só possui uma porta Ethernet. Ele NÃO possui um endereço IP (ainda).
Como você descobre o endereço MAC do dispositivo?
Eu olhei para arp, arping, arp-scan, arpwatch. A única coisa que descobri foi usar o tshark e vasculhar o vômito manualmente.
Responder1
A execução simples tshark
ou tcpdump
produz resultados confusos, porque todo o tráfego originado de sua máquina também é registrado.
Tentar
tcpdump -i eth0 -lenq 'ether src not <your_mac>'
-e
captura o quadro Ethernet também-l
libera o buffer stdout imediatamente.-n
não resolva nomes de host-q
fique mais quieto.- substitua
<your_mac>
pelo endereço MAC da sua interface local, conforme encontrado, por exemploip addr show
, . - obviamente substitua
eth0
pela interface correta. Se você estiver no Windows, usetshark -D
para listar todas as interfaces. - (Editar)No Linux você pode usar
tcpdump
em vez de instalartshark
o que requer a instalação de todo owireshark
pacote.tcpdump
deve estar pré-instalado no Ubuntu (está no meta-pacoteubuntu-standard
).
Alternativa:Se você deseja endereços MAC de origem apenas como saída, faça (inspirado e descaradamente adaptado pelo comentário dos OPs abaixo)
ETH=eth0;MAC=$(cat /sys/class/net/$ETH/address); tcpdump -lenq -i $ETH "ether src not $MAC" | awk '{print $2}'
Melhor iniciar a captura sem link e depois conectar o cabo.
Não acho que haja uma maneira de evitar farejar o tráfego. A razão pela qual o ARP falha é que o dispositivo não possui endereço IP e não responde às solicitações ARP.
Outra solução possível seria conectar o dispositivo a um switch gerenciado e ler a tabela de endereços MAC, mas acho que essa não é uma opção para você.
Em qualquer caso, para ser detectável, o dispositivo precisa enviaralgunstipo de tráfego Ethernet. Se você tiver sorte, ele enviará uma descoberta DHCP/Bootp que você poderá detectar.
(Editar)Por que o host não mantém uma tabela MAC como um switch? Bem, não é necessário, porque não é uma opção. Ao contrário de um switch, a decisão sobre qual interface envia um quadro Ethernet é feita antecipadamente de acordo com a tabela de roteamento. O pacote IP é empacotado em um quadro apropriado após a pesquisa ARP.
Claro, você pode transformar sua máquina em um switch L2 adequado. Você pode criar uma ponte entre múltiplas interfaces físicas. Eu brinquei um pouco com isso e descobri que você pode conseguir uma bela mesa MAC dessa maneira!
Instale
bridge-utils
a partir do repositório.Crie uma nova ponte Ethernet em
/etc/network/interfaces
auto br0 iface br0 inet static # dhcp goes as well address ... network ... bridge_ports eth0 up /sbin/brctl setageing br0 300 up /sbin/brctl stp br0 0
Isso define uma "ponte" (na verdade não há ponte - apenas uma interface) sem spanning-tree stp br0 off
. Os endereços envelhecerão após 300 anos. Defina ao seu gosto, mas não muito baixo.
Levante a ponte:
ifup br0
Verifique se está tudo certo
brctl show
e visualize a tabela MAC:brctl showmacs br0
Lucro (?)
Responder2
Você pode usar o wireshark para capturar todo o tráfego e filtrá-lo por bootp ou usar -e
a opção para imprimir informações da camada de link e filtro de bootp com tcpdump:
http://www.tcpdump.org/tcpdump_man.html
sudo tcpdump -i any port bootps -e