Mit AWK IP-Adresse auslesen

dux

Dux
Hallo Leute!!
ich bin Neuregistrierter und versuche mich hier gerade zu Recht zu finden. Meine Frage ist: Wie kann man anhand eines AWK-Skripts die IP von meiner WLAN-Karte aus einer ifconfig Ausgabe auslesen? Ich habe versucht die Ausgabe in einer Datei zu speichern (jedes mal in der gleichen). ich bin soweit gekommen, dass ich alle IPs aus allen vorhandenen Interfaces lesen kann. Jetzt ist meine Frage, wie kann ich ausschließlich die IP von der WLAN-Karte lesen? Danke im Voraus.
Code:
#!/usr/bin/awk -f
#Ip von Wlan0 auslesen
BEGIN{
	system("ifconfig >IPDaten")
}

{}

END{
	while(getline<"IPDaten")
	{
		if($1=="inet")
		{
			print substr($2,9,20);
		}
	}
}
 
Hi.

Du kannst dem ifconfig Programm das gewünschte Interface angeben, dann wird nur dieses eine Interface aufgelistet.

Aber eine Datei anzulegen würde ich auf jeden Fall vermeiden.
Code:
BEGIN { 
  while ("ifconfig wlan0" | getline) {
    if (match($0, "(^|[ \t])inet addr:[0-9.]*")) {
      split(substr($0, RSTART, RLENGTH), a, ":");
      print a[2];
    }
  }
}
Nebenbei, warum verwendest du denn AWK und kein Shellskript?
Bash:
ifconfig wlan0 | sed -ne 's/.*\(^\|[ \t]\)inet addr:\([0-9.]*\).*/\2/p'
Gruß
 
Moin deepthroat,

da würde mich mal Dein Meinung interessieren, warum :confused:
Ich lege eine vergleichbare Datei aus einer Java-Applikation heraus an, um damit die MAC-Adresse des PC zu bestimmen - und das klappt sehr gut!
Man kann sich damit mehr Probleme einhandeln als einem lieb ist.

  • Sicherheitsaspekt. Temporäre Dateien sind Angriffsziele für Attacken.
  • Systemeinstellungen. Ist das temporäre Verzeichis überhaupt richtig konfiguriert? Konnte die Datei überhaupt angelegt werden?
  • Parallele Ausführung. Was ist wenn das Programm mehrfach gleichzeitig gestartet wird. Wird in die gleiche Datei geschrieben oder die Datei überschrieben oder schlägt der Zugriff auf die Datei fehl weil sie noch von dem anderen Programm geöffnet ist?

Siehe z.B. http://www.codeproject.com/KB/web-security/TemporaryFileSecurity.aspx auf was man bei temp. Dateien achten sollte.

Tip 1. Avoid temporary files altogether

Gruß
 
Zuletzt bearbeitet:
Man kann sich damit mehr Probleme einhandeln als einem lieb ist.

  • Sicherheitsaspekt. Temporäre Dateien sind Angriffsziele für Attacken.
  • Systemeinstellungen. Ist das temporäre Verzeichis überhaupt richtig konfiguriert? Konnte die Datei überhaupt angelegt werden?
  • Parallele Ausführung. Was ist wenn das Programm mehrfach gleichzeitig gestartet wird. Wird in die gleiche Datei geschrieben oder die Datei überschrieben oder schlägt der Zugriff auf die Datei fehl weil sie noch von dem anderen Programm geöffnet ist?

Moin deepthroat,

ah, ok ... und danke für die schnelle Antwort !

(a) Einverstanden, aus dem Grund wird die Datei aber auch direkt nach dem Auslesen der MAC-Adresse wieder gelöscht ;)
(b) Ok, ich speichere sie allerdings auch nicht im temporären Verzeichnis, sondern in dem Verzeichnis, aus dem die Anwendung heraus
gestartet wird. Würde es nicht existieren, dann hätte ich gar nicht starten können ... :p
Kann ich anschließend die MAC-Adresse nicht auslesen, da die Datei nicht ex., wird der Start abgebrochen!
(c) Unsere Applikation ist so gebaut, dass immer nur eine einzige Programminstanz pro Rechner existieren kann und darf. Alle weiteren
Startversuche werden gnadenlos unterbunden! :)

