Ich versuche, ein Skript bash
zu schreiben, um alle IP-Adressen auf einem Server zu erhalten. Das Skript sollte auf allen wichtigen Distributionen funktionieren. Hier ist was ich habe:
Ergebnis:
%Vor% Wie kann ich zuerst das Präfix addr:
entfernen? Zweitens, wie kann ich 127.0.0.1
ausschließen?
ifconfig
wurde von ip
veraltet. Es hat auch das Flag -o
, das geschriebene Ausgaben leicht zu analysieren ist. Verwenden Sie ip -4
, um nur IPV4-Adressen anzuzeigen. Beachten Sie das einfachere Skript, es schließt bereits die Loopback-Adresse aus:
Oder wenn Sie die Netzwerke nicht wollen:
%Vor% Mit hostname
können Sie eine Liste aller Ihrer IP-Adressen erhalten, indem Sie -I
verwenden. Flagge.
d. h.
%Vor%während
%Vor%Centos7 (k3.10.0)
Hier ist ein ähnliches Skript für das, was ich getestet habe, um einen IP-Adressbereich zu erhalten, aber es ist langsam - jemand könnte einen Hinweis geben, wie man das beschleunigt? (Der IP-Bereich hier ist ein Beispiel für alle Linien, die zwischen Vancouver und Korea zu sein scheinen):
#! / bin / bash
für ip in {209..210}. {125..206}. {5..231}. {65..72} # any ip zwischen 209.126.230.71 und 210.205.6.66
tue
printf '===% s === \ n' "$ ip"
whois "$ ip" & gt; & gt; /home/$user/test001.txt
erledigt
Wenn dies hier zu trivial oder ein Fehler ist, antworten Sie einfach oder kommentieren Sie.
Dieses Skript würde etwa 5 bis 8 Stunden dauern.
Dies ist lediglich eine Destillation mehrerer vorheriger Antworten und Kommentare. Beispielausgabe ist enthalten.
Um IPs aufzulisten:
Verwenden von ip
:
(beschränkt auf IPv4 und global)
%Vor% Verwenden von ifconfig
:
(außer 127.0.0.1)
%Vor%Um IPs Hostnamen zuzuordnen, lesen Sie diese Antwort .
Wenn nur das Wort "addr:" entfernt werden soll, verwende ich sed
anstelle von awk
like
Es ist eine sehr knifflige Lösung, aber es funktioniert:
ip a | awk ' !/[0-9]+\: lo/ && /^[0-9]\:/ || /inet / && !/127\.0\.0\.1/ {print }'
Ausgabe:
eth0:
192.168.0.1/24
Besser noch:
ip a | awk ' !/[0-9]+\: lo/ && /^[0-9]\:/ || /inet / && !/127\.0\.0\.1/ {print }' | perl -i -pe "s/:\n/: /g;" -pe "s/\/[\d]+$//"
Ausgabe:
eth0: 192.168.0.1
Ich habe keine Maschine mit mehreren Non-Loopback-Interfaces, mit denen ich es überprüfen kann. Sie können Ihre Ergebnisse veröffentlichen.
Ich bin immer wieder überrascht, wenn Leute sed und awk anstelle von Perl benutzen.
Aber zuerst, mit grep und awk mit einer zusätzlichen Option, zögern Sie nicht, nur:
%Vor%Ersetze die Awks durch Perl:
%Vor%Ersetze die Greps innerhalb desselben Perl-Skripts:
%Vor%und zuletzt nur die Macht von Perl Regex:
%Vor%Ich möchte Sie mit einem Befehlszeilentool namens OSQuery von Facebook bekannt machen, das Ihnen beim Erstellen von Systeminformationen hilft, indem Sie SQL erstellen ähnliche Anfragen. Für Ihren Fall würden Sie zum Beispiel eintreten;
%Vor%Was würde so etwas ausgeben?
%Vor%Was ich viel besser finde.