2011-07-15 17:51:44 +0000 2011-07-15 17:51:44 +0000
65
65

Mostrar lista de computadores numa LAN em Linux

Eu sou um web dev que está a tentar lidar melhor com a segurança. Estou a tentar descobrir uma forma (em distros baseadas em Linux/Debian) de listar todos os computadores na mesma LAN em que o meu netbook está. Tentei “arp -n” mas não acho que seja uma lista completa, pois o meu iPhone está no mesmo router wi-fi do meu netbook, e isso não apareceu. Existe alguma forma melhor de obter uma lista completa de máquinas que partilham todas a mesma porta de entrada?

Respostas (11)

61
61
61
2011-07-15 17:55:50 +0000

Obtenha nmap . É o programa Trinity usado no The Matrix e pode fazer um scan para encontrar todos os dispositivos que estão ligados à LAN em que está e mais. Aqui é o guia de referência.

41
41
41
2014-12-09 15:56:20 +0000

É isto que eu utilizo, nmap, e um endereço que utiliza a notação de bloco CIDR da rede que se pretende digitalizar. Primeiro você precisa instalar o nmap, pois ele pode não vir pré-instalado com a sua distro. No Ubuntu:

sudo apt-get install nmap

Em seguida, descubra o seu endereço de rede usando ifconfig:

ifconfig

ifconfig output para a interface que quero digitalizar:

wlan1 Link encap:Ethernet HWaddr 00:1f:3b:03:d2:bf  
          inet addr:192.168.1.104 Bcast:192.168.0.255 Mask:255.255.255.0
          inet6 addr: fe80::21f:3bff:fe03:d2bf/64 Scope:Link
          ...

Use o endereço inet e a máscara para descobrir o endereço de rede na notação CIDR, mais em CIDR aqui . O endereço é:

192.168.1.0/24

Corra o nmap usando o parâmetro -sP, que não irá fazer mais do que verificar se o host está online:

sudo nmap -sP 192.168.1.0/24

A saída do nmap terá o seguinte aspecto:

