2011-07-15 17:51:44 +0000 2011-07-15 17:51:44 +0000
65
65

Wyświetlanie listy komputerów w sieci LAN w Linuksie

Jestem web devem, który stara się uzyskać lepszą obsługę w zakresie bezpieczeństwa. Próbuję znaleźć sposób (w dystrybach opartych na Linuksie/Debianie), aby wyświetlić listę wszystkich komputerów w tej samej sieci LAN, w której znajduje się mój netbook. Próbowałem “arp -n”, ale nie czuję, że jest to kompletna lista, ponieważ mój iPhone jest na tym samym routerze wi-fi co mój netbook, a to nie wyszło. Czy jest jakiś lepszy sposób, aby uzyskać pełną listę maszyn, które wszystkie są udostępnianie tej samej bramy?

答案 (11)

61
61
61
2011-07-15 17:55:50 +0000

Dostań nmap . Jest to program Trinity używany w The Matrix i można zrobić skanowanie, aby znaleźć wszystkie urządzenia, które są podłączone do sieci LAN, na której jesteś i więcej. Tutaj to przewodnik referencyjny.

41
41
41
2014-12-09 15:56:20 +0000

To jest to, czego używam, nmap i adres przy użyciu notacji blokowej CIDR sieci, którą chcesz skanować. Najpierw musisz zainstalować nmap, ponieważ może on nie być zainstalowany fabrycznie wraz z distro. Na Ubuntu:

sudo apt-get install nmap

Następnie wymyśl adres sieciowy używając ifconfig:

ifconfig

ifconfig wyjście 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 inet addr i Maski do wymyślenia adresu sieciowego w notacji CIDR, więcej na CIDR tutaj . Adres to:

192.168.1.0/24

Uruchom nmap używając parametru -sP, który przeskanuje nie dalej niż sprawdzenie czy host jest online:

sudo nmap -sP 192.168.1.0/24

Wyjście nmap będzie wyglądać 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 więcej pomocy z nmap, zobacz dokumentacja oficjalna nmap , lub uruchom:

nmap --help
18
18
18
2011-07-15 19:12:18 +0000

arp -n pokazuje tylko te maszyny w sieci LAN, z którymi maszyna już rozmawiała. Możesz sprawić, że ta lista będzie się lepiej wypełniać poprzez pingowanie adresu transmisji i adresów multicastów all-hosts:

Adres transmisji “all ones” (w binarnym). Zauważ, że większość stosów IP tłumaczy to na adresy transmisji podsieci dla wszystkich podsieci, do których jesteś podłączony:

ping 255.255.255.255

Adres transmisji podsieci dla Twojej obecnej podsieci. Więc zakładając, że jesteś na 192.168.1.0/24:

ping 192.168.1.255

Adres multicastowy “wszystkich hostów”. Ten mi się bardzo podoba, ponieważ jest bardziej prawdopodobne, że znajdą się hosty skonfigurowane dla innych podsieci IP, które są podłączone do tej samej sieci Ethernet LAN co ty:

ping 224.0.0.1

Zauważ, że ta metoda, i inne metody, które widziałem wymienione w innych odpowiedziach do tej pory, tylko szukać IP-dostępnych hostów w obecnej sieci. To prawdopodobnie wszystko, na czym musisz się skupić, ale napastnik może szpiegować lub robić złe rzeczy w sieci, nie będąc widocznym przez IP.

8
8
8
2017-04-03 21:54:39 +0000

ip neigh i hosts. Nie jest wymagana żadna mapa nmap /nie jest wymagane sudo.

Bazując na tym, można zbudować skrypt Pythona:

#!/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)

4
4
4
2016-05-10 08:21:24 +0000

Możesz spróbować pingować całą daną podsieć za pomocą małego skryptu powłoki linuksa, na przykład

$ 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
4
4
4
2013-12-18 01:44:36 +0000

Nie uznałem istniejących odpowiedzi za wystarczająco satysfakcjonujące, więc pomyślałem, że spróbuję. W końcu FAQ sugeruje, aby podać kontekst dla linków .

