Como descobrir quais outras máquinas estão conectadas à rede local


27

Como posso ver uma lista de todas as máquinas disponíveis na LAN da qual faço parte?

Respostas:


28

Quanto você sabe sobre a LAN em questão? Suponho que você não saiba nada apenas conectado ao cabo ou conectado ao wifi.

  1. Tente solicitar um endereço IP com DHCP. Você consegue um? Então você já sabe algumas coisas: o IP do gateway, o IP do servidor DHCP, a máscara de sub-rede e talvez os servidores DNS.
  2. Se você não conseguir um, não há servidor DHCP ou a rede é filtrada por MAC.
  3. De qualquer forma, comece a capturar pacotes com o wireshark . Se você estiver sem fio ou conectado a um hub, é fácil. Se você estiver conectado a um comutador, poderá tentar a inundação de MAC para retornar ao "modo hub", mas um comutador mais inteligente apenas desativará sua porta. Se você quiser tentar de qualquer maneira, o ettercap pode fazer isso por você. (Ou macchanger e um script de shell :))
  4. Observando os pacotes, você pode encontrar endereços IP, mas o mais importante é que você pode adivinhar os parâmetros de rede. Se você suspeitar que a filtragem MAC altere seu endereço MAC para um dos observados depois que ele sair (não envia nada por um tempo).
  5. Quando você tiver uma boa idéia sobre a configuração da rede (máscara de rede, gateway etc.), use o nmap para verificar. O Nmap pode fazer muito mais do que -sPno caso de alguns hosts não responderem ao ping (consulte a documentação ). É importante que o nmap funcione apenas se suas configurações e rotas de rede estiverem corretas.
  6. Você pode encontrar ainda mais hosts com a verificação ociosa do nmap .

Alguns administradores de sistema (a maioria?) Não gostam de alguns dos métodos acima, portanto, verifique se é permitido (por exemplo, é a sua rede). Observe também que seu próprio firewall pode impedir alguns desses métodos (até mesmo obter um IP com DHCP), portanto verifique suas regras primeiro.

Nmap

Aqui está como fazer a descoberta básica de host com o nmap . Como eu disse, sua configuração de rede deve estar correta quando você tenta fazer isso. Digamos que você esteja 192.168.0.50 em uma sub-rede / 24. Seu endereço MAC é algo que tem permissão para se conectar, etc. Gosto de ter o wireshark em execução para ver o que estou fazendo.

Primeiro, gosto de tentar a verificação de lista, que apenas tenta resolver os registros PTR no DNS para os endereços IP especificados. Ele não envia nada aos hosts, portanto não há garantia de que esteja realmente conectado ou ativado, mas há uma boa chance. Esse modo obviamente precisa de um servidor DNS que esteja disposto a conversar com você.

nmap -vvv -sn -sL 192.168.1.0/16

Isso pode não encontrar nada ou pode indicar que todos os IPs estão ativos.

Então eu costumo fazer uma varredura ARP. Ele envia solicitações ARP (você as vê como "Who has <target IP>? Tell <your IP>"no wireshark). Isso é bastante confiável, pois ninguém filtra ou falsifica o ARP. A principal desvantagem é que ele só funciona na sua sub-rede.

nmap -vvv -sn -PR 192.168.1.0/24

Se você deseja verificar algo atrás de roteadores ou firewalls, use as verificações SYN e ACK. O SYN inicia uma conexão TCP e você recebe um RST ou um SYNACK em resposta. De qualquer maneira, o host está ativo. Você pode proibir a comunicação ICMP ou algo assim, se houver um firewall. Na maioria das vezes, se um firewall filtrar seus pacotes, você não receberá nada. Alguns tipos de firewalls filtram apenas os pacotes TCP SYN e permitem a passagem de todos os outros pacotes TCP. É por isso que a verificação ACK é útil. Você receberá o RST em resposta se o host estiver ativo. Como você não sabe qual firewall está instalado, tente ambos.

nmap -vvv -sn -PS 10.1.2.0/24
nmap -vvv -sn -PA 10.1.2.0/24

É claro que você pode usar as varreduras baseadas em ICMP com -PE -PP -PM.

Um outro método interessante é -PO com um número de protocolo inexistente. Geralmente, apenas o TCP e o UDP são considerados nos firewalls e ninguém testa o que acontece quando você tenta um protocolo desconhecido. Você obtém um protocolo ICMP inacessível se o host estiver ativo.

nmap -vvv -sn -PO160 10.1.2.0/24

Você também pode dizer ao nmap para ignorar a descoberta de host (-Pn) e fazer uma varredura de porta em cada host. Isso é muito lento, mas você pode encontrar outros hosts que a descoberta do host perdeu por algum motivo.


Parece uma excelente resposta, e agora vou ter que pedir para você me alimentar, incluindo quais comandos executar para cada tarefa. Estou especialmente interessado em saber como usar o Nmap para responder a minha pergunta (não me faça ler os docs :)
tshepang

5
@ Tshepang: adicionei alguns exemplos do nmap, mas espero que você considere a leitura dos documentos. O Nmap é uma das melhores ferramentas de rede e a documentação é bem escrita, vale muito a pena.
stribika

9

Eu gosto do ip neighcomando, que vem com o IpRoute2.

ip neigh
192.168.1.1 dev eth0 lladdr 00:1d:7e:f8:21:66 REACHABLE

No entanto, acho que funciona apenas com arpnós -able.


O que isso faz exatamente? Para mim, apenas lista algumas entradas.
tshepang

Eu acho que apenas envia um arp para o IP de broadcast e lista o que responde. Honestamente, eu não sei como isso funciona.
Xenoterracide

11
man ipmostra o que o vizinho faz.
Slm

9

Instale o nmap e execute nmap -sP <mynetwork>.


Eu entendo Nmap done: 1 IP address (1 host up) scanned in 0.01 seconds.
tshepang

11
@Tshepang - Eu fiz nmap -sP 192.168.0.*e ele retornou uma lista de saída do formulário:Nmap scan report for justin-desktop2 (192.168.0.61) Host is up (0.00056s latency).
Justin Ethier 25/02

@justin Estou usando a versão 5.00 e agora está mostrando um número de máquinas na minha rede, com o formulário Host 192.168.2.23 is up (0.0088s latency)..
tshepang

3
Com o que devo substituir <mynetwork>?
22411 tshepang #

@tshepang O número da rede, com a parte do host zerada e uma máscara CIDR. Assim: 192.169.1.0/24
Keith

0

Para ambas as respostas: NO nmap required / NO sudo requied .

resposta 1

$ arp

Resposta 2

Com base nos xenoterrácidos, responda com ip neighe hosts:

#!/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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.