Como encontrar todos os endereços IP usados ​​em uma rede

94

No meu trabalho, há muito computador e quero fazer uma piada. Posso fechar o computador pela rede, mas é difícil encontrar endereços IP.

Como posso encontrar facilmente todos os endereços IP online de 192.168.1.aa a 192.168.1.zz?

Eric Carvalho
fonte
4
tenteangry ip scanner
Web-E
2
a sério? você quer nossa ajuda para brincar com seus colegas de trabalho?
Dan H

Respostas:

141

Geralmente, nmapé bastante útil para verificar redes rapidamente.

Para instalar o nmap, digite o seguinte comando no terminal:

sudo apt-get install nmap

Depois que o aplicativo estiver instalado, digite o seguinte comando:

nmap -sn 192.168.1.0/24

Isso mostrará quais hosts responderam às solicitações de ping na rede entre 192.168.1.0 e 192.168.1.255.


Para versões mais antigas do Nmap, use -sP:

nmap -sP 192.168.1.0/24

Para referências adicionais, consulte as seguintes páginas:

Guia de instalação NMAP

Guia de Referência NMAP

É uma ferramenta muito útil para aprender.

Kevin Bowen
fonte
2
Nem todos os hosts respondem aos pings. O ARP é o caminho a percorrer, pelo menos no IPv4.
Marcin Kaminski
3
isso é o suficiente para mim e ele funciona na internet
1
é apenas o meu computador ou esse comando leva uma eternidade para ser executado?
JohnMerlino
4
Observe que, para acelerar a verificação do nmap, você deve adicionar os sinalizadores -T4 (velocidade) e -n (somente numéricos).
Sergiy Kolodyazhnyy 7/08/2015
3
Lembre-se de que você precisa do sudo para o comando nmap, caso contrário, nenhum resultado será retornado.
machineaddict
40

Se todos os computadores da sua rede forem Ubuntu ou qualquer outra distribuição que utilize avahi-daemon( DNS-SD ), você poderá obter uma lista detalhada deles (com nome do host e endereço IP), fazendo:

avahi-browse -rt _workstation._tcp

Se você deseja conhecer todos os endereços IP usados ​​na sua rede, pode usar arp-scan:

sudo arp-scan 192.168.1.0/24

Como não está instalado por padrão, você precisará instalá-lo sudo apt-get install arp-scan. arp-scanenvia pacotes ARP para a rede local e exibe as respostas recebidas, para mostrar até hosts com firewall (que bloqueiam o tráfego com base em pacotes IP).

Eric Carvalho
fonte
3
Este comando é definitivamente melhor que o acima. A execução do nmap levou séculos, mas este respondeu instantaneamente com os nós na rede especificada.
JohnMerlino
3
No meu caso, muitas vezes, arp-scannão encontra todos os dispositivos associados à minha rede sem fio. Agora, por exemplo, sudo arp-scan 192.168.2.0/24mostra 2 resultados (.1 e .1), enquanto nmap -sn 192.168.2.0/24mostra 4 resultados (.1, .2, .3 e .4). Portanto, parece que nmapé mais preciso (sei com certeza que existem 4 dispositivos conectados à rede). Por que é isso?
tigerjack89
2
Talvez eu tenha encontrado a resposta em um comentário para outra pergunta. "Deve-se observar que alguns dispositivos podem não aparecer a menos que estejam ligados. Meu nexus 4 não será exibido a menos que a tela esteja ligada." No entanto, é interessante que os mesmos dispositivos sempre respondam aos pings de nmap.
tigerjack89
arp-scané legal !
forzagreen
17

Nota para o leitor : A resposta original foi postada há um tempo atrás e na época em que eu estava apenas aprendendo scripts de shell. Veja a versão revisitada abaixo para obter um script novo e aprimorado com desempenho muito mais rápido.

Resposta original

nmapseria a minha escolha número 1, mas e se você não a tiver? A maneira DIY seria com um script de ping que percorre cada endereço IP possível na rede manualmente. O que temos aqui é just loop, onde definimos o último número no endereço, fazemos ping único silencioso no endereço, verificamos se o comando foi bem-sucedido ou não (e se foi bem-sucedido, o host está obviamente ativo) e a printfinstrução. De maneira rápida e suja, levei cerca de 10 minutos para escrevê-lo, mas o tempo de execução pode ser um pouco lento.

#!/bin/sh
# set -x
NUM=1

while [ $NUM -lt 256  ];do 
    ping -q -c 1 192.168.0.$NUM > /dev/null 
    RESULT=$(echo $?)
    if [ $RESULT -eq 0 ]; then 
        printf 192.168.0.$NUM"\n"
    fi
    NUM=$(expr $NUM + 1)
