Jak mogę wyświetlić listę wszystkich adresów IP w podłączonej sieci, najlepiej przez Terminal?

219

Korzystając z Ubuntu 10.10, zastanawiałem się, czy istnieje polecenie wiersza poleceń, które może wyświetlać wszystkie adresy IP urządzeń podłączonych do sieci?

Użyłbym tego na przykład, aby wyświetlić listę wszystkich komputerów podłączonych do mojej sieci domowej. Idealnie, musi to być wiersz poleceń, ponieważ będę go uruchamiał z C ++.

Jakieś pomysły?

Christopher Gwilliams
źródło

Odpowiedzi:

243

Sprawdź polecenie arp-scan - prawdopodobnie będziesz musiał go zainstalować np .:

sudo apt-get install arp-scan

http://manpages.ubuntu.com/manpages/hardy/man1/arp-scan.1.html

I aby podać dalsze szczegóły:

sudo arp-scan --interface=eth0 --localnet

Gdzie eth0 jest twoim urządzeniem. Możesz znaleźć swoje urządzenie za pomocą:

ifconfig
Linker3000
źródło
Perfekcyjnie, dziękuję. Zwraca dokładnie taki format, jakiego potrzebuję.
Christopher Gwilliams
1
Działa również doskonale na OSX! Zainstalowano z Brew, a interfejs był en0, zamiast eth0, ale działa świetnie.
nthonygreen
6
Jeśli masz połączenie z siecią za pomocą Wi-Fi, użyj wlan0zamiast eth0.
Neil
3
Czy możesz to zrobić, aby wyświetlić nazwy hostów, a także adresy IP?
user1527227
2
Warto zauważyć, że nie używa to pamięci podręcznej ARP: wykonuje rzeczywiste skanowanie. W przeciwieństwie do większości skanów nmap, nie może przekraczać granic warstwy 3, co zwykle jest tym, czego chcesz w tym scenariuszu. (Innymi słowy, jest to ograniczone do twojej podsieci.)
Zenexer
112

Użyj nmap. przykład: nmap -sn 10.10.10.0/24pamięć podręczna arp powie ci tylko te, z którymi próbujesz się ostatnio skontaktować.

Keith
źródło
2
to 10.10.10.0 mój podany adres IP? Co to jest 24 w tym przypadku? Dzięki.
kolonel,
4
@kolonel To tylko przykład. Powinieneś zastąpić go swoją siecią. 24 to „ukośnik” maski podsieci. Oznacza to użycie 24 bitów od lewej. Jest to odpowiednik 255.255.255.0.
Keith,
2
@ Czy wiesz, jak znajdę mój adres sieciowy? A może to tylko moje IP z 0/24 na końcu?
TMH
20

W arp -asystemie Windows byłoby to „ ” Uważam, że odpowiednikiem tego w systemie Linux byłoby „ arp -e”.

Te informacje można znaleźć na stronie man dla arp:

