Wyświetl listę komputerów w sieci LAN w systemie Linux

62

Jestem twórcą stron internetowych, który próbuje lepiej kontrolować bezpieczeństwo. Próbuję znaleźć sposób (na dystrybucjach opartych na systemie Linux / Debian), aby wyświetlić listę wszystkich komputerów w tej samej sieci LAN, na której znajduje się mój netbook. Próbowałem „arp -n”, ale nie sądzę, że jest to pełna lista, ponieważ mój iPhone jest na tym samym routerze Wi-Fi, co mój netbook, i to nie wyszło. Czy istnieje lepszy sposób na uzyskanie pełnej listy komputerów, które współużytkują tę samą bramę?

CaptSaltyJack
źródło
2
możliwy duplikat Jak mogę wyświetlić listę wszystkich adresów IP w podłączonej sieci, najlepiej przez Terminal?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Odpowiedzi:

58

Uzyskaj nmap . Jest to program Trinity używany w Matrycy. Możesz wykonać skanowanie, aby znaleźć wszystkie urządzenia podłączone do sieci LAN, w której się znajdujesz i nie tylko.

Oto przewodnik informacyjny.

Tyler Faile
źródło
16
DOBRZE. Wygląda na to, że „sudo nmap -sL 123.123.123. *” Jest tym, czego szukam, a może -sP zamiast -sL. Dzięki!
CaptSaltyJack
2
zainstaluj nmap zsudo apt-get install nmap
saintali
1
Myślałem, że to naprawdę poważna strona, lol +1
użytkownik10089632
38

To jest to, czego używam, nmap i adres za pomocą notacji blokowej CIDR sieci, którą chcesz przeskanować. Najpierw musisz zainstalować nmap, ponieważ może on nie być fabrycznie zainstalowany wraz z dystrybucją. W systemie Ubuntu:

sudo apt-get install nmap

Następnie ustal adres sieciowy, używając ifconfig:

ifconfig

Dane wyjściowe ifconfig dla interfejsu, który chcę skanować:

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

Użyj adresu inet i Maski, aby dowiedzieć się, jaki jest adres sieciowy w notacji CIDR, więcej o CIDR tutaj . Adres jest:

192.168.1.0/24

Uruchom nmap za pomocą parametru -sP, który skanuje nie dalej niż sprawdzanie, czy host jest w trybie online:

sudo nmap -sP 192.168.1.0/24

Wyjście nmap będzie wyglądać mniej więcej tak:

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

To wszystko, jeśli potrzebujesz dodatkowej pomocy z nmap, zobacz oficjalną dokumentację nmap lub uruchom:

nmap --help 
radtek
źródło
2
nmap -sA 192.168.1.0/24 Opcja nmap -sApokazuje podobne wyniki opisowe z lepszą czytelnością, która obejmuje nazwę urządzenia, adres IP, mac itp. jak w przypadku opcji -sP. Osobiście wolę -sA niż -sP ze względu na czytelność.
Jayzcode
@Jayzcode Na moim komputerze -sA nigdy nie wraca, podczas gdy -sP zajęło tylko 3,73 sekundy (wykryłem router, mój komputer i inny komputer). Masz pomysł, dlaczego?
Rodrigo
17

arp -npokazuje tylko urządzenia w twojej sieci LAN, z którymi urządzenie już rozmawiało. Możesz uzyskać tę listę, aby lepiej się zapełniać, wysyłając pakiety ping do adresów multiemisji rozgłaszania i wszystkich hostów:

Adres rozgłoszeniowy „wszyscy” (binarnie). Pamiętaj, że większość stosów adresów IP przetłumaczy to na adresy rozgłoszeniowe podsieci dla wszystkich podsieci, do których jesteś przyłączony:

ping 255.255.255.255

Adres emisji podsieci dla bieżącej podsieci. Zakładając, że masz 192.168.1.0/24:

ping 192.168.1.255

Adres multiemisji „wszystkich hostów”. Bardzo mi się podoba, ponieważ bardziej prawdopodobne jest znalezienie hostów skonfigurowanych dla innych podsieci IP, które są podłączone do tej samej sieci Ethernet, co Ty:

ping 224.0.0.1

Zauważ, że ta metoda oraz inne metody, o których do tej pory wspominałem w innych odpowiedziach, szukają tylko hostów z dostępem do IP w bieżącej sieci. Prawdopodobnie to wszystko, o co musisz dbać, ale atakujący może węszyć w sieci lub robić złe rzeczy, nie będąc widocznym przez IP.

Spiff
źródło
8

ip neigha hosts. NIE wymaga nmap / NIE wymaga sudo .

Na tej podstawie możesz zbudować skrypt w języku 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))

Pobierz przez

wget https://gist.githubusercontent.com/MartinThoma/699ae445b8a08b5afd16f7d6f5e5d0f8/raw/577fc32b57a7f9e66fdc9be60e7e498bbec7951a/neighbors.py

(lub po prostu arp... nie widziałem tego wcześniej)

Martin Thoma
źródło
lub po prostuip neigh | awk '{ print $1 }' | xargs -n1 host
blockloop
ip nw skrócie. Może lepiej ip n | grep REACHABLE.
Pablo A
4

Nie znalazłem wystarczających odpowiedzi, więc pomyślałem, że spróbuję. W końcu FAQ sugeruje kontekst dla linków .

