Listar as máquinas/dispositivos online em determinada rede

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

[ Hits: 2.698 ]

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

Convertendo varchar em date no MySQL

Como alterar o tamanho da janela do Tuxpaint

Agendando tarefas com Python (schedule)

ERROR 144 - Table XXX is marked as crashed and last (automatic?) repair failed [Resolvido]

Contador de linhas em consultas SQL

Leitura recomendada

Monitorando o CPU no GNU/Linux em modo texto

Mágicas com o utilitário screen em conexões remotas

Encriptando e compactando arquivos com o zip

Backup de dados no Linux

Mantendo o programa em execução após logout

  

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