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?
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?
Respostas:
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:
É uma ferramenta muito útil para aprender.
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-scan
envia 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).
arp-scan
não encontra todos os dispositivos associados à minha rede sem fio. Agora, por exemplo, sudo arp-scan 192.168.2.0/24
mostra 2 resultados (.1 e .1), enquanto nmap -sn 192.168.2.0/24
mostra 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?
nmap
.
arp-scan
é legal !
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.
nmap
seria 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 printf
instruçã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
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 ping
aguarda resposta do host. Por padrão, ping
para 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 ping
tempo limite com a -w 1
bandeira. 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;...fi
pode 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 printf
comando 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 printf
funciona 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 ping
e printf
em uma função pingf
(sim, nome brega, eu sei). Agora, há também uma única main
funçã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
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
espero te ajudar
*** buffer overflow detected ***: netdiscover terminated
.
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.15
a 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 fping
para ter mais ideia.
angry ip scanner