Pergunta

Eu gostaria de procurar um determinado endereço MAC na minha rede, tudo a partir de um script Python. Eu já tenho um mapa de todos os endereços IP ativos na rede, mas não consigo descobrir como para recolher o endereço MAC. Alguma idéia?

Foi útil?

Solução

Você precisa ARP . biblioteca padrão do Python não inclui qualquer código para que, assim que você quer necessidade de chamar um programa externo (o seu sistema operacional pode ter uma utilidade 'arp') ou você precisa para construir os pacotes você mesmo (possivelmente com uma ferramenta como o scapy .

Outras dicas

Este artigo , "Enviar artesanais Ethernet Frames em Python ( ARP por exemplo)", parece ser exatamente o que você está procurando.

Eu não acho que há um construído em forma de obtê-lo de si Python.

A minha pergunta é, como você está recebendo a informação IP da sua rede?

Para obtê-lo a partir de sua máquina local você pode analisar ifconfig (unix) ou ipconfig (Windows) com pouca dificuldade.

Se você quer uma solução Python puro, você pode dar uma olhada em scapy para pacotes de artesanato (você precisa enviar pedido ARP, e inspecionar respostas). Ou se você não se importa invocar programa externo, você pode usar arping (UN * x sistemas, eu não sei de um Windows equivalente).

Parece que não há uma maneira natural de fazer isso com Python. Sua melhor aposta seria a de analisar a saída de "ipconfig / all" no Windows, ou "ifconfig" no Linux. Considere o uso de os.popen () com alguns regexps.

depende da sua plataforma. Se você estiver usando * nix, você pode usar o comando 'arp' para procurar o endereço mac para um determinado (assumindo IPv4) endereço IP. Se isso não funcionar, você pode executar ping o endereço e, em seguida, olha, ou se você tiver acesso à rede raw (usando BPF ou algum outro mecanismo), você pode enviar seus próprios pacotes ARP (mas que é provavelmente um exagero).

Você gostaria de analisar a saída de 'arp', mas o cache de kernel ARP irá conter apenas os endereços IP (es), se esses hosts ter comunicado com o host onde o script Python está em execução.

ifconfig pode ser usado para exibir os endereços MAC de interfaces locais, mas não aqueles na LAN.

Mark Pilgrim descreve como fazer isso no Windows para a máquina atual com o módulo de Netbios aqui . Você pode obter o módulo Netbios como parte do pacote Win32 disponível em python.org. Infelizmente, no momento não consigo encontrar a documentação no módulo.

como python não foi feito para lidar com questões específicas do OS (que é suposto ser interpretado e multiplataforma), gostaria de executar um comando externo para fazê-lo:

no UNIX o comando é ifconfig

Se você executá-lo como um tubo que você obter o resultado desejado:

import os
myPipe = os.popen2("/sbin/ifconfig","a")
print(myPipe[1].read())
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top