Jak znaleźć inne urządzenia podłączone do sieci lokalnej

27

Jak mogę zobaczyć listę wszystkich urządzeń dostępnych w sieci LAN, której jestem częścią.

tshepang
źródło

Odpowiedzi:

28

Ile wiesz o danej sieci LAN? Zakładam, że nic nie wiesz, wystarczy podłączyć kabel lub Wi-Fi.

  1. Spróbuj poprosić o adres IP za pomocą DHCP. Dostajesz jeden Wtedy już wiesz kilka rzeczy: adres IP bramy, adres IP serwera DHCP, maskę podsieci i może serwery DNS.
  2. Jeśli go nie otrzymasz, oznacza to, że nie ma serwera DHCP lub sieć jest filtrowana według adresów MAC.
  3. Tak czy inaczej, zacznij przechwytywać pakiety za pomocą wireshark . Jeśli korzystasz z sieci bezprzewodowej lub jest podłączony do koncentratora, jest to łatwe. Jeśli jesteś podłączony do przełącznika, możesz spróbować zalania MAC, aby przełączyć go z powrotem do „trybu koncentratora”, ale mądrzejszy przełącznik po prostu wyłączy Twój port. Jeśli mimo to chcesz spróbować, ettercap może to dla Ciebie zrobić. (Lub Macchanger i skrypt powłoki :))
  4. Patrząc na pakiety, możesz znaleźć adresy IP, ale co najważniejsze, możesz odgadnąć parametry sieci. Jeśli podejrzewasz, że filtrowanie adresów MAC zmienia adres MAC na jeden z obserwowanych po jego opuszczeniu (przez jakiś czas nic nie wysyła).
  5. Kiedy masz dobry pomysł na temat konfiguracji sieci (maska ​​sieci, brama itp.), Użyj nmap do skanowania. Nmap może zrobić znacznie więcej niż -sPw przypadku, gdy niektóre hosty nie odpowiedzą na ping (sprawdź dokumentację ). Ważne jest, aby nmap działał tylko wtedy, gdy ustawienia sieciowe i trasy są prawidłowe.
  6. Możesz znaleźć jeszcze więcej hostów z bezczynnym skanowaniem nmap .

Niektórym (większości?) Administratorom systemu nie podoba się kilka z powyższych metod, więc upewnij się, że jest dozwolony (na przykład jest to Twoja sieć). Pamiętaj również, że twoja zapora ogniowa może zapobiec niektórym z tych metod (nawet uzyskanie adresu IP za pomocą DHCP), więc najpierw sprawdź swoje reguły.

Nmap

Oto jak wykonać podstawowe wykrywanie hosta za pomocą nmap . Jak powiedziałem, konfiguracja sieci powinna być poprawna, gdy spróbujesz tego. Załóżmy, że jesteś 192.168.0.50, jesteś w podsieci / 24. Twój adres MAC jest czymś, co może się łączyć itp. Lubię mieć wireshark, aby zobaczyć, co robię.

Najpierw chcę wypróbować skanowanie listy, które próbuje rozwiązać tylko rekordy PTR w DNS dla określonych adresów IP. Nic nie wysyła do hostów, więc nie ma gwarancji, że jest naprawdę podłączony lub włączony, ale istnieje spora szansa. Ten tryb oczywiście wymaga serwera DNS, który chętnie z tobą porozmawia.

nmap -vvv -sn -sL 192.168.1.0/16

To może nic nie znaleźć lub może powiedzieć, że każde pojedyncze IP jest aktywne.

Następnie zwykle wybieram skanowanie ARP. Wysyła żądania ARP (widzisz je jak "Who has <target IP>? Tell <your IP>"w wireshark). Jest to dość niezawodne, ponieważ nikt nie filtruje ani nie fałszuje ARP. Główną wadą jest to, że działa tylko w podsieci.

nmap -vvv -sn -PR 192.168.1.0/24