arp with no mode specifier will print the current content of the table.
-e : Use default Linux style output format (with fixed columns).
David
źródło
Wygląda na to, że działa (być może trzeba będzie grać, gdy jestem w sieci publicznej, więc wydaje się, że zawiera listę wszystkich serwerów w sieci.
Christopher Gwilliams,
Jeśli korzystam z sieci domowej, czy wyświetli ona listę urządzeń podłączonych do mojego routera? Dzięki!
Christopher Gwilliams
1
To polecenie wyświetli tylko urządzenia w bieżącej pamięci podręcznej arp hosta i będą to tylko te, z którymi host skontaktował się ostatnio.
Linker3000,
Oba działają w systemie Linux, ale arp -awyświetlają (wszystkie) hosty w alternatywnym stylu (BSD). Uproszczone uruchamianie arpdziała tak samo jak uruchamianie, arp -eponieważ jest to ustawienie domyślne.
simplegamer
15

Jeśli masz sieć 192.168.0.0/24, utwórz plik wykonywalny z następującym kodem; Zmień na 192.168.0rzeczywistą sieć.

#!/bin/bash
for ip in 192.168.0.{1..254}; do
  ping -c 1 -W 1 $ip | grep "64 bytes" &
done
Anders Larsson
źródło
Cześć Anders ... Sieć użytkownika może nie być 192.168.0.0/24; Zrobiłem notatkę. Formatowanie strony nie spodobało się sam! i spacje mogły zostać usunięte.
Nevin Williams
Dostarczając skrypt, który należy umieścić w pliku i uczynić wykonywalnym, zamiast po prostu wyciąć i wkleić, prawdopodobnie najlepiej jest to określić; dla niektórych może nie być oczywiste, co wszystko jest wymagane do wdrożenia Twojego rozwiązania.
Nevin Williams
12
Technicznie zwróci to tylko hosty, które odpowiedzą na ping. Mogą istnieć hosty, które są połączone, ale nie odpowiadają na żądania echa ICMP. Można także rozgłaszać jeden pakiet do całej sieci, podając adres rozgłoszeniowy, który jest ostatnim adresem w sieci IP: ping -c 1 -W 1 192.168.0.255 osiągnąłby to samo, co pętla for.
Nevin Williams
@NevinWilliams (wymagane -b, usunięte -W, aby czekać więcej) ping -b -c 1 192.168.0.255wynik „1 przesłanych pakietów, 0 odebranych, 100% utraty pakietów, czas 0ms”
Aquarius Power
13

Spróbuj zainstalować nmap( sudo apt-get install nmap) i wpisz nmap 192.168.1.0/24podstawianie 192.168.1trzema pierwszymi częściami adresu IP (dowiedz się, używając ip addr).

Możesz również uzyskać nieco mniej dokładną (z mojego doświadczenia) mapę sieci, uruchamiając ping 192.168.1.255(ponownie zastępując 192.168.1), co powinno wydawać pingkażdemu komputerowi w sieci, ale z mojego doświadczenia, nie zawsze działa poprawnie.

Samadi
źródło
W rzeczywistości żadna z odpowiedzi nie zawsze będzie działać poprawnie. Adres IP nie został zaprojektowany z myślą o tym wymaganiu, a istnieją takie rzeczy, jak prywatne sieci VLAN, które uniemożliwiają znalezienie innych hostów w tej samej sieci LAN.
Ron Maupin,
2

Przyszedł do tego na nexusie, używając tmuxas, którego arp-scannie ma w repozytorium, ale nmapzostał fabrycznie zainstalowany, wyświetla tylko adresy IP:

nmap -sn 192.168.1.1-254/24 | egrep "scan report" | awk '{print $5}'
zentek
źródło
1

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
Jeśli masz dokładnie taką samą odpowiedź na dwa pytania, warto rozważyć oznaczenie pytań jako zduplikowane zamiast zamieszczania zduplikowanych odpowiedzi. W ten sposób można dzielić się wiedzą, gdy podobne pytania łączą się ze sobą.
Mokubai
1
@Mokubai Masz rację, dodałem komentarz do PO. To pokazuje ciekawy problem. Szybkie wyszukiwanie duplikatów odkryto 6 (ten Q i 5 Links) we wszystkich 4 stron sieciowych (SU, zadaj Ubuntu, sf, Unix). Pewnie, że jest o wiele więcej! Jak sobie z tym poradzić? Idealnie byłoby, gdyby każdy z tych 6 postów zawierał linki do 5 innych. Ręczne dodawanie wszystkich tych linków nie powoduje skalowania. Więc na razie mam link do tego postu (najbardziej pozytywnie oceniany). Innym problemem jest to, że niemożliwe jest oznaczenie Q na AskUbuntu jako duplikatu Q na SU. Hm ... Prawdopodobnie zostało to już omówione w meta?
Alexander Malakhov
nie działa dla mnie na Centos 7, po prostu wyświetla wszystkie możliwe adresy IP w sieci bez nazw. arp-scan działał dla mnie.
Jeff
0

Opracowanie odpowiedzi Andersa Larrsona -

#!/bin/bash
function scan ()
{
    for ip in $1.{1..254}; do
        ping -c 1 -W 1 $ip &
    done | sed -nE 's:^.* from ([0-9.]+).*time=(.*s)$:\1 (\2):p'
}

if [ $1 ]; then
    for baseip; do
        scan $baseip
    done
else
    scan 192.168.1
fi
Mathieu CAROFF
źródło