Exibir lista de computadores em uma LAN no Linux

62

Sou um desenvolvedor da Web que está tentando entender melhor a segurança. Estou tentando descobrir uma maneira (em distribuições baseadas em Linux / Debian) para listar todos os computadores na mesma LAN em que meu netbook está. Eu tentei "arp -n", mas não acho que seja uma lista completa, pois meu iPhone está no mesmo roteador wi-fi que meu netbook e isso não apareceu. Existe alguma maneira melhor de obter uma lista completa de máquinas que compartilham o mesmo gateway?

CaptSaltyJack
fonte

Respostas:

58

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

Aqui está o guia de referência.

Tyler Faile
fonte
16
ESTÁ BEM. Parece que "sudo nmap -sL 123.123.123. *" É o que estou procurando, ou talvez -sP em vez de -sL. Obrigado!
CaptSaltyJack
2
instale o nmap comsudo apt-get install nmap
saintali
11
Eu pensei que este é realmente um site sério, lol +1
user10089632
38

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

sudo apt-get install nmap

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

ifconfig

Saída ifconfig para a interface que eu quero verificar:

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

192.168.1.0/24

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

sudo nmap -sP 192.168.1.0/24

A saída do nmap será mais ou menos assim:

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 
Radtek
fonte
2
nmap -sA 192.168.1.0/24 A opção nmap -sAmostra resultados descritivos semelhantes com melhor legibilidade, o que inclui o nome do dispositivo, IP, mac, etc., como na opção -sP. Pessoalmente, prefiro -sA over -sP por questão de legibilidade.
Jayzcode
@ Jayzcode Na minha máquina -sA nunca retorna, enquanto -sP levou apenas 3,73 segundos (detectou o roteador, meu PC e outro PC). Alguma idéia do porquê?
Rodrigo
17

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

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

ping 255.255.255.255

O endereço de transmissão da sub-rede da sua sub-rede atual. 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 estão anexadas à mesma LAN Ethernet que você:

ping 224.0.0.1

Observe que este método e os outros métodos que eu já vi mencionados em outras respostas até agora, procuram apenas por hosts alcançáveis ​​por IP na rede atual. Provavelmente é tudo o que você precisa para se preocupar, mas é possível que um invasor bisbilhote ou faça coisas ruins em uma rede sem ser visível via IP.

Spiff
fonte
8

ip neighe hosts. NO nmap necessário / NO sudo necessário .

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)

Martin Thoma
fonte
ou apenasip neigh | awk '{ print $1 }' | xargs -n1 host
blockloop 19/09/17
ip nabreviado. Talvez seja melhor ip n | grep REACHABLE.
Pablo A
4

Não achei as respostas existentes satisfatórias o suficiente, então pensei em tentar. Afinal, o FAQ sugere fornecer contexto para os links .

nmapé ótimo, se um pouco confuso de usar. Aqui está uma coisa que eu corro para descobrir dispositivos de rede local que são capazes de copiar e colar. nmap -sP(ou nmap -sn) varre por ping . Existem outras opções para 'descoberta de host', como com nmap -sLou 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. Sei que isso funciona, mas não sei 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 ...>

Ficaria feliz em saber se existem maneiras mais eficazes. Até então, eu estou mantendo isso.

Ehtesh Choudhury
fonte
4

Você pode tentar executar ping em todas as sub-redes 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
dmn8
fonte
No meu caso, disse UP para todos e depois ip nfalhei para todos.
Pablo A
3

O Hunt é uma ferramenta de linha de comando capaz de criar uma lista de máquinas conforme elas transmitem pela rede para obter informações. 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.

Sean C.
fonte
4
Eu sei que existem páginas de manual, mas seria útil ver um exemplo na resposta.
Ehtesh Choudhury
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 com 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)

Quirk
Cuidado: se dois dispositivos tiverem o mesmo nome, nmapmostrarão apenas aquele que foi conectado ao roteador pela última vez

Alexander Malakhov
fonte
2

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

sudo nmap -sn 192.168.1.2-20

Onde:

         -sn: Ping Scan - disable port scan

Nota:

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

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

Sridhar Sarnobat
fonte
11
Brilhante, tudo o que eu precisava fazer era digitar: sudo nmap -sP 192.168.178.0-255. Isso fez uma varredura na sub-rede em que estou.
Leo Gerber
2

Você pode usar o fping sudo apt-get install fping (em sistemas operacionais semelhantes ao debian).

O fping é semelhante ao ping, mas com desempenho muito melhor ao executar ping em vários hosts. O sinalizador -r 1 informa ao fping para executar apenas uma rodada. A parte 2> 1 permite ao grep filtrar a saída.

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

Seria exibido 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 um sinalizador interessante para o nmap que permite ver o fornecedor do MAC - se conhecido. Use com sudo para ver os endereços MAC.

$ sudo nmap -sP 192.168.1.0/24

Você 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
user9869932
fonte
1

1. Solução alternativa se transmite e nmapnão está disponível:

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

2a ou pergunte 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. envia todos os dispositivos de rede pingáveis na sub-rede 192.168.2.0/24 em paralelo (para reduzir o tempo de execução). Depois arpdeve 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 realmente antigas.

Explicação mais detalhada:

  • seq 254para criar todos os números de 1 a 254 (em todos os números de 100 a 150: seq 100 150)
  • xargschama pinge substitui "IP" ( -iIP) pelo seqnúmero de uence de stdin, então 192.168.2.IP muda para 192.168.2.1 para o primeiro seqnúmero, -Pespecifica o número de pingprocessos simultâneos que xargsdevem ser iniciados, eu escolho a mesma quantidade +1 dos endereços ( = 254) estou interessado.
  • pingcom o endereço IP modificado por xargs ( 192.168.2.IP) e ping apenas uma vez ( -c1); você deve usar o mesmo identificador especificado para xargs sobre o -iargumento nesse casoIP
  • grep time= Para remover todas as linhas que contenham informações supérfluas, estamos interessados ​​apenas em respostas, que fornecem um tempo de ida e volta (= obteve uma resposta)
  • arp -a para exibir pares de nomes válidos (ip)

Eu chamo isso de meu comando pingall e o disponibilizei através de um alias em ~/.bashrc:

alias pingall='seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time='
Don Question
fonte