Detecta rapidamente via MAC se as entidades estão presentes em uma rede?

1

Existe uma maneira rápida e confiável de usar o endereço MAC de um dispositivo para determinar se ele está atualmente conectado a uma rede de um PC / Servidor Windows? Se não, então de um servidor Ubuntu?

  • arp -a não funciona sozinho, pois os itens ficam no cache por muito tempo.
  • arp -a combinado com a limpeza do cache a cada 5 minutos pode funcionar, mas parece ineficiente e só funciona se o cache for totalmente preenchido em 5 minutos. Seria?

Antecedentes: Eu me cansei de trabalhar no trabalho, e então eu escrevi um aplicativo rápido que funciona como um serviço do Windows, verifica se o meu telefone está presente na rede da empresa periodicamente, registra isso em um banco de dados e hospeda um site que permite ver quando eu estava no escritório, somando os dados em um determinado intervalo (incrível o que você pode fazer com as bibliotecas certas em poucas horas).

Demorou cerca de uma semana até que a empresa decidisse que gostariam que todos usassem o aplicativo no lugar do nosso sistema de relógio, sempre que possível.

Originalmente, eu estava usando uma reserva de DHCP e pingando periodicamente meu telefone Android para detectá-lo. Ao expandir, no entanto, eu rapidamente me deparei com a questão de que os iPhones não respondem a pings. Além disso, os pings são lentos. Demora cerca de um segundo por telefone para confirmar de forma confiável via ping que está lá.

Eu tentei executar o arp -a e vasculhar o resultado para as correspondências do MAC, mas os itens permanecem no cache do arp praticamente indefinidamente. Eu considerei ler o cache, depois liberá-lo depois, mas não sei se ele será repovoado com segurança a tempo. Essa é uma solução em potencial se isso acontecer, embora eu não goste da ideia de liberar o cache do arp a cada cinco minutos.

Minha solução atual é fazer uma pesquisa SNMP em nossos pontos de acesso para reunir seus clientes conectados e analisá-los para ver se consigo encontrar correspondências MAC. É rápido e confiável, mas é muito específico para os pontos de acesso em questão. Se desligarmos os pontos de acesso, os próximos poderão não listar seus clientes conectados via SNMP. Mesmo se o fizerem, precisarei reconfigurar as pesquisas snmp.

Estou pensando que, se houver uma porta conhecida que aceite conexões em qualquer telefone, eu poderia abrir uma conexão tcp para isso e, em seguida, fechá-la no lugar de um ping, mas acho que deve haver uma camada rápida 2 solução aqui em algum lugar.

    
por Casey 11.08.2016 / 03:06

3 respostas

1

Não use arp . Use arping .

link

Arping is a computer software tool for discovering and probing hosts on a computer network. Arping probes hosts on the attached network link by sending Link Layer frames using the Address Resolution Protocol (ARP) request method addressed to a host identified by its MAC address of the network interface.

The utility program may use ARP to resolve an IP address provided by the user. The function of arping is analogous to the utility ping for probing the network with the Internet Control Message Protocol (ICMP) at the Internet Layer of the Internet Protocol Suite.

É basicamente o que o arp faz, mas sem todo o negócio de armazenamento em cache do OS ARP, ou seja, apenas envia solicitações arp únicas e literais no fio.

P.S. Lembre-se de que todo o negócio ARP funcionará apenas em uma única sub-rede local. Se você precisar de um alcance mais amplo, precisará executá-lo no (s) roteador (s).

P.P.S. Você pode usar apenas concessões DHCP curtas (por exemplo, 1 minuto a 5 minutos). Concedido, dispositivos da Apple são conhecidos por desobedecer a especificação DHCP no passado, mas isso não deve ser tão ruim nos dias de hoje. Eu espero.

P.P.P.S. Mesmo arping não será 100% confiável (embora deva ser acima de 99%). Alguns dispositivos ignoram solicitações arp de entrada não solicitadas, assim como alguns dispositivos ignoram pings. Sim, isso viola o IETF, mas também ignora os pings ...

Woof.

    
por 11.08.2016 / 14:38
0

Você estava correto ao usar o ARP. Porque você não quer contar com o dispositivo dizendo a você na rede, que é outra maneira, você poderia fazê-lo sozinho. O ARP pode facilitar isso, e não apenas lhe dará o endereço MAC, mas também lhe dará o endereço IP que eles estão usando na rede. Quando você limpar o arpcache, ele será repovoado conforme necessário. Isso significa que ele só preencherá o cache com os endereços para os quais ele se comunicou na rede.

Uma solução melhor, se você já conhece os endereços mac dos clientes, pode atribuir endereços IP estáticos à rede. Isso resolverá seu problema de armazenamento em cache até o ponto em que o cache periodicamente se torna obsoleto. O que significa que da próxima vez que sua interface de rede tiver que se comunicar com o dispositivo, ele fará outra pesquisa. Agora, desde que você tem o problema com dispositivos da Apple não ping de volta, ia sugerir, você sempre pode fazer ping suas redes de transmissão. assim, por exemplo, se o seu gateway é 192.168.1.1, a transmissão é 192.168.1.255 e se você enviou um ping para isso, todos os dispositivos que aceitarem pings responderão a você.

Então, para re-cap, você pode continuar limpando o cache de arp como ele irá repovoar de forma confiável como é necessário para o protocolo TCP / IP para a troca de pacotes entre computadores e roteadores etc. sua interface de rede. Ou no aplicativo, ele detecta quando se conecta à rede da empresa e envia um ping para o servidor em uma porta diferente do icmp padrão, faz com que o servidor ouça os pings mencionados e você pode documentar tudo o que precisa. Ou apenas faça o aplicativo pingar seu servidor de vez em quando. Só porque o dispositivo não aceita pings, não significa que não possa enviar um.

    
por 11.08.2016 / 03:52
0

Existe um aplicativo para Android chamado Fing que basicamente verifica e exibe informações (incluindo IPs e MACs) sobre todos os dispositivos em uma rede.

Não sei quais protocolos ele usa, mas detecta dispositivos da Apple. Você poderia usar algo como o Wireshark para tentar fazer engenharia reversa no aplicativo e usar a mesma técnica na sua ferramenta. (Alguém já tentou em um site Stack Exchange relacionado )

    
por 11.08.2016 / 14:21