Starting Nmap 5.21 ( http://nmap.org ) at 2014-12-09 10:52 EST
Nmap scan report for 192.168.1.1
Host is up (0.013s latency).
MAC Address: -MAC ADDRESS- (Cameo Communications)
...
Nmap done: 256 IP addresses (5 hosts up) scanned in 3.26 seconds

É isso, se precisar de mais ajuda com o nmap, veja a documentação oficial do nmap , ou corra:

nmap --help
18
18
18
2011-07-15 19:12:18 +0000

arp -n só lhe mostra máquinas na sua LAN com as quais a sua máquina já falou. Pode obter essa lista para melhor preenchê-la, pingando os endereços de broadcast e de todos os hosts multicasts:

O endereço de broadcast “todos” (em binário). Note que a maioria das pilhas de IP irá traduzir isto para os endereços de emissão da subrede de todas as subredes a que está ligado:

ping 255.255.255.255

O endereço de emissão da subrede da sua subrede actual. Assim, assumindo que está em 192.168.1.0/24:

ping 192.168.1.255

O endereço multicast “todos os anfitriões”. Gosto muito deste porque é mais provável que encontre hosts configurados para outras sub-redes IP, que por acaso estão ligados à mesma LAN Ethernet que você:

ping 224.0.0.1

Note que este método, e os outros métodos que vi mencionados em outras Respostas até agora, apenas procuram hosts de acesso IP na rede actual. É provavelmente tudo o que lhe interessa, mas é possível um atacante bisbilhotar, ou fazer coisas más a uma rede sem ser visível via IP.

8
8
8
2017-04-03 21:54:39 +0000

ip neigh e hosts. Não é necessário nmap / NÃO é necessário sudo.

Com base nisto, pode construir um script Python:

#!/usr/bin/env python

"""List all hosts with their IP adress of the current network."""

import os

out = os.popen('ip neigh').read().splitlines()
for i, line in enumerate(out, start=1):
    ip = line.split(' ')[0]
    h = os.popen('host {}'.format(ip)).read()
    hostname = h.split(' ')[-1]
    print("{:>3}: {} ({})".format(i, hostname.strip(), ip))

Download via

wget https://gist.githubusercontent.com/MartinThoma/699ae445b8a08b5afd16f7d6f5e5d0f8/raw/577fc32b57a7f9e66fdc9be60e7e498bbec7951a/neighbors.py

(ou simplesmente arp … Eu não vi isso antes)

4
4
4
2016-05-10 08:21:24 +0000

Você poderia tentar pingar toda uma determinada sub-rede com um pequeno script de shell linux, por exemplo

$ for ip in $(seq 1 254); do ping -c 1 192.168.1.$ip>/dev/null; [$? -eq 0] && echo "192.168.1.$ip UP" || : ; done
4
4
4
2013-12-18 01:44:36 +0000

Não achei as respostas existentes suficientemente satisfatórias, por isso pensei em tentar. Afinal, a FAQ sugere fornecer contexto para links .

nmap é ótimo, se um pouco confuso de usar. Aqui está algo que eu corro para descobrir dispositivos de rede local que são na sua maioria copiáveis. nmap -sP (ou nmap -sn) digitaliza por pinging . Existem outras opções para ‘descoberta do host’, como com nmap -sL ou nmap -Pn.

Caminho #1.

ehtesh@x200arch:~$ # my wireless interface is listed as wlp3s0. Yours could be wlan0 or eth1.
ehtesh@x200arch:~$ ip addr show wlp3s0 | grep "inet "
    inet 172.18.72.53/22 brd 172.18.75.255 scope global wlp3s0
ehtesh@x200arch:~$ arp -a
? (172.18.72.1) at c8:4c:75:76:bd:74 [ether] on wlp3s0
ehtesh@x200arch:~$ nmap -sP 172.18.72.0/24
Starting Nmap 6.41SVN ( http://nmap.org ) at 2013-12-17 20:08 EST
Nmap scan report for 172.18.72.2
Host is up (0.017s latency).
<... 15 IP addresses snipped ...>
Nmap scan report for 172.18.72.253
Host is up (0.13s latency).
Nmap done: 256 IP addresses (17 hosts up) scanned in 5.74 seconds
ehtesh@x200arch:~$ arp -a | sort -n -k 1,1                            
? (172.18.72.126) at ec:35:86:4a:37:d2 [ether] on wlp3s0
? (172.18.72.148) at 10:9a:dd:b8:79:71 [ether] on wlp3s0
? (172.18.72.178) at 9c:20:7b:7b:08:ba [ether] on wlp3s0
? (172.18.72.1) at c8:4c:75:76:bd:74 [ether] on wlp3s0
? (172.18.72.253) at b8:78:2e:19:05:0b [ether] on wlp3s0
? (172.18.72.2) at 00:14:1c:da:e1:c2 [ether] on wlp3s0
? (172.18.72.40) at d8:c7:c8:ca:f9:88 [ether] on wlp3s0
? (172.18.72.43) at d8:c7:c8:ce:0f:60 [ether] on wlp3s0
? (172.18.72.44) at d8:c7:c8:ce:0f:68 [ether] on wlp3s0
? (172.18.72.45) at 6c:f3:7f:c6:71:16 [ether] on wlp3s0
? (172.18.72.46) at 6c:f3:7f:c4:4c:b3 [ether] on wlp3s0
? (172.18.72.47) at d8:c7:c8:ca:f9:88 [ether] on wlp3s0
? (172.18.72.48) at 24:de:c6:c6:b6:78 [ether] on wlp3s0
? (172.18.72.49) at 24:de:c6:c6:b6:e6 [ether] on wlp3s0
? (172.18.72.51) at 00:9c:02:d0:4c:4e [ether] on wlp3s0
? (172.18.72.54) at 00:23:76:99:99:bf [ether] on wlp3s0
? (172.18.72.62) at 8c:70:5a:0d:06:18 [ether] on wlp3s0
? (172.18.72.63) at 7c:e9:d3:51:86:55 [ether] on wlp3s0
? (172.18.72.64) at a0:88:b4:47:eb:c8 [ether] on wlp3s0

Caminho #2. Eu sei que isto funciona, mas não posso dizer se este é o caminho certo.

ehtesh@x200arch:~$ #ifconfig | grep broadcast
ehtesh@x200arch:~$ ip address show wlp3s0 | grep brd
    link/ether 00:1e:65:bf:1b:42 brd ff:ff:ff:ff:ff:ff
    inet 172.18.72.53/22 brd 172.18.75.255 scope global wlp3s0
ehtesh@x200arch:~$ ping -b -c 3 -i 20 172.18.75.255
<... similar output to above ...>

ficaria feliz em saber se existem caminhos mais eficazes. Até lá, vou manter-me fiel a isto.

3
3
3
2011-07-15 18:16:48 +0000

A Hunt é uma ferramenta de linha de comando capaz de construir uma lista de máquinas à medida que são transmitidas através da rede para informação. Utiliza dados TCP, UDP, ICMP e ARP para construir uma lista de endereços MAC ativos em uma rede. É uma ferramenta passiva que funciona através da escuta no fio.

3
3
3
2019-05-23 17:18:32 +0000

Você poderia usar fping sudo apt-get install fping (em OS semelhantes a debian).

fping* é semelhante ao ping, mas muito melhor desempenho ao pingar vários hosts. A bandeira -r 1* diz ao fping para executar apenas uma ronda. A parte 2>1* permite ao grep filtrar a saída.

$ fping -g -r 1 192.168.1.0/24 2>1 | grep "alive"

mostraria algo como:

192.168.1.1 is alive
192.168.1.10 is alive
192.168.1.15 is alive
192.168.1.27 is alive

Há também uma bandeira interessante para o nmap que lhe permitiria ver o fornecedor de MAC - se conhecido. Utilize com sudo* para ver os endereços MAC.

$ sudo nmap -sP 192.168.1.0/24

Obteria, por exemplo:

Starting Nmap 7.40 ( https://nmap.org ) at 2019-05-23 18:49 CEST
Nmap scan report for 192.168.1.14
Host is up (-0.036s latency).
MAC Address: 20:F4:1B:E5:8F:7B (Shenzhen Bilian electronic)
Nmap scan report for 192.168.1.15
Host is up (-0.084s latency).
MAC Address: A4:31:35:E8:58:9E (Apple)
Nmap scan report for 192.168.1.27
Host is up (-0.15s latency).
MAC Address: 34:8A:7B:38:E3:14 (Samsung Electronics)
Nmap scan report for 192.168.1.29
Host is up (0.010s latency).
MAC Address: 80:2B:F9:75:F8:FF (Unknown)
Nmap scan report for 192.168.1.10
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 25.52 seconds
3
3
3
2017-11-08 13:22:31 +0000

1. Solução alternativa se as emissões e nmap não estiverem disponíveis:

seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time=
arp -a

2a. ou* basta perguntar ao seu servidor de nomes de domínio* :

seq 254| awk '{print "192.168.2."$1}' |nslookup | grep name

2b. sem awk

echo -e 192.168.2.{1..10}"\n" |nslookup |grep name
  1. pings todos os _dispositivos de rede na sub-rede 192.168.2.0/24 em paralelo (para reduzir o tempo de funcionamento). Depois os arp devem mostrar todos os dispositivos que responderam.

  2. não verifica as ligações activas ou actuais, mas lista todas as ligações que o serviço do domínio local mantém uma entrada, mesmo as realmente antigas.

Explicação mais detalhada:

  • seq 254 para criar todos os números de 1 a 254 (para todos os números de 100 a 150: seq 100 150)
  • xargs chama ping e substitui o “IP” (-iIP) pelo número sequence da stdin, portanto 192. 168.2.IP muda para 192.168.2.1 para o primeiro número seq, -P especifica o número de processos ping simultâneos xargs deve começar, eu escolho o mesmo montante +1 que os endereços (=254) im interessados.
  • ping com o endereço ip modificado por xargs (192.168.2.IP) e apenas ping uma vez(-c1); deve usar o mesmo identificador especificado para xargs sobre o argumento -i neste caso IP
  • grep time= para remover cada linha contendo informação supérflua, só estamos interessados em respostas, que fornecem um tempo de ida e volta (=got a response)
  • arp -a para mostrar pares de nomes válidos(ip)

Chamo a isto o meu comando pingall e disponibilizei-o sobre um pseudónimo em ~/.bashrc:

alias pingall='seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time='
3
3
3
2016-07-25 17:31:07 +0000

Para digitalizar o estado de uma gama de endereços IP, isto é agradável e simples:

sudo nmap -sn 192.168.1.2-20

Onde:

-sn: Ping Scan - disable port scan

Nota:

  • Em versões anteriores do Nmap, -sn era conhecido como -sP

Eu fiz isto no Mac OS X (que é baseado no BSD). Não tenho a certeza se a versão Linux tem alguma diferença.

2
2
2
2016-10-20 10:28:47 +0000

Para uma lista mais compacta de dispositivos conectados:

nmap -sL 192.168.0.* | grep \(1

Explicação.

nmap -sL 192.168.0.* irão listar todos os IPs em sub-rede e marcar aqueles que têm 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 registos interessantes começam com parêntesis ( e dígito 1, filtramos para isso com | grep \(1 (é necessária uma barra invertida para escapar ao parêntesis)

Quirk Cuidado que se dois dispositivos tiverem o mesmo nome, nmap irá mostrar apenas um, que foi ligado ao router last