Exibir lista de computadores em uma LAN no Linux

48

Sou um desenvolvedor web que está tentando lidar melhor com segurança. Eu estou tentando descobrir uma maneira (em distribuições Linux / Debian) de listar todos os computadores na mesma LAN em que meu netbook está. Eu tentei "arp -n", mas eu não sinto que é uma lista completa, como o meu iPhone está no mesmo roteador wi-fi do meu netbook, e isso não aconteceu. Existe alguma maneira melhor de obter uma lista completa de máquinas que compartilham o mesmo gateway?

    
por CaptSaltyJack 15.07.2011 / 19:51

10 respostas

52

Obtenha o nmap . É o programa Trinity usado em The Matrix e você pode fazer uma varredura para encontrar todos os dispositivos que estão conectados à LAN em que você está e mais.

Aqui é o guia de referência.

    
por 15.07.2011 / 19:55
31

Isso é o que eu uso, nmap e um endereço usando a notação de bloco CIDR da rede que você deseja verificar. Primeiro você precisa instalar o nmap, pois ele pode não vir pré-instalado com a sua distribuição. No Ubuntu:

sudo apt-get install nmap

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

ifconfig

saída ifconfig para a interface que eu quero analisar:

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 addet inet e Mask para descobrir o endereço de rede na notação CIDR, mais no CIDR aqui . O endereço é:

192.168.1.0/24

Execute o nmap usando o parâmetro -sP, que não verificará mais do que verificar se o host está on-line:

sudo nmap -sP 192.168.1.0/24

A saída do nmap será algo como isto:

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 você precisar de mais ajuda com o nmap, consulte a documentação oficial do nmap ou execute:

nmap --help 
    
por 09.12.2014 / 16:56
18

arp -n mostra apenas as máquinas na sua LAN com as quais sua máquina já conversou. Você pode obter essa lista para preencher melhor, fazendo ping nos endereços de difusão seletiva e de multicast de todos os hosts:

O endereço de broadcast "todos os" (em binário). Observe que a maioria das pilhas de IP traduz isso para os endereços de transmissão de sub-rede de todas as sub-redes às quais você está conectado:

ping 255.255.255.255

O endereço de transmissão da sub-rede para sua sub-rede atual. Então, supondo que você esteja em 192.168.1.0/24:

ping 192.168.1.255

O endereço multicast "todos os hosts". Eu gosto muito deste porque é mais provável encontrar hosts configurados para outras sub-redes IP, que por acaso estão conectados à mesma LAN Ethernet que você:

ping 224.0.0.1

Observe que esse método, e os outros métodos que já mencionei em outras respostas até agora, apenas procuram hosts acessíveis por IP na rede atual. Isso é provavelmente tudo que você precisa para se preocupar, mas é possível que um invasor busque ou faça coisas ruins em uma rede sem ser visível via IP.

    
por 15.07.2011 / 21:12
7

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

Com base nisso, você pode criar 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)

    
por 03.04.2017 / 23:54
4

Eu não achei as respostas existentes satisfatórias o suficiente, então eu pensei em tentar. Afinal, o FAQ sugere o fornecimento de contexto para links .

nmap é ótimo, se um pouco confuso para usar. Aqui está algo que eu corro para descobrir dispositivos de rede locais que são principalmente capazes de copiar e colar. nmap -sP (ou nmap -sn ) analisa fazendo ping . Existem outras opções para 'descoberta de 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 isso funciona, mas não posso dizer se esse é o caminho certo a seguir.

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 ...>

Eu ficaria feliz em saber se existem formas mais eficazes. Até então, eu estou aderindo a isso.

    
por 18.12.2013 / 02:44
4

Você pode tentar executar o ping em uma determinada sub-rede com um script de shell linux pequeno, 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
    
por 10.05.2016 / 10:21
2

O Hunt é uma ferramenta de linha de comando capaz de criar uma lista de máquinas à medida que elas são transmitidas pela rede. para informação. Ele usa dados TCP, UDP, ICMP e ARP para criar uma lista de endereços MAC ativos em uma rede. É uma ferramenta passiva que funciona ouvindo no fio.

    
por 15.07.2011 / 20:16
2

Para verificar o status de um intervalo de endereços IP, isso é legal e simples:

sudo nmap -sn 192.168.1.2-20

Onde:

         -sn: Ping Scan - disable port scan

Nota:

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

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

    
por 25.07.2016 / 19:31
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á 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êntese ( e dígito 1 , filtramos para 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 foi ligado ao router última

    
por 20.10.2016 / 12:28
1

1. Solução alternativa se as difusõ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. pinga todos os dispositivos de rede pingable na sub-rede 192.168.2.0/24 em paralelo (para reduzir o tempo de execução). Depois, arp deve exibir todos os dispositivos que responderam.

  2. não verifica se há conexões ativas ou atuais, mas lista todas as conexões que o serviço de domínio local mantém uma entrada, mesmo as mais 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 "IP" ( -iIP ) pelo número seq uence de stdin, então 192.168.2.IP muda para 192.168.2.1 para o primeiro seq number, -P especifica o número de ping processos xargs concorrentes deve começar, eu escolho a mesma quantidade +1 como endereços (= 254) im interessados.
  • ping com o endereço IP modificado por xargs ( 192.168.2.IP ) e somente pingar uma vez ( -c1 ); você deve usar o mesmo identificador especificado para xargs sobre o argumento -i neste caso IP
  • grep time= para remover todas as linhas contendo informações supérfluas, estamos interessados apenas nas respostas, que fornecem um tempo de ida e volta (= obteve uma resposta)
  • arp -a para exibir pares de nome válido (ip)

Chamo isso de meu comando pingall e o disponibilizo em um alias em ~/.bashrc :

alias pingall='seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time='
    
por 08.11.2017 / 14:22