Como descobrir os endereços IP dentro de uma rede com um script bash?

5

É possível determinar os endereços IP dos sistemas dentro de uma rede usando um script bash? E como?

    
por Tarun 18.06.2013 / 13:52

3 respostas

6

Instale arp-scan ( sudo apt-get install arp-scan ) e adicione a seguinte linha ao script:

IPs=$(sudo arp-scan --localnet --numeric --quiet --ignoredups | grep -E '([a-f0-9]{2}:){5}[a-f0-9]{2}' | awk '{print }')

Agora você tem todos os endereços IP ativos na variável IPs .

Observação: isso funcionará somente em uma rede diretamente conectada, ou seja, não acessada por meio de um roteador.

PS: Se você instalar gawk , o comando pode ser encurtado para (obrigado belacqua ):

IPs=$(sudo arp-scan --localnet --quiet --ignoredups | gawk '/([a-f0-9]{2}:){5}[a-f0-9]{2}/ {print }')
    
por Eric Carvalho 18.06.2013 / 15:59
6

Esta resposta usa o comando nmap para coletar informações de hosts ativos na rede.

  

Nmap ("Network Mapper") é uma ferramenta de código aberto para exploração de redes   e auditoria de segurança. Ele foi projetado para varrer rapidamente grandes redes,   embora funcione bem contra hosts únicos. Nmap usa pacotes IP brutos   de novas maneiras para determinar quais hosts estão disponíveis na rede,   que serviços (nome do aplicativo e versão) esses hosts estão oferecendo,   que sistemas operacionais (e versões do SO) estão executando, que tipo   filtros de pacotes / firewalls estão em uso, e dezenas de outros   características.

Supondo que você precisa verificar o intervalo 192.168.0.X, tente:

nmap -v -sP 192.168.0.0/24

Em que 192.168.0.0 é o endereço de rede e /24 é a máscara de rede equivalente a 255.255.255.0 . Assim, o comando acima irá varrer 256 hosts.

Para coletar os endereços IP ativos, pode-se usar a seguinte linha:

IPS_UP=$(nmap -nsP 192.168.0.0/24 2>/dev/null -oG - | grep "Up$" | awk '{printf "%s ", }')

Na verdade, ela concatena a lista de endereços IP ativos (filtrados por grep ) em uma variável chamada IPS_UP :

  • nmap é executado com as opções -n (sem resolução de nomes), -sP (ping scan) e -oG para produzir uma saída processável em grep na saída padrão ( - ).
  • grep filtra apenas as linhas que contêm a palavra "Up" no final da linha ("$").
  • awk imprime a segunda coluna na lista de saída por nmap , que é o endereço IP, e acrescenta um espaço.
  • A substituição do comando $() permite que a saída da cadeia de comandos seja atribuída à variável IPS_UP .

O Network Mapper pode ser instalado usando sudo apt-get install nmap .

Observação
nmap pode descobrir mais hosts se for executado por um usuário privilegiado. Isso ocorre porque diferentes tipos de pacotes são enviados para varrer um host. Modificando a linha acima para ler sudo nmap ... permite executar o comando nmap como root.

    
por lgarzo 18.06.2013 / 17:23
0

Obviamente, esta é uma má ideia, mas eu tentei

#!/bin/bash

IP=$(ifconfig eth0 | grep Mask | cut -d ':' -f2 | cut -d " " -f1)
Mask=$(ifconfig eth0 | grep Mask | cut -d ':' -f4 | cut -d " " -f1)
IFS=.
IPArray=($IP)
MaskArray=($Mask)
NetArray=()
Start=0
Max=$(( 255 * 255 * 255 * 255 ))
for key in "${!IPArray[@]}";
do
   NetArray[$key]=$(( ${IPArray[$key]} & ${MaskArray[$key]} ))
   Start=$(( $Start + (${NetArray[$key]} << (3-$key)*8) )) 
done
IFS=
echo "Your IP Address   : $IP"
echo "Your N/W Mask     : $Mask"
echo "Your N/W Address  : ${NetArray[@]}"
echo "IPs to be Checked : $(( $Max - $Start ))"
for ((IPs=$Start; IPs <= $Max; IPs++))
do 
   IP=$(( IPs >> 24 ))
   IP="$IP.$(( (IPs >> 16) & 255 ))"
   IP="$IP.$(( (IPs >> 8) & 255 ))"
   IP="$IP.$(( IPs & 255 ))"
   $(ping -c 1 -w 1 $IP >& /dev/null)
   if [[ $? -eq 0 ]]; then
      echo "$IP exists in Network. Just $(( $Max - $IPs )) more to go."
   fi
done
    
por thefourtheye 18.06.2013 / 16:53

Tags