nmap jest świetny, jeśli trochę mylący w użyciu. Oto coś, co uruchamiam, aby odkryć urządzenia sieci lokalnej, które są w większości copy-paste-able. nmap -sP (lub nmap -sn) skanuje przez pinging . Są też inne opcje ‘host discovery’, jak z nmap -sL lub nmap -Pn.

Droga #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

Droga #2. I know this works, but I can’t say if this is the right way to go.

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

I’d be pleased to know if there are more effective ways. Do tego czasu, trzymam się tego.

3
3
3
2011-07-15 18:16:48 +0000

Hunt jest narzędziem linii poleceń, które jest w stanie zbudować listę maszyn, gdy są one nadawane przez sieć w celach informacyjnych. Wykorzystuje on dane TCP, UDP, ICMP i ARP do budowania listy aktywnych adresów MAC w sieci. Jest to pasywne narzędzie, które działa poprzez nasłuchiwanie na kablu.

3
3
3
2019-05-23 17:18:32 +0000

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

fping jest podobny do pingu, ale znacznie lepiej sprawdza się podczas pingowania wielu hostów. Flaga -r 1 mówi, żeby fping wykonywał tylko jedną rundę. Część 2>1 pozwala grepowi filtrować wyjście.

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

Wyświetliłbyś coś w stylu:

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ż ciekawa flaga dla nmap, która pozwoliłaby zobaczyć dostawcę MAC - jeśli jest znany. Użyj z sudo aby zobaczyć adresy MAC.

$ sudo nmap -sP 192.168.1.0/24

Otrzymałbyś 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
3
3
3
2017-11-08 13:22:31 +0000

1. Alternatywne rozwiązanie, jeśli audycje i nmap nie są dostępne:

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

2a. lub wystarczy zapytać 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. pings all pingable Network-Devices in the 192.168.2.0/24 subnet in parallel (aby skrócić czas działania). Następnie arp powinien wyświetlić każde urządzenie, które odpowiedziało.

  2. nie sprawdza aktywnych ani bieżących połączeń, ale listę wszystkich połączeń, które utrzymuje lokalny serwis domenowy, nawet tych naprawdę starych.

Bardziej szczegółowe wyjaśnienie:

  • seq 254 aby utworzyć wszystkie numery od 1 do 254 (dla wszystkich numerów od 100 do 150: seq 100 150)
  • xargs wywołuje ping i zastępuje “IP” (-iIP) numerem sequence z stdin, czyli 192. 168.2.IP zmienia się na 192.168.2.1 dla pierwszego numeru seq, -P określa ilość procesów współbieżnych ping, które mają się rozpocząć, wybieram taką samą ilość +1 jak adresy (=254) im zainteresowane.
  • xargs z adresem ip zmodyfikowanym przez xargs (ping) i tylko raz pingiem (192.168.2.IP); musisz użyć tego samego identyfikatora jak podany dla xargs nad argumentem -c1 w tym przypadku -i
  • IP aby usunąć każdą linię zawierającą zbędne informacje, interesują nas tylko odpowiedzi, które podają czas podróży w obie strony (=got a response)
  • grep time= aby wyświetlić ważne pary nazwa(ip)

Nazywam to moją komendą pingall i udostępniłem ją nad aliasem w arp -a:

alias pingall='seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time='
3
3
3
2016-07-25 17:31:07 +0000

Aby przeskanować stan szeregu adresów IP, jest to ładne i proste:

sudo nmap -sn 192.168.1.2-20

Gdzie:

-sn: Ping Scan - disable port scan

Uwaga:

  • W poprzednich wydaniach Nmapa, -sn był znany jako -sP

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

2
2
2
2016-10-20 10:28:47 +0000

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

nmap -sL 192.168.0.* | grep \(1

Objaśnienie.

nmap -sL 192.168.0.* wyświetli wszystkie 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 ciekawe rekordy zaczynają się od nawiasów ( i cyfry 1, filtrujemy do tego z | grep \(1 (backslash jest potrzebny, aby uniknąć nawiasów)

Quirk Uważaj, że jeśli dwa urządzenia mają tę samą nazwę, nmap wyświetli tylko to, które zostało podłączone do routera last