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?
Verifique o arp-scan command - 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
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.
No windows isso seria "arp -a
" Acredito que um equivalente 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).
Se sua rede for 192.168.0.0/24
, crie um arquivo executável com o seguinte código; Altere 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
Tente instalar nmap
(Sudo apt-get install nmap
) e digite nmap 192.168.1.0/24
substituindo 192.168.1
pelas 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
), o qual deve emitir uma ping
para cada máquina na rede, mas, na minha experiência, não sempre funcione corretamente.
Surgiu 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}'
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á os 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ígitos 1
, filtramos para isso com | grep \(1
(barra invertida é necessária para escapar dos parênteses)
Pecado
Esteja ciente de que, se dois dispositivos tiverem o mesmo nome, nmap
mostrará apenas o que estava conectado ao roteador last
Elaborando a resposta de Anders Larsson -
#!/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