done

Resposta revisitada

Originalmente, publiquei essa resposta em agosto de 2015. Desde então, aprendi um pouco mais sobre scripts de shell e, uma vez que vi esse script, pensei que seria uma boa ideia revisar essa resposta para adicionar algumas melhorias. Aqui estão algumas idéias:

  • O script é obviamente lento e pingaguarda resposta do host. Por padrão, pingpara dois RTT, que podem variar dependendo de como sua rede está congestionada, e até onde eu entendo, o protocolo TCP duplica o tempo de espera a cada vez (pelo menos de acordo com isso ). Para que pudéssemos forçar o pingtempo limite com a -w 1bandeira. Como temos 256 endereços e assumimos 1 segundo para cada endereço, o script levará cerca de 256/60 = 4,27 minutos.

  • Realizar um comando e depois capturar seu status de saída $?não era realmente necessário. O if ... then;...fipode operar em comandos diretamente. Em outras palavras, é suficiente fazer isso:

    if ping -w 1 -q -c 1 192.168.0.$NUM > /dev/null ;
    then
         <some other code here>
    fi
    
  • O printfcomando pode ser reescrito da seguinte maneira:

    printf "IP %s is up\n" 192.168.0."$NUM"
    

    Isso é mais uma mudança estilística, mas é consistente com a forma como printffunciona e se parece em muitos outros idiomas, com a "$NUM"variável de citação . Não é necessário citar aqui - como estamos lidando apenas com números, não precisamos antecipar a divisão de palavras devido ao espaço em uma variável.

  • Uma melhoria de desempenho muito melhor pode ser alcançada se gerarmos vários processos em segundo plano. A edição do script abaixo faz exatamente isso. Coloquei o pinge printfem uma função pingf(sim, nome brega, eu sei). Agora, há também uma única mainfunção que executa o loop e a chamada pingf.

#!/bin/sh
# Uncomment for debugging
#set -x
pingf(){
    if ping -w 2 -q -c 1 192.168.0."$1" > /dev/null ;
    then 
        printf "IP %s is up\n" 192.168.0."$1"
    fi
}

main(){

    NUM=1
    while [ $NUM -lt 255  ];do 
        pingf "$NUM" &
        NUM=$(expr "$NUM" + 1)
    done
    wait
}

main

Quão melhor isso funciona? Nada mal, na verdade, leva alguns segundos.

$ time ./ping_script.sh                                                                      
IP 192.168.0.1 is up
IP 192.168.0.101 is up
IP 192.168.0.27 is up
IP 192.168.0.29 is up
    0m02.50s real     0m00.01s user     0m00.12s system

Coisas para manter em mente

  • O Windows (a partir do Windows 7, acho) começou a bloquear a resposta às solicitações de eco do ICMP. Há algumas perguntas sobre isso no Ask Ubuntu e em outros sites do tipo "Ei, meu computador Linux pode ser pingado, mas não o Windows, o que há com isso?" Esteja ciente do fato de que, para versões mais recentes do Windows, você precisa ativar a resposta ao eco do ICMP.
Sergiy Kolodyazhnyy
fonte
2
Eu gosto desse tipo de solução
Szenis 07/08/2015
15

A descoberta de rede pode ser sua resposta.

Para instalar via terminal:

sudo apt-get install netdiscover

exemplo de uso:

sudo netdiscover -r 192.168.1.0/24 -i wlan0

Um IP com endereços MAC aparecerá no seu terminal. Veja a captura de tela

insira a descrição da imagem aqui

espero te ajudar

referência

SP3B
fonte
Parece muito buggy, primeira tentativa e*** buffer overflow detected ***: netdiscover terminated .
Pablo A
Esta ferramenta não encontra várias coisas na minha rede.
Anthony
4

fpingé uma ótima ferramenta para varrer vários hosts em uma rede via ICMP. Se não estiver instalado, você pode instalá-lo:

sudo apt-get install fping

fping envia pacotes ICHO ECHO_REQUEST e marca um host como Up se receber ECHO_RESPONSE do host.

Por exemplo, para verificar os hosts da sub-rede 192.168.1.0/24, você pode:

fping -g 192.168.1.0/24

Para um número específico de hosts, por exemplo, de 192.168.1.15a 192.168.1.140:

fping -g 192.168.1.15 192.168.1.140

fping é altamente configurável, por exemplo, quantos pacotes serão enviados, tempo para aguardar resposta, formato de saída etc.

Marque man fpingpara ter mais ideia.

heemail
fonte