Interface und IP auslesen

Daroo

Member
Hey Community,
ich würde gerne das Interface des zu operierenden
Systems auslesen, sowie die IP und diese als Variablen
speichern. Mit grep & awk komm ich irgendwie nicht klar :O

Könnte mir vielleicht jemand helfen?

Achja #!/bin/sh not #!/bin/bash ^^

Mit freundlichen Grüßen,
Daroo
 
das Interface des zu operierenden
Systems
Was ist das denn? Ich habe keine Ahnung, wie man davon auf die IP Adresse schließen kann.

Wenn pcu Recht hat:
if="$(route get default | awk '$1 == "interface:" {print $2}')"
ip="$(ifconfig $if | awk '$1 == "inet" {print $2}')"

Da können mehrere IPs bei herauskommen.
 
Die meisten meiner Systeme haben mehrere IPs und sind in mehreren Netzen. Um welche IP geht es bei Dir? Notfalls ist die IP des aktuellen Systems immer 127.0.0.1 bei mir :D

Auch kann man ja nicht sagen "die IP unter der mich andere kontaktieren", das ist auch oft mehrdeutig, wenn der Rechner in mehreren Netzen steht. Zum Beispiel hat mein Notebook WLAN und Ethernet und dort jeweils eine IP. Man kann diesen unter beiden kontaktieren. Und unsere Server stehen in 3 Subnetzen... die haben 3 IPs (eine davon für Außenanbindung). Aber das kann man auch so nicht ermitteln, weil der nächstgelegene Router entscheidet welche der IPs nach außen verfügbar ist.

Sonst müsste man vielleicht die "defaultrouter"-Einstellung mit in Betracht ziehen, um die Entscheidung zu unterstützen. Das wäre vielleicht immer noch nicht so zuverlässig, aber für die meisten Fälle eher korrekt.
 
Solltest du auch noch ECMP Routing einsetzt ist nicht einmal die Addresse des Nexthops eindeutig für ein gegebenes Präfix.
 
grep awk sed cut
sind bei FreeBSD im Basis-System und hier deshalb gut geeignet, Ausgaben und Texte zu filtern. Mitunter funktionieren sie aber etwas unterschiedlich, als im Vergleich zu anderen Systemen, etwa mit GNU.
Ich denke, dass diese Unterschiede wichtiger sind, als die verwendete shell.

Wie schon oft: ich kenne mich damit nicht aus, aber was ich sehe, scheint doch eher so zu sein, dass es Mechanismen gibt, die in den meisten shells wirken und funktionieren. ich habe mir einiges aus Scripten genommen (oder musste welche bearbeiten), die für eine ncsh gemacht waren oder auch für eine korn-shell oder eine ash und mit wenigen Änderungen (wenn überhaupt) konnte ich das immer benutzen. Scheinbar gibt es jeweils nur bestimmte Dinge, die in einer anderen shell anders funktionieren. Doch so grundsätzlich sind die Unterschiede nicht und wenigsten innerhalb kleiner scripts recht einfach zu ändern.

Als Anwendungsfall könnte ich mir ja vorstellen, dass du in Abhängigkeit zu deiner Umgebung bestimmte Dinge setzen willst und die Umgebung erkennst du dann vielleicht an dem Netzwerk, in dem du gerade bist und vielleicht auch dem Interface, das da benutzt wird?
Wie auch immer: wenn du das dazu erklärst, was du damit willst, besteht die Möglichkeit, weitergehende Ratschläge zu bekommen.
 
Was ist das denn? Ich habe keine Ahnung, wie man davon auf die IP Adresse schließen kann.

Wenn pcu Recht hat:
if="$(route get default | awk '$1 == "interface:" {print $2}')"
ip="$(ifconfig $if | awk '$1 == "inet" {print $2}')"

Da können mehrere IPs bei herauskommen.

Ich weiß nicht, wie das bei inet6 Adressen ist. Steht dann nicht inet6 davor?
 
Klar, ich vermute mal die würde er in einer extra Liste wollen:

ip6="$(ifconfig $if | awk '$1 == "inet6" {print $2}')"
 
Lasst das doch vorher schon ein wenig mehr gefiltert ausgeben:
Code:
# ifconfig wlan0 inet
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        inet 192.168.2.210 netmask 0xffffff00 broadcast 192.168.2.255
Code:
# ifconfig bge0 inet6

bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=8009b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LINKSTATE>
inet6 fe80::651f:204f:3230:da80%bge0 prefixlen 64 scopeid 0x1
 
Zurück
Oben