Listar as máquinas/dispositivos online em determinada rede

Publicado por Fábio Berbert de Paula em 30/07/2020

[ Hits: 3.113 ]

Blog: https://fabio.automatizando.dev

 


Listar as máquinas/dispositivos online em determinada rede



Vou apresentar uma sequência de comandos à la administrador de sistemas raiz para listar todas as máquinas ou dispositivos online em determinada rede.

Como exemplo vou usar minha rede interna, que vai de 192.168.0.1 até 192.168.0.255:

echo 192.168.0.{1..255} | xargs -n1 -P0 ping -c1 | grep "bytes from" | sed -se 's/^.* from \([0-9\.]*\):.*$/\1/' | sort -V

Onde:

echo 192.168.0.{1..255}

Imprime de 192.168.0.1 até 192.168.0.255.

xargs -n1 -P0 ping -c1

O argumento -n1 diz que é para executar um comando para cada argumento. Como estou passando 255 argumentos via pipe, o xargs irá disparar 255 comandos ping, um para cada argumento. Você pode trocar o "1" pelo número que quiser, mas no caso do ping não irá funcionar.

E o argumento -P indica que execução paralela. Se eu quiser executar 3 pings por vez, a sintaxe seria -P3. Em nosso exemplo estamos usando -P0, que indica ao xargs para paralelizar quantos "ping" o sistema operacional permitir.

Por fim, temos a execução do comando "ping -c1 IP", que dispensa explicação... ou "man ping" se não entendeu né minha filha! rsrs

grep "bytes from"

Filtrar a saída do ping apenas pela linha de resposta, a que contém o seguinte formato:

64 bytes from xxx (xxx): icmp_seq=1 ttl=53 time=14.7 ms

Logo, se o IP informado estiver offline, o grep acima irá retornar vazio.

sed -se 's/^.* from \([0-9\.]*\):.*$/\1/'

Lembram da linha acima filtrada pelo grep? Este sed extrai o endereço IP que está entre parêntesis.

sort -V

Ordenar por versão. Um número de IP é similar a um número de versão. O sort consegue identificar isso e ordenar corretamente.

Por exemplo, em um sort normal teríamos:

192.168.0.1
192.168.0.10
192.168.0.14
192.168.0.2
192.168.0.3


Já em um "sort -V":

192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.10
192.168.0.14


NOTA: eu sei, é possível fazer isso de forma bem mais simples utilizando o nmap, mas aí eu não teria a oportunidade de explicar o recurso de multi-threads do xargs por exemplo... já conhecia ele? :)

Outras dicas deste autor

Erro: "W: Possible missing firmware... for module" [Resolvido]

Descobrindo o PageRank de um site via linha de comando

pydance, um jogo para quem tem gingado

Conferência Internacional Software Livre Brasil

Como instalar Opera no Debian 10 Buster

Leitura recomendada

Imprimindo "man pages"

Exibir notificações quando um comando é concluído (Ubuntu 18.04.1)

flags de comando para ls

Solução para congelar a pasta do usuario no Linux. (Lan House)

Como desmontar um compartilhamento NFS travado

  

Comentários
[1] Comentário enviado por maurixnovatrento em 30/07/2020 - 22:39h


Bem legal.

___________________________________
Conhecimento não se Leva para o Túmulo.

[2] Comentário enviado por eduardo em 03/08/2020 - 08:03h

Ótima dica Fábio! Desconhecia a possibilidade de multi-threads do xargs. Sensacional!
Uma nota: na realidade, o comando vai listar os dispositivos que respondem pacotes ICMP (ping) na rede, não os online. Se algum dispositivo estiver com o ICMP bloqueado, vai retornar que está offline, mesmo estando online. Por exemplo, estações windows com firewall habilitado bloqueiam o ping. Em um cenário em que você executa o comando para "ver um IP livre" para configurar um equipamento com IP manual, corresse o risco de duplicar o IP na rede (caso acerte algum que está sendo usado). Mas há solução!
Sempre que você envia um ping, mesmo que o equipamento de destino não responda, o endereço IP + MAC é adicionado na tabela ARP. O que não estão na rede, vai ter o MAC como "incompleto". Sendo assim, basta incrementar o comando com:
# arp -an | grep -v incompleto | cut -d' ' -f2 | sort

Agora tens algo mais confiável =D

[3] Comentário enviado por fabio em 03/08/2020 - 14:23h

Obrigado pelos 2 cents Eduardo! (que foram mais que 2 cents claro rsrs)



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts