Wie kann ich ein Linux-Bash-Skript schreiben, das mir sagt, welche Computer in meinem LAN eingeschaltet sind?
Wie kann ich schreiben Sie eine linux-bash-Skript, das mir sagt, welche Computer in meinem LAN ?
Würde es helfen, wenn ich könnte geben Sie als Eingabe einen IP-Bereich.
InformationsquelleAutor der Frage Dumb Questioner | 2009-04-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde vorschlagen, mit nmap - ping-scan-flag,
Sagte, dass, wenn Sie wollen, um es selbst schreiben (das ist fair genug), das ist, wie ich es tun würde:
..und eine Erklärung jedes bit des obigen Befehls:
Generieren Liste von IP-Adressen
Können Sie die
{1..10}
syntax zum erzeugen einer Liste von zahlen, zum Beispiel..(es ist auch nützlich für Dinge wie
mkdir {dir1,dir2}/{sub1,sub2}
- das machtdir1
unddir2
jeweilssub1
undsub2
)So, um eine Liste von IP ' s, wir würden etwas tun, wie
Schleifen
Schleife über etwas in bash, verwenden Sie
for
:Ping
Weiter, um ping.. ping-Befehl variiert ein wenig mit verschiedenen Betriebssystemen, unterschiedlichen Distributionen/Versionen (ich verwende OS X derzeit)
Standardmäßig (auch auf der OS X-version von
ping
) es wird der ping unterbrochen, bis, das wird nicht funktionieren, soping -c 1
nur versuchen, das senden eines Paketes, das sollte genug sein, um festzustellen, ob eine Maschine ist.Ein weiteres problem ist das Zeitlimit, das scheint zu sein, 11 Sekunden auf dieser version von ping.. Es verändert mit der
-t
Flagge. Eine Sekunde sollte reichen um zu sehen, wenn eine Maschine im lokalen Netz lebendig ist oder nicht.So, den ping-Befehl, den wir verwenden werden ist..
Überprüfung ping-Ergebnis
Als Nächstes müssen wir wissen, ob die Maschine antwortete oder nicht..
Können wir die
&&
- operator, um einen Befehl auszuführen, wenn der erste erfolgreich ist, zum Beispiel:Gut, so dass wir tun können..
ping -c 1 -I 1 192.168.1.1 && echo "192.168.1.1 ist!"
Die andere Möglichkeit wäre die Verwendung der exit-code von ping.. ping-Befehl wird beendet mit exit-code 0 (Erfolg) zurück, wenn es funktionierte, und ein nicht-null-code, wenn ein Fehler aufgetreten ist. In der bash erhalten Sie die letzten Befehle exit-code mit der variable
$?
So, um zu überprüfen, ob der Befehl funktionierte, würden wir das tun..
Versteckt ping-Ausgabe
Letzte Sache, die wir nicht brauchen, um zu sehen, der ping-Ausgabe, so können wir umleiten
stdout
zu/dev/null
mit der>
Umleitung, zum Beispiel:Und umleiten
stderr
(verwerfen derping: sendto: Host is down
Nachrichten), die Sie verwenden2>
- zum Beispiel:Das Skript
So zu kombinieren, dass..
Oder mit den
&&
Methode, in einem one-liner:Problem
Ist es langsam.. Jeder Befehl ping dauert etwa 1 Sekunde (da wir aber die-t-timeout-flag auf 1 Sekunde). Es kann nur führen Sie einen ping-Befehl an eine Zeit.. Die offensichtliche Weg, um dieses ist die Verwendung von threads, also Sie können Befehle gleichzeitig auszuführen, aber das ist jenseits dessen, was Sie verwenden sollten, bash..
"Python-threads - ein erstes Beispiel" wird erläutert, wie die Python threading-Modul zum schreiben von multi-threaded-ping ' er.. Obwohl an diesem Punkt, ich würde mal wieder vorschlagen, mit
nmap -sn
..InformationsquelleAutor der Antwort dbr
In der realen Welt, Sie könnte verwenden nmap zu bekommen, was Sie wollen.
Diese wird ping alle Adressen im Bereich von 10.1.1.1 bis 10.1.1.255 und lassen Sie Sie wissen, welche Antwort.
Natürlich, wenn Sie tatsächlich wollen, dies zu tun als ein bash-übung könnte führen Sie ping für jede Adresse und analysieren Sie die Ausgabe, aber das ist eine ganz andere Geschichte.
InformationsquelleAutor der Antwort Tiberiu Ana
Vorausgesetzt mein Netzwerk 10.10.0.0/24, wenn ich einen ping auf die broadcast-Adresse wie
Ich eine Antwort bekommen von allen Computern in diesem Netzwerk nicht blockieren, Ihre ICMP-ping-port.
So dass Sie nur noch extrahieren Sie die 4. Spalte mit awk zum Beispiel:
Gut, erhalten Sie duplizieren, und Sie müssen möglicherweise zu entfernen ':'.
BEARBEITEN von Kommentaren :
die -c-option schränkt die Anzahl der pings
da das Skript endet, können wir uns auch beschränken, uns auf einzigartige IPs
InformationsquelleAutor der Antwort chburd
Gibt es auch fping:
oder:
oder zeigt nur hosts, die lebendig sind:
Es pings hosts in parallel so dass der scan ist sehr schnell. Ich weiß nicht, eine distribution, welche umfasst
fping
in der Standard-installation aber in den meisten Distributionen können Sie es über den Paket-manager.InformationsquelleAutor der Antwort d0k
Auch mit dem "ping an die broadcast-Adresse" - Methode hingewiesen hat, chburd, das Rohr sollte den trick für Sie:
Natürlich müssten Sie ändern die broadcast-Adresse des Netzwerks.
InformationsquelleAutor der Antwort Can Berk Güder
Nur zum Spaß, hier ist eine Alternative
InformationsquelleAutor der Antwort Eddy
Wenn Sie selbst die Beschränkung auf, nur das Letzte Oktett ändern, das script sollte es tun. Es sollte ziemlich offensichtlich, wie eine Verlängerung von einem bis zu mehreren Bytes.
InformationsquelleAutor der Antwort Vatine
ip-Nachbar
arp-a
InformationsquelleAutor der Antwort raspi
Als andere Poster darauf hingewiesen,
nmap
ist der Weg zu gehen, aber hier ist, wie zu tun, das äquivalent von einem ping-scan in der bash. Ich würde nicht verwenden die broadcast-ping, wie viele Systeme sind so konfiguriert, nicht zu reagieren, um broadcast ICMP heute.InformationsquelleAutor der Antwort Don Werve
InformationsquelleAutor der Antwort hemanth.hm
Zwar eine alte Frage, scheint es immer noch wichtig zu sein (zumindest wichtig genug für mich um damit umzugehen). Mein script basiert auf nmap zu, also nichts besonderes hier, außer, dass IE können festlegen, welche Schnittstelle Sie Scannen möchten, und die IP-Range erstellt automatisch (zumindest eine Art).
Dies ist, was ich kam mit
Eine Bemerkung: Dieses Skript ist erstellt auf OSX, so dass es möglicherweise einige änderungen in linux-Umgebungen.
InformationsquelleAutor der Antwort d3v3l
Wenn Sie möchten, um eine Liste der hosts, auf denen es getan werden kann, mit nmap, grep und awk.
Installieren Sie nmap:
Datei erstellen hostcheck.sh wie diese:
hostcheck.sh
-sP: Ping Scan - go no weiter, als die Bestimmung, wenn der host online ist
-iL : - Eingang aus der Liste der hosts/Netzwerke
-oG : Ausgabe der scan-Ergebnisse in Grepable-format, zu dem angegebenen Dateinamen.
/dev/null : Verwirft Ausgabe
Ändern Sie die Zugriffsrechte:
Erstellen Sie die Datei hostlist mit der Liste der hosts überprüft werden (hostname oder IP):
hostlist (Beispiel)
192.168.1.1-5 ist ein Bereich von IP Adressen
Führen Sie das Skript:
./hostcheck.sh hostfile
Werden die generierten Dateien pingscan mit allen Informationen, uplist mit der hosts-online (Bis) und downlist mit der hosts offline (Down).
uplist (Beispiel)
downlist (Beispiel)
InformationsquelleAutor der Antwort viniciusfcosta
Einige Maschinen keine Antwort auf pings (z.B. firewalls).
Wenn Sie möchten, dass nur das lokale Netzwerk Sie können mit diesem Befehl:
Erläuterungen Teil !
arping
ist ein Befehl, sendet ARP-Anfragen. Es ist auf den meisten linux.Beispiel:
dem sudo ist nicht notwendig, wenn Sie das root-ofc.
10.0.0.14
: die ip, die Sie testen möchten-c1
: senden Sie nur eine Anfrage.&
: der 'ich-nicht-want-to-wait" - ZeichenDies ist ein wirklich nützliches Zeichen, das Ihnen die Möglichkeit zum starten eines Befehls in einem sub-Prozess, ohne zu warten, ihn zu beenden (wie ein Faden)
for
- Schleife ist hier, um arping emerged werden alle 255 ip-Adressen. Es verwendet dieseq
Befehl, um eine Liste aller Nummern.wait
: nachdem wir gestartet unsere Anfragen, die wir wollen, um zu sehen, wenn es einige Antworten. Zu tun, so dass wir erstwait
nach der Schleife.wait
sieht aus wie die Funktionjoin()
in anderen Sprachen.()
: Klammern sind hier zu interpretieren sind alle Ausgänge als text, damit wir geben können, es zugrep
grep
: wir wollen nur, um zu sehen, Antworten. der zweite grep ist nur hier, um zu markieren IPs.hth
Bearbeiten 20150417: Maxi Aktualisieren !
Den schlechten Teil meiner Lösung ist, dass es druckt alle Ergebnisse am Ende. Es ist, weil grep ist groß genug Puffer, um einige Linien im inneren.
die Lösung ist das hinzufügen
--line-buffered
dem ersten grep.etwa so:
InformationsquelleAutor der Antwort Boop
InformationsquelleAutor der Antwort erik
Folgende (schlechte) code läuft mehr als DOPPELT so schnell wie der nmap-Methode
dauert etwa 10 Sekunden, wo der standard nmap
dauert 25 Sekunden...
InformationsquelleAutor der Antwort Mike Redrobe
Gut, das ist ein Teil von einem script von mir.
Pings Netzwerk, zeigt der online-hosts in diesem Netzwerk mit Ihren lokalen IP-und MAC-Adresse
Ist es nicht erforderlich, alle zu Bearbeiten. Braucht root-Berechtigung ausführen.
InformationsquelleAutor der Antwort xtonousou