Es ist ja leider unter Java wegen der Plattform-Unabhängigkeit leider etwas schwierig, an besagte MAC-Adresse auf anderem Weg zu kommen. Da unsere Anwendung ohnehin nur unter WIN-OS betrieben, wäre der alternative Weg wohl nur über das JNI zu gehen ... und der Aufwand dafür ist mir/uns einfach zu groß :p

Gruß
Klaus
 
Zuletzt bearbeitet:
(a) Einverstanden, aus dem Grund wird die Datei aber auch direkt nach dem Auslesen der MAC-Adresse wieder gelöscht ;)
Das spielt keine Rolle. Eine Attacke kann immer zwischendurch evtl. die Datei verändern / austauschen (hängt natürlich von den Zugriffsrechten und Sharing Flags ab - Tip 5). Die Datei sollte einen zufälligen Namen haben (Tip 4).
(b) Ok, ich speichere sie allerdings auch nicht im temporären Verzeichnis, sondern in dem Verzeichnis, aus dem die Anwendung heraus
gestartet wird. Würde es nicht existieren, dann hätte ich gar nicht starten können ... :p
Ob es existiert ist eine Frage. Die andere ob man die Rechte hat in das Verzeichnis zu schreiben (was für das Applikationsverzeichnis evtl. etwas unüblich ist). Und mit temporärem Verzeichnis meine ich einfach das Verzeichnis in dem die temporäre Datei gespeichert wird. (ob da jetzt %TEMP% benutzt wird oder nicht).
Es ist ja leider unter Java wegen der Plattform-Unabhängigkeit leider etwas schwierig, an besagte MAC-Adresse auf anderem Weg zu kommen. Da unsere Anwendung ohnehin nur unter WIN-OS betrieben, wäre der alternative Weg wohl nur über das JNI zu gehen ... und der Aufwand dafür ist mir/uns einfach zu groß :p
Du könntest stattdessen JNA verwenden.

Und warum liest du nicht einfach die Standardausgabe von ipconfig (welches du doch sicherlich aufrufst, oder?)? Du vermeidest jede Menge Probleme und hättest Code (und Zeit und Geld) gespart.

Gruß
 
Hi.

Du kannst dem ifconfig Programm das gewünschte Interface angeben, dann wird nur dieses eine Interface aufgelistet.

Aber eine Datei anzulegen würde ich auf jeden Fall vermeiden.
Code:
BEGIN { 
  while ("ifconfig wlan0" | getline) {
    if (match($0, "(^|[ \t])inet addr:[0-9.]*")) {
      split(substr($0, RSTART, RLENGTH), a, ":");
      print a[2];
    }
  }
}
Nebenbei, warum verwendest du denn AWK und kein Shellskript?
Bash:
ifconfig wlan0 | sed -ne 's/.*\(^\|[ \t]\)inet addr:\([0-9.]*\).*/\2/p'
Gruß
Danke erstmal für die schnell Antwort. In der Aufgabestellung steht, dass man nur Awk benutzen darf dazu darf man keinen Interface Explizit auswählen, also nur aus ifconfig . Wie gesagt ich habe es soweit geschafft alle IPs zu lesen nur die Filterung klappt irgendwie nicht bei mir. Gruß
 
Danke erstmal für die schnell Antwort. In der Aufgabestellung steht, dass man nur Awk benutzen darf dazu darf man keinen Interface Explizit auswählen, also nur aus ifconfig . Wie gesagt ich habe es soweit geschafft alle IPs zu lesen nur die Filterung klappt irgendwie nicht bei mir. Gruß
Welches AWK verwendest du? Werden multiline Records unterstützt? Dann mußt du nur überprüfen ob $1 == wlan0 ist.

Gruß
 
Welches AWK verwendest du? Werden multiline Records unterstützt? Dann mußt du nur überprüfen ob $1 == wlan0 ist.

Gruß
Hi, leider verstehe ich nicht was du mit "multiline Records " meinst (mein OS ist UBUNTU 9.10). und wie soll ich das Code ändern das es klappt (sorry ich bin noch Newbie)
Code:
#!/usr/bin/awk -f
#Ip von Wlan0 auslesen
BEGIN{
	system("ifconfig >IPDaten")
}

{}

END{
	while(getline<"IPDaten")
	{
		if($1=="inet")
		{
			print substr($2,9,20);
		}
	}
}
Besten Dank.
 
Zurück