Anzeige:
Ergebnis 1 bis 13 von 13

Thema: Wie IPs aus einer Text-Datei extrahieren?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Registrierter Benutzer
    Registriert seit
    02.09.2006
    Beiträge
    120

    Question Wie IPs aus einer Text-Datei extrahieren?

    Ich benötige IPV4-Adressen aus Text-Dateien extrehieret.
    Wie bekommt man das möglichst einfach hin, aus einem Bash-Skript?

    Dazu brauche ich auch einen Vergleich von IPV4-Adressen, wobei unterschieden werden
    soll zwischen Gleichheit, Ähnlichkeit (nur das letzte Byte ist unterschiedlich) und sonst (d. h.
    Verschiedenheit).
    Wie bekommt man das hin?

  2. #2
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    zum Extrahieren nimmst Du z. B. grep (die Option -o gibt nur die Matches aus), dann sortierst Du; das Vergleichen ist etwas diffus beschrieben. Wie soll denn die Ausgabe aussehen? Passend für solche Geschichten ist z. B. der awk, kann aber auch in einer reinen Shell-Schleife gemacht werden.

    Schreib mal, was Du schon hast, dann kann man auch konkreter helfen.

    Jan

    P.S.: Eine regex für IPs sollte berücksichtigen, dass in den Einzelziffern nur 0..255 auftreten kann. Das lässt sich am besten über mehrere regex abbilden, die man dann in eine Datei schreibt und dem grep vorwirft (Option -f).

  3. #3
    Registrierter Benutzer
    Registriert seit
    02.09.2006
    Beiträge
    120
    Hm, ich nehme am Besten wohl ein

    | awk '{ print $5}'

    weil das für die Ausgabe von dig reicht.
    Ich habe auch den Ausdruck

    \b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

    gefunden, aber awk erscheint mir sinnvoller.

  4. #4
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    Zitat Zitat von Linus Beitrag anzeigen
    Hm, ich nehme am Besten wohl ein

    | awk '{ print $5}'

    weil das für die Ausgabe von dig reicht.
    Warum beschreibst Du Dein Problem nicht gleich genauer? Hätte ich gewusst, dass Du die dig-Ausgabe filtern willst, dann hätte ich Dir auch einen anderen Weg vorgeschlagen.

    Wenn Du den o. g. awk auf einen dig ohne Optionen anwendest, dann reicht die Ausgabe von $5 aber nicht - Du musst dann schon vorher noch die Zeile nach ";; ANSWER SECTION:" ausfiltern.

    Mein Tipp für diesen speziellen Fall lautet: Du brauchst gar kein Feld zu extrahieren:
    Code:
    dig +short host.domain.tld
    192.168.1.2
    Jan

  5. #5
    Registrierter Benutzer
    Registriert seit
    02.09.2006
    Beiträge
    120
    Ja, stimmt, aber nur im Prinzip: Zu einigen Domains kommt statt einer IP die Fehlermeldung

    ;; connection timed out; no servers could be reached

    und zu anderen erhalte ich statt einer IP andere Domains wie youtube.l.google.com, wohl weil die als CNAME ausgegeben werden.

  6. #6
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    dann würde ich aber die dig-Ausgabe am besten innerhalb eines einzigen awk auswerten und nicht in einer Textdatei zwischenparken.

    Jan

  7. #7
    Registrierter Benutzer
    Registriert seit
    02.09.2006
    Beiträge
    120
    Zitat Zitat von jan61 Beitrag anzeigen
    Moin,

    dann würde ich aber die dig-Ausgabe am besten innerhalb eines einzigen awk auswerten und nicht in einer Textdatei zwischenparken.

    Jan
    Das reicht nicht: Die IPs kann ich direkt vergleichen, aber wenn der Vergleich fehlschlägt, z. B. wgen Round Robin IPs, dann will ich die canonical names vergleichen.
    Außerdem werden zu Domains wie google mehrere IPs ausgegeben; die müssen erstmal mittels sort sortiert werden.

  8. #8
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    Zitat Zitat von Linus Beitrag anzeigen
    Das reicht nicht: Die IPs kann ich direkt vergleichen, aber wenn der Vergleich fehlschlägt, z. B. wgen Round Robin IPs, dann will ich die canonical names vergleichen.
    Außerdem werden zu Domains wie google mehrere IPs ausgegeben; die müssen erstmal mittels sort sortiert werden.
    ja und? Hast Du mal im awk-Manual gestöbert, was der alles kann? Du kannst Dir assoziative Arrays aufbauen (Hashes), hast Sortierfunktionen, hast einen END-Block, in dem Du nach dem Einlesen der Daten die erzeugten assoziativen Arrays bearbeiten kannst, hast diverse Möglichkeiten zum Erkennen und Manipulieren von Strings mittels regulärer Ausdrücke ...

    Du wirfst uns immer wieder nur Informationsbröckchen hin von dem, was Du eigentlich machen willst. So macht das Helfen keinen Spaß! Und eine saubere + effiziente Lösung wird für Dich dabei auch nicht rausspringen.

    Wenn Du schreiben würdest: "Ich will eine Liste von Servernamen in IP-Adressen auflösen und vergleichen und benutze dazu dig, die Ausgabe sieht so aus, folgende Spezialfälle will ich bearbeiten können (Beispielausgaben des dig), ich habe mir das wie folgt vorgestellt (geplanter Ablauf, bisher vorhandener Code), komme aber da und da nicht weiter", dann könnten wir uns gleich vorstellen, was Du willst. Sowas macht natürlich mehr Arbeit bei der Problembeschreibung, aber wir machen uns ja auch die Mühe, Lösungen für Dein Problem zu suchen und ggf. auch mal zu testen.

    Jan
    Geändert von jan61 (17-05-2009 um 22:27 Uhr)

  9. #9
    Registrierter Benutzer
    Registriert seit
    02.09.2006
    Beiträge
    120
    Achso, dann kann AWK mehr als ich dachte
    Also hier ist die Liste der Ausgaben von dig +short, die ich gesehen habe:

    Meistens wird eine IP wie
    134.60.1.111.
    ausgegeben.

    Zu großen Domains wie google.com werden mehrere IPs ausgegeben
    (eine je Zeile).

    Manchmal wird nichts (leere Ausgabe) ausgegeben, zu nicht (mehr)
    existenden Domains.

    Manchmal ausgegeben wird ein canonical Name und (mind.) eine IP,
    z. B.
    ftp.pochta.ru.
    82.204.219.221

    Sehr selten ausgegeben wird (bei einem Timeout von 20 s)
    ;; connection timed out; no servers could be reached

    Was mir noch fehlt ist der Vergleich der Canonical Names sowie festzustellen, zu welchen Domains die DNS-Server per default auflösen, denn mir ist aufgefallen, das einige DNS-Server zu einigen Domains nichts ausgeben während andere zu google führende IPs ausgeben.
    Der Vergleich der Canonical Names müsste mit dem AWK gehen, aber wie?

    Der Vergleich mit AWK ist aber nicht wichtig, denn das bekomme ich auch mit egrep und diff hin
    Geändert von Linus (18-05-2009 um 00:10 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •