Listar as máquinas/dispositivos online em determinada rede

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

[ Hits: 3.127 ]

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]

Como instalar última versão Node.js via repositório no Ubuntu, Debian e derivados

Cmatrix - screensaver do filme no seu terminal

Descobrindo quais são seus dispositivos de entrada

Salvar automaticamente no Vim

Leitura recomendada

Sudo não funciona com comandos gráficos no Slackware 15.0

Comando "less" Colorido no Shell

Macete para busca reversa de comandos

Obtendo lista dos repositórios de pacotes em sistemas derivados do Debian

Instalar pacotes recomendados e sugeridos no terminal com o APT-GET

  

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