So finden Sie alle verwendeten IP-Adressen in einem Netzwerk


94

In meiner Arbeit steckt viel Computer und ich möchte einen Witz machen. Ich kann den Computer über das Netzwerk schließen, aber es fällt mir schwer, IP-Adressen zu finden.

Wie kann ich einfach alle Online-IP-Adressen von 192.168.1.aa bis 192.168.1.zz finden?


4
Versuchangry ip scanner
Web-E


2
Ernsthaft? Sie möchten, dass unsere Hilfe Ihren Mitarbeitern einen Streich spielt?
Dan H

Antworten:


141

Im Allgemeinen nmapist es sehr nützlich, Netzwerke schnell zu scannen.

Geben Sie zum Installieren von nmap den folgenden Befehl in das Terminal ein:

sudo apt-get install nmap

Geben Sie nach der Installation der Anwendung den folgenden Befehl ein:

nmap -sn 192.168.1.0/24

Hier sehen Sie, welche Hosts auf Ping-Anfragen im Netzwerk zwischen 192.168.1.0 und 192.168.1.255 geantwortet haben.


Für ältere Versionen von Nmap verwenden Sie -sP:

nmap -sP 192.168.1.0/24

Weitere Referenzen finden Sie auf den folgenden Seiten:

NMAP-Installationshandbuch

NMAP-Referenzhandbuch

Es ist ein sehr nützliches Werkzeug zum Lernen.


2
Nicht alle Hosts antworten auf Pings. ARP ist der richtige Weg, zumindest in IPv4.
Marcin Kaminski

3
Das ist genug für mich und es funktioniert im Internet

1
Ist es nur mein Computer, oder dauert es ewig, bis dieser Befehl ausgeführt wird?
JohnMerlino

4
Beachten Sie, dass Sie zur Beschleunigung des nmap-Scans die Flags -T4 (Geschwindigkeit) und -n (nur numerisch) hinzufügen sollten.
Sergiy Kolodyazhnyy

3
Denken Sie daran, dass Sie sudo für den Befehl nmap benötigen , andernfalls werden keine Ergebnisse zurückgegeben.
Machineaddict

40

Handelt es sich bei allen Computern in Ihrem Netzwerk um Ubuntu oder eine andere Distribution, die avahi-daemon( DNS-SD ) verwendet, können Sie eine detaillierte Liste dieser Computer (mit Hostname und IP-Adresse) abrufen, indem Sie folgende Schritte ausführen:

avahi-browse -rt _workstation._tcp

Wenn Sie alle in Ihrem Netzwerk verwendeten IP-Adressen kennen möchten, können Sie Folgendes verwenden arp-scan:

sudo arp-scan 192.168.1.0/24

Da es nicht standardmäßig installiert ist, müssen Sie es mit installieren sudo apt-get install arp-scan. arp-scanSenden Sie ARP-Pakete an das lokale Netzwerk und zeigen Sie die empfangenen Antworten an, sodass auch Firewall-Hosts angezeigt werden (die den Datenverkehr auf der Basis von IP-Paketen blockieren).


3
Dieser Befehl ist definitiv besser als der obige. Das Ausführen von nmap dauerte Ewigkeiten, aber dieser antwortete sofort mit den Knoten im angegebenen Netzwerk.
JohnMerlino

3
In meinem Fall werden sehr oft arp-scannicht alle Geräte gefunden, die meinem drahtlosen Netzwerk zugeordnet sind. Beispiel: sudo arp-scan 192.168.2.0/24Zeigt 2 Ergebnisse (.1 und .1) an, während nmap -sn 192.168.2.0/244 Ergebnisse (.1, .2, .3 und .4) angezeigt werden. Das scheint also nmapgenauer zu sein (ich weiß mit Sicherheit, dass 4 Geräte an das Netzwerk angeschlossen sind). Warum ist das?
Tigerjack89

2
Vielleicht habe ich die Antwort in einem Kommentar zu einer anderen Frage gefunden. "Es ist zu beachten, dass einige Geräte möglicherweise erst angezeigt werden, wenn sie eingeschaltet sind. Mein Nexus 4 wird erst angezeigt, wenn der Bildschirm eingeschaltet ist." Interessant ist jedoch, dass immer die gleichen Geräte auf Pings von reagieren nmap.
Tigerjack89

arp-scanist nett !
Forzagreen

17

Hinweis für den Leser : Die ursprüngliche Antwort wurde vor einiger Zeit und zu der Zeit, als ich nur Shell-Scripting lernte, veröffentlicht. In der überarbeiteten Version unten finden Sie ein neues und verbessertes Skript, das viel schneller ausgeführt wird.

Ursprüngliche Antwort

nmapwäre meine erste Wahl, aber was ist, wenn Sie es nicht haben? Der DIY-Weg wäre mit einem Ping-Skript, das jede mögliche IP-Adresse im Netzwerk manuell durchläuft. Was wir hier haben, ist nur eine while-Schleife, in der wir die letzte Nummer in der Adresse setzen, einen stillen einzelnen Ping an die Adresse senden, prüfen, ob der Befehl erfolgreich war oder nicht (und wenn er erfolgreich war, dann ist der Host offensichtlich aktiv) und eine printfAnweisung. Schnell und schmutzig, brauchte ungefähr 10 Minuten, um es zu schreiben, aber die Laufzeit ist möglicherweise etwas langsam.

#!/bin/sh
# set -x
NUM=1

while [ $NUM -lt 256  ];do 
    ping -q -c 1 192.168.0.$NUM > /dev/null 
    RESULT=$(echo $?)
    if [ $RESULT -eq 0 ]; then 
        printf 192.168.0.$NUM"\n"
    fi
    NUM=$(expr $NUM + 1)
done

Überarbeitete Antwort

Ich habe diese Antwort ursprünglich im August 2015 gepostet. Seitdem habe ich etwas mehr über Shell-Skripte gelernt. Als ich dieses Skript sah, hielt ich es für eine gute Idee, diese Antwort zu überarbeiten, um ein paar Verbesserungen hinzuzufügen. Hier sind ein paar Ideen:

  • Das Skript ist offensichtlich langsam und pingwartet auf die Antwort des Hosts. In der Standardeinstellung pingfür zwei RTT, die auf variieren je nachdem , wie überlastet ist Ihr Netzwerk, und so weit ich das TCP - Protokoll verstehen verdoppelt sich die Wartezeit jedes Mal (zumindest nach dieser ). Also könnten wir pingmit -w 1flag eine Auszeit erzwingen . Da wir 256 Adressen haben und für jede Adresse 1 Sekunde annehmen, dauert das Skript ungefähr 256/60 = 4,27 Minuten.

  • Einen Befehl auszuführen und dann seinen Exit-Status mit zu erfassen, $?war nicht wirklich notwendig. Sie if ... then;...fikönnen Befehle direkt bearbeiten. Mit anderen Worten, es reicht aus, dies zu tun:

    if ping -w 1 -q -c 1 192.168.0.$NUM > /dev/null ;
    then
         <some other code here>
    fi
    
  • Der printfBefehl kann folgendermaßen umgeschrieben werden:

    printf "IP %s is up\n" 192.168.0."$NUM"
    

    Dies ist eher eine stilistische Änderung, stimmt jedoch mit der Funktionsweise printfund dem Erscheinungsbild vieler anderer Sprachen überein , wobei "$NUM"Variablen zitiert werden. Das Zitieren hier ist nicht erforderlich - da es sich nur um Zahlen handelt, müssen wir nicht mit dem Aufteilen von Wörtern rechnen, da Leerzeichen in einer Variablen vorhanden sind.

  • Eine viel bessere Leistungsverbesserung kann erreicht werden, wenn wir mehrere Hintergrundprozesse erzeugen. Die folgende Skriptbearbeitung erledigt genau das. Ich setze das pingund printfin eine Funktion pingf(ja, kitschiger Name, ich weiß). Jetzt gibt es auch eine einzige mainFunktion, die das Schleifen und Aufrufen von erledigt pingf.

#!/bin/sh
# Uncomment for debugging
#set -x
pingf(){
    if ping -w 2 -q -c 1 192.168.0."$1" > /dev/null ;
    then 
        printf "IP %s is up\n" 192.168.0."$1"
    fi
}

main(){

    NUM=1
    while [ $NUM -lt 255  ];do 
        pingf "$NUM" &
        NUM=$(expr "$NUM" + 1)
    done
    wait
}

main

Wie viel besser funktioniert das? Eigentlich nicht schlecht, dauert nur ein paar Sekunden.

$ time ./ping_script.sh                                                                      
IP 192.168.0.1 is up
IP 192.168.0.101 is up
IP 192.168.0.27 is up
IP 192.168.0.29 is up
    0m02.50s real     0m00.01s user     0m00.12s system

Dinge zu beachten

  • Windows (seit Windows 7, glaube ich) hat begonnen, die Antwort auf ICMP-Echoanforderungen zu blockieren. Es gibt einige Fragen dazu auf Ask Ubuntu und anderen Sites der Art "Hey, mein Linux-Computer kann gepingt werden, aber nicht Windows, was ist damit los?" Beachten Sie jedoch, dass Sie für neuere Windows-Versionen die Antwort auf ICMP-Echo aktivieren müssen.

2
Ich mag diese Art von Lösung
Szenis


4

fpingist ein großartiges Tool zum Scannen mehrerer Hosts in einem Netzwerk über ICMP. Wenn es nicht installiert ist, können Sie es folgendermaßen installieren:

sudo apt-get install fping

fping sendet ICMP-ECHO_REQUEST-Pakete und markiert einen Host als Up, wenn er ECHO_RESPONSE vom Host erhält.

Um beispielsweise die Hosts des Subnetzes zu scannen 192.168.1.0/24, haben Sie folgende Möglichkeiten:

fping -g 192.168.1.0/24

Für eine bestimmte Anzahl von Hosts, zB von 192.168.1.15bis 192.168.1.140:

fping -g 192.168.1.15 192.168.1.140

fping ist sehr konfigurierbar, zB wie viele Pakete gesendet werden, wie lange auf eine Antwort gewartet werden soll, Ausgabeformat usw.

Überprüfen Sie man fping, um weitere Informationen zu erhalten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.