Jeśli chcesz przeskanować coś za routerami lub zaporami ogniowymi, użyj skanowania SYN i ACK. SYN uruchamia połączenie TCP i w odpowiedzi dostajesz RST lub SYNACK. Tak czy inaczej host jest włączony. Możesz mieć zakaz komunikacji ICMP lub coś takiego, jeśli jest zapora ogniowa. W większości przypadków, jeśli zapora filtruje pakiety, nic nie otrzymasz. Niektóre typy zapór filtrują tylko pakiety TCP SYN i przepuszczają każdy inny pakiet TCP. Dlatego przydatne jest skanowanie ACK. Otrzymasz RST w odpowiedzi, jeśli host jest uruchomiony. Ponieważ nie wiesz, co to jest zapora ogniowa, wypróbuj jedno i drugie.

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

Oczywiście możesz używać skanów opartych na ICMP z opcją -PE -PP -PM.

Inną interesującą metodą jest -PO z nieistniejącym numerem protokołu. Często w zaporach ogniowych bierze się pod uwagę tylko TCP i UDP i nikt nie sprawdza, co się stanie, gdy spróbujesz nieznanego protokołu. Otrzymasz protokół ICMP nieosiągalny, jeśli host jest uruchomiony.

nmap -vvv -sn -PO160 10.1.2.0/24

Możesz także powiedzieć nmap, aby pomijał wykrywanie hosta (-Pn) i wykonywał skanowanie portów na każdym hoście. Jest to bardzo powolne, ale możesz znaleźć inne hosty, które z jakiegoś powodu przeoczyły wykrywanie hostów.

stribika
źródło
To wygląda na doskonałą odpowiedź, a teraz będę musiał poprosić cię o nakarmienie mnie łyżeczką poprzez podanie poleceń do wykonania dla każdego zadania. Szczególnie interesuje mnie sposób użycia Nmapa do odpowiedzi na moje pytanie (nie każ mi czytać dokumentów :)
tshepang
5
@Tshepang: Dodałem kilka przykładów nmap, ale mam nadzieję, że zastanowisz się nad przeczytaniem dokumentacji. Nmap jest jednym z najlepszych narzędzi sieciowych, a dokumentacja jest dobrze napisana, naprawdę warto poświęcić czas.
stribika
9

Podoba mi się ip neighpolecenie, które pochodzi z IpRoute2.

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

Myślę jednak, że działa tylko z arp-able węzłów.

ksenoterracid
źródło
Co to dokładnie robi? Daj mi, to tylko kilka wpisów.
tshepang
Myślę, że to po prostu wysyła arp do adresu IP emisji i wyświetla listę odpowiedzi. Szczerze mówiąc, nie wiem jak to działa.
ksenoterrakid,
1
man ippokazuje, co robi sąsiad lub sąsiad.
slm
9

Zainstaluj nmap i uruchom nmap -sP <mynetwork>.

Keith
źródło
I dostać Nmap done: 1 IP address (1 host up) scanned in 0.01 seconds.
tshepang
1
@Tshepang - zrobiłem nmap -sP 192.168.0.*i zwrócił listę danych wyjściowych formularza:Nmap scan report for justin-desktop2 (192.168.0.61) Host is up (0.00056s latency).
Justin Ethier
@ justin Używam wersji 5.00 i teraz pokazuje ona liczbę maszyn w mojej sieci wraz z formularzem Host 192.168.2.23 is up (0.0088s latency)..
tshepang
3
Czym powinienem zastąpić <moja sieć>?
tshepang
@tshepang Numer sieci z zerową częścią hosta i maską CIDR. W ten sposób: 192.169.1.0/24
Keith
0

W przypadku obu odpowiedzi: NIE wymaga nmap / NIE wymaga sudo .

odpowiedź 1

$ arp

Odpowiedź 2

Opierając się na xenoterracides odpowiedzieć ip neighi 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))

Pobierz przez

wget https://gist.githubusercontent.com/MartinThoma/699ae445b8a08b5afd16f7d6f5e5d0f8/raw/577fc32b57a7f9e66fdc9be60e7e498bbec7951a/neighbors.py
Martin Thoma
źródło