IP suchen per Terminal

Wanderfalke

Wanderfalke

Aktives Mitglied
Thread Starter
Dabei seit
28.12.2007
Beiträge
616
Reaktionspunkte
5
hey,
ich versuch grad per Terminal meine ip zu finden.
Dazu hab ich das in das Terminal eingegeben:

Code:
ifconfig | grep "inet " | grep -v 127.0.0.1 | grep -v 10.211 | grep -v 10.37 | grep -v 192.168.247 | grep -v 192.168.98.1 | cut -d\  -f2

das hat mir meine IP immer sauber ausgespuckt. Das wollte ich dann so haben, dass ich einfach nur sowas wie "myip" eintippen müsste und er mir dann sofort meine ip ausspuckt.

das hab ich mit dem befehl
Code:
chmod +x myip.sh
versucht.

Wenn ich allerdings "myip" im Terminal eingebe, dann spuckt er das hier aus:
Code:
fe80::1%lo0
::1
fe80::21e:c2ff:fead:a574%en1
192.168.2.102
fe80::21c:42ff:fe00:1%en3
fe80::21c:42ff:fe00:0%en2

Da steht zwar die richtige Ip-Adresse drin, aber das ganze andere Zeugs will ich nciht sehen. Wie krieg ich das weg?

Vielen Dank schonmal für eure Hilfe!!
(ich hab auf den Gebiet kaum Ahnung - alles, was ich hier gemacht hab, hab ich mir aus Tutorials ausm Netz zusammengesucht...)
 
Hallo Wanderfalke,

hmm hast du evtl. noch ein zweites Script im PATH liegen das myip heist?
Irgendwie hast du oben wiedersprüchliche Angaben gemacht einmal myip und ein anderes mal myip.sh

Könnte das Problem evtl. damit zusammen hängen?

Gruß Reinhard
 
Frage: Was ist Deine IP?

Die an lo0, en0, en1, fw0 ... ? IP4 oder IP6?

Abgesehen davon beschäftige Dich mal mit regulären Ausdrücken


Die IP4 für en0 ist bei diesem Ausdruck in $2:

