tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von deepthroat
ERLEDIGT
NEIN
ANTWORTEN
14
ZUGRIFFE
1099
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    dux dux ist offline Dux
    Registriert seit
    Mar 2010
    Beiträge
    8
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    #!/usr/bin/awk -f
    #Ip von Wlan0 auslesen
    BEGIN{
        system("ifconfig >IPDaten")
    }
     
    {}
     
    END{
        while(getline<"IPDaten")
        {
            if($1=="inet")
            {
                print substr($2,9,20);
            }
        }
    }
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    
    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?
    Code bash:
    1
    
    ifconfig wlan0 | sed -ne 's/.*\(^\|[ \t]\)inet addr:\([0-9.]*\).*/\2/p'
    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Zitat Zitat von deepthroat Beitrag anzeigen
    Aber eine Datei anzulegen würde ich auf jeden Fall vermeiden.
    Moin deepthroat,

    da würde mich mal Dein Meinung interessieren, warum
    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!

    Danke und Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Zitat Zitat von vfl_freak Beitrag anzeigen
    Moin deepthroat,

    da würde mich mal Dein Meinung interessieren, warum
    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-se...eSecurity.aspx auf was man bei temp. Dateien achten sollte.

    Tip 1. Avoid temporary files altogether
    Gruß
    Geändert von deepthroat (25.03.10 um 09:01 Uhr)
    vfl_freak bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Zitat Zitat von deepthroat Beitrag anzeigen
    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 ...
    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ß

    Gruß
    Klaus
    Geändert von vfl_freak (25.03.10 um 09:18 Uhr) Grund: letzter Satz zu (b)
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  6. #6
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Zitat Zitat von vfl_freak Beitrag anzeigen
    (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).
    Zitat Zitat von vfl_freak Beitrag anzeigen
    (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 ...
    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).
    Zitat Zitat von vfl_freak Beitrag anzeigen
    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ß
    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ß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  7. #7
    dux dux ist offline Dux
    Registriert seit
    Mar 2010
    Beiträge
    8
    Zitat Zitat von deepthroat Beitrag anzeigen
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    
    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?
    Code bash:
    1
    
    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ß
     
    Geliebt wirst Du einzig dort, wo schwach Du Dich zeigen kannst, ohne Stärke zu provozieren

  8. #8
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Zitat Zitat von dux Beitrag anzeigen
    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ß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  9. #9
    dux dux ist offline Dux
    Registriert seit
    Mar 2010
    Beiträge
    8
    Zitat Zitat von deepthroat Beitrag anzeigen
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    #!/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.
     
    Geliebt wirst Du einzig dort, wo schwach Du Dich zeigen kannst, ohne Stärke zu provozieren

  10. #10
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Zitat Zitat von dux Beitrag anzeigen
    Hi, leider verstehe ich nicht was du mit "multiline Records " meinst
    Und auf die Idee zu suchen bist du nicht gekommen weil... ? http://www.google.de/search?q=awk+mu...&oe=utf-8&aq=t
    Zitat Zitat von dux Beitrag anzeigen
    (mein OS ist UBUNTU 9.10)
    Dann hast du vermutlich mawk oder GNU awk welche beide multiline Records unterstützen.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  11. #11
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Zitat Zitat von deepthroat Beitrag anzeigen
    Die Datei sollte einen zufälligen Namen haben (Tip 4).
    Ok, das ist zu überlegen - Danke für die Idee!

    Zitat Zitat von deepthroat Beitrag anzeigen
    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)
    Wie gesagt, wenn es NICHT ex., kann ich die Applikation gar nicht erst starten .....

    Zitat Zitat von deepthroat Beitrag anzeigen
    Du könntest stattdessen JNA verwenden.
    Ah, dass muss ich mir mal näher anschauen

    Zitat Zitat von deepthroat Beitrag anzeigen
    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.
    Weil ich nicht wüsste, wie ich das von Java aus bewerkstelligen sollte ....
    Die einzige Chance ist wohl nur
    Code java:
    1
    
    Runtime.getRuntime().exec( "cmd /c ipconfig /all >  c:\\...\\ipconfig.txt" );
    zur Erzeugung einer Textdatei, die anschließend ausgelesen und nach der Mac-Adresse geparst werden kann

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  12. #12
    dux dux ist offline Dux
    Registriert seit
    Mar 2010
    Beiträge
    8
    Zitat Zitat von deepthroat Beitrag anzeigen
    Und auf die Idee zu suchen bist du nicht gekommen weil... ? http://www.google.de/search?q=awk+mu...&oe=utf-8&aq=t

    Dann hast du vermutlich mawk oder GNU awk welche beide multiline Records unterstützen.

    Gruß
    ich habe zwar Prinzip verstanden leider klappt es bei mir nicht!! so sieht jetzt aus
    Code :
    1
    2
    3
    4
    5
    6
    
    ...
    if($1=="wlan0")
            {
                print substr($2,9,20);
            }
    .....
    was mache ich nun falsch?
     
    Geliebt wirst Du einzig dort, wo schwach Du Dich zeigen kannst, ohne Stärke zu provozieren

  13. #13
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Zitat Zitat von vfl_freak Beitrag anzeigen
    Weil ich nicht wüsste, wie ich das von Java aus bewerkstelligen sollte ....
    Die einzige Chance ist wohl nur
    Code java:
    1
    
    Runtime.getRuntime().exec( "cmd /c ipconfig /all >  c:\\...\\ipconfig.txt" );
    zur Erzeugung einer Textdatei, die anschließend ausgelesen und nach der Mac-Adresse geparst werden kann
    Im einfachsten Fall:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    ProcessBuilder pb = new ProcessBuilder( "ipconfig", "/all");
    pb.redirectErrorStream( true );
    Process p = pb.start();
     
    p.getOutputStream().close(); // close Process' stdin
    BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream());
     
    String line;
    while (line = r.readLine()) {
      System.out.println(line);
    }
    Gruß

    Zitat Zitat von dux Beitrag anzeigen
    ich habe zwar Prinzip verstanden leider klappt es bei mir nicht!! so sieht jetzt aus
    Code :
    1
    2
    3
    4
    5
    6
    
    ...
    if($1=="wlan0")
            {
                print substr($2,9,20);
            }
    .....
    was mache ich nun falsch?
    Wie kommst du auf $2, 9, 20 ?

    Wie ist die Ausgabe?

    Wie hast du RS gesetzt?

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  14. #14
    dux dux ist offline Dux
    Registriert seit
    Mar 2010
    Beiträge
    8
    Wie kommst du auf $2, 9, 20 ?
    Bsp : Zeile 1 hat $1
    Zeile 2 hat $2
    ..etc
    Wie ist die Ausgabe?
    ich bekomme nicht zu sehen
    Wie hast du RS gesetzt?
    RS?
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    #!/usr/bin/awk -f 
     
    BEGIN{
        system("ifconfig >ifconfig")
    }
     
    {
     
    }
     
    END{
        while(getline<"ifconfig")
        {   
            if($1=="wlan0")
            {
                print substr($2,9,20);
            }
     
        }
    }
    Gruß
     
    Geliebt wirst Du einzig dort, wo schwach Du Dich zeigen kannst, ohne Stärke zu provozieren

  15. #15
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Zitat Zitat von dux Beitrag anzeigen
    RS?
    Ich dachte du hast das Multiline Record Konzept verstanden? Und das du dafür RS setzen mußt? Lies dir das (http://www.gnu.org/manual/gawk/html_...iple-Line.html) nochmal durch.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

Ähnliche Themen

  1. IP-MAC Adresse auslesen
    Von abdelkarim im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 11.11.08, 16:29
  2. IP Adresse auslesen
    Von X-STUFF im Forum .NET Web und Kommunikation
    Antworten: 8
    Letzter Beitrag: 23.07.08, 11:13
  3. DNS Adresse auslesen
    Von Hiu im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 22.09.05, 19:14
  4. DNS Adresse auslesen
    Von Hiu im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 09.09.05, 11:33
  5. IP Adresse auslesen
    Von Mr.E im Forum Javascript & Ajax
    Antworten: 5
    Letzter Beitrag: 07.09.01, 14:57