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


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?


195


origem


askubuntu.com/questions/82480/… || serverfault.com/questions/72380/… - Ciro Santilli 新疆改造中心 六四事件 法轮功
Mais duplicatas: 1  Obtendo todos os IPs de dispositivos conectados ao mesmo roteador. 2  Exibir lista de computadores em uma LAN no Linux - Alexander Malakhov
3  Melhor método e ferramentas para varredura IP local - Alexander Malakhov


Respostas:


Confira a arp-scan comando - 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

217



Perfeito, obrigado. Retorna exatamente o formato que eu preciso. - Christopher Gwilliams
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
Se o seu conectado à sua rede usando o uso de Wi-Fi wlan0 ao invés de eth0. - Neil
Você pode conseguir isso para listar nomes de host, bem como endereços IP? - user1527227
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 neste cenário. (Em outras palavras, é limitado a sua sub-rede.) - Zenexer


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


104



é 10.10.10.0 meu IP fornecido? O que é 24 neste caso? Obrigado. - kolonel
@kolonel Isso é apenas um exemplo. Você deve substituí-lo com sua rede. O 24 é "notação de barra" da máscara de sub-rede. Isso significa usar 24 bits da esquerda. É equivalente a 255.255.255.0. - Keith
@ 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
@ kononel:en.wikipedia.org/wiki/Classless_Inter-Domain_Routing - arkod


No windows isso 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).

19



Parece que funciona (talvez seja necessário ter uma reprodução, pois estou em uma rede pública, portanto, parece listar todos os servidores na rede. - Christopher Gwilliams
Se eu estiver em uma rede doméstica, listarei apenas os dispositivos conectados ao meu roteador? Obrigado! - Christopher Gwilliams
Esse comando listará apenas os dispositivos no cache do arp atual dos hosts e serão apenas aqueles que o host contatou recentemente. - Linker3000
Ambos funcionam no Linux, mas arp -a exibe (todos) os hosts no estilo alternativo (BSD). Simpy correndo arp faz o mesmo que correr arp -e porque esse é o padrão. - simplegamer


Se a sua rede é 192.168.0.0/24, faça um arquivo executável com o seguinte código; Mudar o 192.168.0 para 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

13



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 nu !, e assim violou a formatação do snippet de código: ao inserir código, use os botões de texto blockquote ou preformatted e revise sua resposta para 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
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 comando ping -c 1 -W 1 192.168.0.255 executaria o mesmo que o loop for. - Nevin Williams
@NevinWilliams (requerido -b, removido -W para esperar mais) ping -b -c 1 192.168.0.255 resultado "1 pacotes transmitidos, 0 recebidos, 100% de perda de pacotes, tempo 0ms" - Aquarius Power


Tente instalar nmap (sudo apt-get install nmap) e tipo nmap 192.168.1.0/24 substituindo 192.168.1 com as três primeiras partes do seu endereço IP (descubra 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), qual devemos um problema ping para cada máquina na rede, mas, na minha experiência, nem sempre funciona corretamente.


10



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


Veio com o seguinte em um nexo usando tmux Como arp-scan não está no repo mas nmap veio pré-instalado, exibe apenas os endereços IP:

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

2





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ênteses ( e dígito 1, filtramos por isso com | grep \(1 (barra invertida é necessária para escapar dos parênteses)

Quirk
Tenha em atenção que, se dois dispositivos tiverem o mesmo nome, nmap mostrará apenas o que estava conectado ao roteador último


0



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♦
@Mokubai Você está certo, eu adicionei comentário ao OP. Isso mostra um problema interessante. UMA rápido pesquisa 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 ser vinculado a outros 5. Adicionar todos esses links manualmente não é escalável. Então, por enquanto eu tenho ligado 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


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

0