/en0:([^\n]*\n)*?\tinet (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/

Alex
 
Code:
curl -sf http://checkip.dyndns.org/|cut -d ':' -f 2|cut -d '<' -f1|sed -e 's/ //g'
Dies ist ein etwas anderer Ansatz um an die externe IP zu kommen, aber durchaus effektiv.
 
pack doch noch ein "grep -v ::" dazu...
du halt die IPv6 adressen sonst mit im output...
 
*verschieb*
 
Code:
curl -sf http://checkip.dyndns.org/|cut -d ':' -f 2|cut -d '<' -f1|sed -e 's/ //g'
Dies ist ein etwas anderer Ansatz um an die externe IP zu kommen, aber durchaus effektiv.
der funktioniert aber leider nur bei bestehender internetverbindung!
 
Der Tip von TerminalX zeigt ein anderes Problem:

Welche IP willst Du haben? Die lokale, oder die vom Router?

Alex
 
Welche IP willst Du haben? Die lokale, oder die vom Router?
Stimmt, war mir auch gestern aufgefallen nachdem ich mein Post geschrieben hatte, dass er eigentlich die lokale IP in seinem ersten Post sucht. Habs trotzdem mal stehen gelassen, es gehört ja irgendwie zum Thema...
der funktioniert aber leider nur bei bestehender internetverbindung!
Mein Code sucht ja auch nach der "externe IP", was ich auch dahingeschrieben habe. Natürlich braucht man dafür eine Internetverbindung, andernfalls hat man keine externe IP.

So hier nun ein Script für die lokale IP Adressen:
Code:
ifconfig | grep 'broadcast' | awk '{print $2}'
Das Problem ist, dieser Script gibt alle "lokalen" IP Adressen zurück. Also auch von virtuellen interfaces. In meinem persönlichen Fall würde ich noch die broadcast Adresse angeben, da ich die eigentlich nie ändere und die auf jeden Fall eine andere ist als die der vmnet interfaces.

Wer awk nicht kennt:
awk ist eine Scriptsprache, die gerne verwendet wird im Zusammenhang mit Text(dateien) zur Bearbeitung oder Auswertung. Wörter, oder allgemein eine Reihenfolge von Zeichen, die zwischendurch von einem Leerzeichen getrennt sind, können durch die Variablen $x aufgerufen werden, wo x eine Zahl ist. Also in unserem Fall gibt uns $2 das zweite "Wort", nämlich die IP, die immer nach "inet" steht, zurück.
 
Mein Code sucht ja auch nach der "externe IP", was ich auch dahingeschrieben habe. Natürlich braucht man dafür eine Internetverbindung, andernfalls hat man keine externe IP.
das kommt auf die definition von "externe ip" an.
hab hier rechner mit diversen IPs, auch "externen".
aber keine wird ins inet geroutet.

für die internetip funktioniert das ja, solange port 80 nach draussen offen ist.
alles in allem eine gute lösung für den heim bedarf, für alles andere aber zu speziell. meine meinung.
 
Um die IP Adresse eines "regulären" Interface (z.B. en0) auszugeben, gibt es ein ganz einfaches Kommando ohne grep, awk und ähnliche Umwege:
Code:
ipconfig getifaddr en0
 
Könnt Ihr Eure Privatdisskussion bitte per PN weiterführen.
Für die Allgemeinheit ist das nicht allzu interessant.

Danke.
 
hey,
ich find eure Ansätze und Erklärungen alle super und ich krieg damit auch inzwischen das, was ich haben will.
Was mein Problem jetzt noch ist ist, dass ich das nicht hinkriege, dass ich den Befehl ausführbar mache.
ich dachte ich würde das mit
Code:
chmod +x myip.sh
hinkriegen.

Aber er scheint den vorherigen Befehl nicht zu überschreiben. Er spuckt immer exakt dasselbe Ergebnis aus, wie schon im Eingangspost.
Überschreibt der das nicht?
 
Aber er scheint den vorherigen Befehl nicht zu überschreiben. Er spuckt immer exakt dasselbe Ergebnis aus, wie schon im Eingangspost.
Überschreibt der das nicht?
was soll denn da auch überschrieben werden?
nach dem chmod müsste dein script in dem verzeichniss mit ./myip.sh ausgeführt werden können.
 
hmm ja das funktioniert.
Was ich eigentlich wollte ist, dass ich nicht extra in das Verzeichnis muss, sondern dass der script irgendwo so gespeichert wird, dass ich einfach ins terminal "myip" eingeben kann...
 
Hi du könntest myip.sh z.B. nach /usr/bin verschieben, oder dort nen link auf deine Datei setzen, dann solltest du das Skript durch einfaches eingeben von dem Namen starten können.
Mach davor aber mal noch nen: which myip
du müsstest irgendwo noch ein Programm mit dem Namen haben, sonst hätte es die vorherige Ausgabe eigentlich nicht geben dürfen.
 
Ich hab' gesagt, ...
Du hast gesagt, ...
Ich hab aber gemeint, ...

Das wird mir jetzt zu albern. Ich hab' die Off Topic Postings jetzt mal augeblendet.

Zur Sache:
Nach /usr/bin würde ich nichts empfehlen. Dieses Verzeichnis ist für's System vorgesehen.
Ich würde eher ein Verzeichnis /usr/local/bin anlegen (falls nicht schon vorhanden) und das Skript da hinein schieben. Jetzt muss nur noch die Pfadvariable erweitert werden:
Code:
export PATH=$PATH:/usr/local/bin
Wenn man diese Kommando in eine geeignete Initialisierungsdatei der verwendeten Shell steckt, muss man das auch nie mehr eingeben. Wie das genau geht, ist auf meiner Homepage beschreiben (und in den manpages der verwendeten Shell).

Gruß
maceis

Edit:
Ein Shellskript ist für diesen Job aber eigentlich überzogen. Ein alias würde IMHO genügen:
Code:
alias myip='ipconfig getifaddr en0'
 
Zuletzt bearbeitet:
irgendwie muss ich mich mal richtig gezielt mit dem Terminal und Unix auseinandersetzen.

Ich habs jetzt mal über die alias probiert - und hab da versucht die alias permanent zu machen.
Dazu hatte ich das hier gefunden:
Link

Was mich dabei noch nervt ist, dass man immer . .bash_rc eingeben muss. Gibts nicht irgenwelche Dateien, die sowieso reingeladen werden und wo man dann das alias reinschreiben könnte?


*edit: wenn ich
Code:
. .bash_rc
nicht eingebe, dann scheint er irgendwie auf das chmod +x myip.sh zurückzugreifen und da was auszuspucken. Wie krieg ich das irgendwie wieder raus?
 
Zuletzt bearbeitet:
Hi, versuchs mal mit der Datei .bash_profile die wird unter Mac OS X immer standardmäßig geladen. Irgendwo lässt sich aber sicherlich auch einstellen, dass .bash_rc geladen wird (außer .bash_profile).
 
ja das funktioneirt! vielen Dank!

dann versuch ichs jetzt nochmal auf die andere weise
 
Zurück
Oben Unten