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.
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?
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
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.
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)
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
.
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
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.
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
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.
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:
-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.
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
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
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.
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='