Bash-Skript, um alle IP-Adressen zu erhalten

7

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:

%Vor%

Ergebnis:

%Vor%

Wie kann ich zuerst das Präfix addr: entfernen? Zweitens, wie kann ich 127.0.0.1 ausschließen?

    
Justin 21.09.2012, 03:33
quelle

12 Antworten

7

grep ist nicht erforderlich. Hier ist eine Möglichkeit mit awk :

Nur Adr. auflisten:

%Vor%

Gerät und Adresse auflisten:

%Vor%     
Steve 21.09.2012, 03:40
quelle
12

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:

%Vor%

Oder wenn Sie die Netzwerke nicht wollen:

%Vor%     
Pedro Lacerda 27.09.2012 14:47
quelle
2

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)

    
Matt Clark 11.12.2016 07:01
quelle
1

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.

    
dschinn1001 09.10.2013 19:23
quelle
1

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 .

    
A-B-B 18.12.2014 23:46
quelle
0

Verwenden Sie grep -v, um 127.0.0.1 zu ignorieren.

%Vor%

Verwenden Sie sed, um die 'addr:'

zu bearbeiten %Vor%     
John3136 21.09.2012 03:36
quelle
0

ifconfig | grep 'inet addr:' | awk {'print '} | awk 'BEGIN{FS=":"}{print }' | grep -v '127.0.0.1'

    
Marcus 21.09.2012 03:37
quelle
0

Wenn nur das Wort "addr:" entfernt werden soll, verwende ich sed anstelle von awk like

%Vor%     
quelle
0

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.

    
Yaron 31.03.2015 08:02
quelle
0

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%     
Gerard ONeill 01.10.2015 19:29
quelle
0

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.

    
David Okwii 19.05.2017 11:19
quelle
-1
%Vor%     
timoph 21.09.2012 03:36
quelle

Tags und Links