Como posso listar todos os IPs na rede conectada, através do Terminal preferencialmente?

217

Usando o Ubuntu 10.10, eu queria saber se havia um comando de linha de comando que pode listar todos os IPs de dispositivos conectados à rede?

Eu usaria isso, por exemplo, para listar todos os computadores conectados à minha rede doméstica. Idealmente, ele precisa ser a linha de comando, pois eu vou executá-lo a partir do C ++.

Alguma ideia?

Christopher Gwilliams
fonte

Respostas:

240

Confira o comando arp-scan - você provavelmente terá que instalá-lo, por exemplo:

sudo apt-get install arp-scan

http://manpages.ubuntu.com/manpages/hardy/man1/arp-scan.1.html

E para dar mais detalhes:

sudo arp-scan --interface=eth0 --localnet

Onde eth0 é o seu dispositivo. Você pode encontrar seu dispositivo com:

ifconfig
Linker3000
fonte
Perfeito, obrigado. Retorna exatamente o formato que eu preciso.
Christopher Gwilliams
1
Funciona perfeitamente no OSX também! Instalado com o Brew, e a interface foi en0, ao invés de eth0, mas funciona muito bem.
nthonygreen
6
Se o seu conectado à sua rede usando o uso de wifi em wlan0vez de eth0.
Neil
3
Você pode conseguir isso para listar nomes de host, bem como endereços IP?
user1527227
2
Vale a pena notar que isso não usa o cache ARP: ele executa uma varredura real. Diferentemente da maioria das verificações do nmap, isso não pode cruzar os limites da camada 3, que geralmente é o que você deseja nesse cenário. (Em outras palavras, é limitado a sua sub-rede.)
Zenexer
111

Use o nmap. exemplo: nmap -sn 10.10.10.0/24O cache de arp irá dizer apenas aqueles que você tentou entrar em contato recentemente.

Keith
fonte
2
é 10.10.10.0 meu IP fornecido? O que é 24 neste caso? Obrigado.
kolonel
4
@kolonel Isso é apenas um exemplo. Você deve substituí-lo com sua rede. O 24 é "notação de barra" da máscara de sub-rede. Significa usar 24 bits da esquerda. É equivalente a 255.255.255.0.
Keith
2
@ Keith você sabe como eu iria descobrir o meu endereço de rede para usar? Ou é apenas o meu IP com 0/24 no final?
TMH
20

No windows isto seria " arp -a" eu acredito que um equivalente disso no Linux seria " arp -e".

Esta informação pode ser encontrada na página man do arp:

arp with no mode specifier will print the current content of the table.
-e : Use default Linux style output format (with fixed columns).
David
fonte
Parece que funciona (pode precisar de um jogo como eu estou em uma rede pública, por isso só parece listar todos os servidores da rede.
Christopher Gwilliams
Se eu estiver em uma rede doméstica, listarei apenas os dispositivos conectados ao meu roteador? Obrigado!
Christopher Gwilliams
1
Esse comando listará apenas os dispositivos no cache de arp atual do host e serão apenas aqueles que o host contatou recentemente.
Linker3000
Ambos funcionam no Linux, mas arp -aexibem (todos) hosts no estilo alternativo (BSD). Simpy rodando arpfaz o mesmo que rodar arp -eporque esse é o padrão.
simplegamer 02 de
15

Se a sua rede for 192.168.0.0/24, crie um arquivo executável com o seguinte código; Mude 192.168.0para a sua rede real.

#!/bin/bash
for ip in 192.168.0.{1..254}; do
  ping -c 1 -W 1 $ip | grep "64 bytes" &
done
Anders Larsson
fonte
Oi Anders ... A rede do usuário pode não ser 192.168.0.0/24; Eu fiz uma anotação. A formatação do site não gostava de um # !, e então violou a formatação do snippet de código: ao inserir código, use os botões de texto de bloqueio ou pré-formatado e revise sua resposta para a formatação adequada antes de enviá-la, como retornos de carro, guias e espaços podem ter sido removidos.
Nevin Williams
Além disso, ao fornecer um script que precisa ser colocado em um arquivo e tornado executável, em vez de simplesmente recortar e colar, é melhor que você especifique isso; Pode não ser óbvio para alguns o que é necessário para implementar sua solução.
Nevin Williams
12
Tecnicamente, isso só retornará hosts que respondem ao ping. Pode haver hosts conectados, mas não respondendo a solicitações de eco ICMP. Além disso, é possível transmitir um pacote para uma rede inteira especificando o endereço de broadcast, que é o último endereço na rede IP: o ping -c 1 -W 1 192.168.0.255 realizaria o mesmo que o loop for.
Nevin Williams
@NevinWilliams (required -b, removed -W para esperar mais) ping -b -c 1 192.168.0.255result "1 pacotes transmitidos, 0 recebidos, 100% perda de pacotes, tempo 0ms"
Aquarius Power
13

Tente instalar nmap( sudo apt-get install nmap) e digite nmap 192.168.1.0/24substituindo 192.168.1com as três primeiras partes do seu endereço IP (descobrir usando ip addr).

Você também pode obter um mapa da rede um pouco menos preciso (na minha experiência) executando ping 192.168.1.255(novamente substituindo 192.168.1), o que deve emitir um pingpara cada máquina na rede, mas, na minha experiência, nem sempre funciona corretamente.

Samadi
fonte
Na verdade, nenhuma das respostas sempre funcionará corretamente. IP não foi projetado com este requisito em mente, e existem coisas como VLANs privadas que tornam impossível encontrar outros hosts na mesma LAN.
Ron Maupin
2

Veio com o seguinte em um nexus usando tmuxcomo arp-scannão está no repo mas nmapveio pré-instalado, exibe apenas os endereços IP:

nmap -sn 192.168.1.1-254/24 | egrep "scan report" | awk '{print $5}'
zentek
fonte
1

Para uma lista mais compacta de dispositivos conectados:

nmap -sL 192.168.0.* | grep \(1

Explicação.

nmap -sL 192.168.0.* listará todos os IPs na sub-rede e marcará aqueles que tiverem nome:

Nmap scan report for 192.168.0.0
Nmap scan report for Dlink-Router.Dlink (192.168.0.1)
Nmap scan report for 192.168.0.2
...
Nmap scan report for android-473e80f183648322.Dlink (192.168.0.53)
...
Nmap scan report for 192.168.0.255

Como todos os registros interessantes começam com parêntese (e dígito 1, filtramos para isso com | grep \(1(barra invertida é necessária para escapar dos parênteses)

Quirk
Esteja ciente de que, se dois dispositivos tiverem o mesmo nome, nmapmostrará apenas o que foi conectado ao último roteador.

Alexander Malakhov
fonte
Se você tiver a mesma resposta exata para duas perguntas, talvez valha a pena considerar sinalizar as perguntas como duplicadas, em vez de postar respostas duplicadas. Dessa forma, o conhecimento pode ser compartilhado à medida que perguntas semelhantes são interligadas.
Mokubai
1
@Mokubai Você está certo, eu adicionei comentário ao OP. Isso mostra um problema interessante. Uma pesquisa rápida descobriu 6 duplicatas (este Q e 5 links) em 4 sites de rede (SU, Ask Ubuntu, SF, Unix). Claro que há muito mais! Como eu cuido disso? Idealmente, cada um desses 6 posts deve vincular a 5 outros. Adicionar todos esses links manualmente não é escalável. Então, por enquanto eu me vinculei a este post (mais votado). Outro problema é que é impossível marcar Q no AskUbuntu como uma duplicata do Q em SU. Hm ... Provavelmente, isso já foi discutido na meta?
Alexander Malakhov
não funciona para mim no Centos 7, apenas lista todos os endereços IP possíveis na rede sem nomes. arp-scan funcionou para mim.
Jeff
0

Elaborando a resposta de Anders Larrson -

#!/bin/bash
function scan ()
{
    for ip in $1.{1..254}; do
        ping -c 1 -W 1 $ip &
    done | sed -nE 's:^.* from ([0-9.]+).*time=(.*s)$:\1 (\2):p'
}

if [ $1 ]; then
    for baseip; do
        scan $baseip
    done
else
    scan 192.168.1
fi
Mathieu CAROFF
fonte