nmapjest świetny, jeśli trochę mylący w użyciu. Oto coś, co uruchamiam, aby odkryć lokalne urządzenia sieciowe, które w większości można kopiować i wklejać. nmap -sP(lub nmap -sn) skanuje przez pingowanie . Istnieją inne opcje „wykrywania hosta”, takie jak z nmap -sLlub nmap -Pn.

Sposób nr 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

Sposób nr 2. Wiem, że to działa, ale nie mogę powiedzieć, czy jest to właściwa droga.

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

Z przyjemnością dowiem się, czy istnieją bardziej skuteczne sposoby. Do tego czasu trzymam się tego.

Ehtesh Choudhury
źródło
4

Możesz na przykład pingować całą podsieć za pomocą małego skryptu powłoki Linux

$ 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
źródło
W moim przypadku powiedziano UP dla wszystkich, a następnie ip npowiedziano FAILED wszystkim.
Pablo A
3

Hunt to narzędzie wiersza polecenia, które jest w stanie zbudować listę komputerów, które transmitują informacje w sieci. Wykorzystuje dane TCP, UDP, ICMP i ARP do budowy listy aktywnych adresów MAC w sieci. To pasywne narzędzie, które działa poprzez słuchanie na drutach.

Sean C.
źródło
4
Wiem, że istnieją strony podręcznika, ale dobrze byłoby zobaczyć przykład w odpowiedzi.
Ehtesh Choudhury,
2

Aby uzyskać bardziej zwartą listę podłączonych urządzeń:

nmap -sL 192.168.0.* | grep \(1

Wyjaśnienie.

nmap -sL 192.168.0.* wyświetli listę wszystkich adresów IP w podsieci i zaznaczy te, które mają nazwę:

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

Ponieważ wszystkie interesujące rekordy zaczynają się od nawiasów (i cyfr 1, filtrujemy je za pomocą | grep \(1(odwrotny ukośnik jest potrzebny, aby uniknąć nawiasu)

Quirk
Uwaga: jeśli dwa urządzenia mają tę samą nazwę, nmappokaże tylko to, które było podłączone do routera jako ostatnie

Alexander Malakhov
źródło
2

Aby zeskanować status zakresu adresów IP, jest to przyjemne i proste:

sudo nmap -sn 192.168.1.2-20

Gdzie:

         -sn: Ping Scan - disable port scan

Uwaga:

  • W poprzednich wersjach Nmap -snbył znany jako-sP

Zrobiłem to na Mac OS X (który jest oparty na BSD). Nie jestem pewien, czy wersja Linuksa ma jakieś różnice.

Sridhar Sarnobat
źródło
1
Genialne, wszystko, co musiałem zrobić, to typ: sudo nmap -sP 192.168.178.0-255. Zrobiłem skan w podsieci, w której się znajduję.
Leo Gerber
2

Możesz użyć fping sudo apt-get install fping (w systemach operacyjnych podobnych do Debiana).

fping jest podobny do pingowania, ale znacznie lepiej sprawdza się podczas pingowania wielu hostów. Flaga -r 1 informuje fping, aby wykonał tylko jedną rundę. Część 2> 1 pozwala grepowi filtrować dane wyjściowe.

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

Wyświetliłby coś takiego:

192.168.1.1 is alive
192.168.1.10 is alive
192.168.1.15 is alive
192.168.1.27 is alive

Istnieje również interesująca flaga nmap , która pozwoli ci zobaczyć dostawcę MAC - jeśli jest znany. Używaj z sudo , aby zobaczyć adresy MAC.

$ sudo nmap -sP 192.168.1.0/24

Otrzymasz na przykład:

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
użytkownik9869932
źródło
1

1. Alternatywne rozwiązanie, jeśli transmisje nmapnie są dostępne:

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

2a lub po prostu zapytaj swój serwer nazw domen :

seq 254| awk '{print "192.168.2."$1}' |nslookup | grep name

2b. bez awk

echo -e 192.168.2.{1..10}"\n" |nslookup |grep name
  1. pinguje wszystkie pingowane urządzenia sieciowe w podsieci 192.168.2.0/24 równolegle (w celu skrócenia czasu działania). Następnie arppowinno wyświetlić się każde urządzenie, które odpowiedziało.

  2. nie sprawdza aktywnych ani bieżących połączeń, ale wyświetla listę wszystkich połączeń, w których lokalna usługa domeny przechowuje wpis, nawet naprawdę stare.

Bardziej szczegółowe wyjaśnienie:

  • seq 254tworzyć liczby od 1 do 254 (dla wszystkich liczb od 100 do 150: seq 100 150)
  • xargswywołuje pingi zamienia „IP” ( -iIP) na seqnumer uence z stdin, więc 192.168.2.IP zmienia się na 192.168.2.1 dla pierwszego seqnumeru, -Pokreśla liczbę równoczesnych pingprocesów, które xargsnależy rozpocząć, wybieram tę samą kwotę +1 jako adresy ( = 254) jestem zainteresowany.
  • pingz adresem IP zmodyfikowanym przez xargs ( 192.168.2.IP) i ping tylko raz ( -c1); -iw tym przypadku musisz użyć tego samego identyfikatora, który określono dla argumentów xargsIP
  • grep time= aby usunąć każdą linię zawierającą zbędne informacje, interesują nas tylko odpowiedzi, które zapewniają czas podróży w obie strony (= otrzymałem odpowiedź)
  • arp -a wyświetlać prawidłowe pary nazw (ip)

Nazywam to moim poleceniem pingall i udostępniłem je przez alias w ~/.bashrc:

alias pingall='seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time='
Nie pytaj
źródło