[gelöst] ipv6 aus Dateien

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Huck Fin
Beiträge: 1202
Registriert: 10.03.2008 17:10:30

[gelöst] ipv6 aus Dateien

Beitrag von Huck Fin » 06.12.2023 21:30:55

Moin,
ich suche in Dateien (Mails) nach ipv4 Adressen.
Funktioniert auch gut.
Beispiel

Code: Alles auswählen

grep 'Received: from' $dir2/* |grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" |uniq
Jetzt hätte ich das auch gerne für ipv6 Adressen und bekomme es nicht hin.
Kann mir jemand helfen ?
Zuletzt geändert von Huck Fin am 09.12.2023 12:48:16, insgesamt 1-mal geändert.

reox
Beiträge: 2475
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: ipv6 aus Dateien

Beitrag von reox » 07.12.2023 10:00:52

Dachte erst das kann nicht so schwer sein, aber tatsächlich gibt es gefühlt 1000 Formate wie die Adresse in dem Header drin steht...
meistens sind die Adressen in eckigen Klammern, mache haben aber stattdessen () oder ??...
Manche Server schreiben offenbar IPv6: vor v6 Adressen, andere nicht.
Adressen wie ::1 sind schwer zu matchen...
Der Received: from kann glaube ich sogar über mehrere Zeilen gehen.

Ich bin mir daher nicht sicher, ob man da mit einer Regex weiter kommt. Evt macht es mehr Sinn das in einem Script abzuhandeln und die verschiedenen Formate zu parsen.

Benutzeravatar
MSfree
Beiträge: 10863
Registriert: 25.09.2007 19:59:30

Re: ipv6 aus Dateien

Beitrag von MSfree » 07.12.2023 10:07:18


Benutzeravatar
cosinus
Beiträge: 3497
Registriert: 08.02.2016 13:44:11
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Bremen

Re: ipv6 aus Dateien

Beitrag von cosinus » 07.12.2023 14:19:48

Huck Fin hat geschrieben: ↑ zum Beitrag ↑
06.12.2023 21:30:55
Jetzt hätte ich das auch gerne für ipv6 Adressen und bekomme es nicht hin.
Probier mal

Code: Alles auswählen

grep Received | grep -iEo '([0-9a-f]{1,4}:{1,2}){1,8}[0-9a-f]{1,4}'
Aber '::1' wird wirklich schwierig...

Benutzeravatar
Huck Fin
Beiträge: 1202
Registriert: 10.03.2008 17:10:30

Re: ipv6 aus Dateien

Beitrag von Huck Fin » 07.12.2023 14:24:10

Fast gut.
Kann man irgendwie nur Ergebnisse mit mindestens 4 mal Doppelpunkt ausgeben ?

Benutzeravatar
cosinus
Beiträge: 3497
Registriert: 08.02.2016 13:44:11
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Bremen

Re: ipv6 aus Dateien

Beitrag von cosinus » 07.12.2023 14:35:40

Meinst du so?

Code: Alles auswählen

grep -iEo '([0-9a-f]{1,4}:{1,2}){4,8}[0-9a-f]{1,4}'

oder das hier:

Code: Alles auswählen

grep -iEo '([0-9a-f]{1,4}:{1,2}){4}[0-9a-f]{1,4}'
könnte auch klappen.

Benutzeravatar
Huck Fin
Beiträge: 1202
Registriert: 10.03.2008 17:10:30

Re: ipv6 aus Dateien

Beitrag von Huck Fin » 07.12.2023 14:43:35

Sehr gut.
Einziges Problem noch ist, dass er ipv6:
eine ip dann mit 6: anfängt (er entfernt das ipv).
Aber dass kann ich verschmerzen.
Danke :hail:

reox
Beiträge: 2475
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: ipv6 aus Dateien

Beitrag von reox » 07.12.2023 15:03:45

Du kannst ja das "IPv6:" davon als optional matchen.

Die Regex matched halt auch nur längere Adressen. Sowas wie 2a01:23::1 findet der nicht. Sowas kommt vllt selten vor, aber ::ffff:[...] hab ich durchaus gesehen.

Benutzeravatar
cosinus
Beiträge: 3497
Registriert: 08.02.2016 13:44:11
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Bremen

Re: ipv6 aus Dateien

Beitrag von cosinus » 07.12.2023 15:09:17

reox hat geschrieben: ↑ zum Beitrag ↑
07.12.2023 15:03:45
Sowas wie 2a01:23::1 findet der nicht.
Dann müsste man die Quantoren etwas anpassen :)

Benutzeravatar
Livingston
Beiträge: 1518
Registriert: 04.02.2007 22:52:25
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.0.0.1

Re: ipv6 aus Dateien

Beitrag von Livingston » 08.12.2023 21:46:21

Code: Alles auswählen

grep "^Received: from" | sed 's/[Ii][Pp][Vv]6://g' | grep -Eo '[0-9a-fA-F]{0,4}(:[0-9a-fA-F]{0,4}){2,7}' | grep -Ev '\b[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}\b' | grep -Ev ':::'
  • Killt das störende "IPv6:"
  • Matcht nach 0- bis 4-stelliger Hex-Zahl
  • Matcht nach 2- bis 7-maligem Vorkommen von ":xxxx" (xxxx darf leer sein)
  • Sortiert Uhrzeiten aus
  • Sortiert unzulässige Kombinationen von 3 oder mehr Doppelpunkten aus
Damit ist der Fall erledigt, dass ein Zahlenblock am Anfang oder am Ende nicht erfasst wird. Außerdem müssen insgesamt mindestens 2 Doppelpunkte vorhanden sein. Sollte reichen, um eine IPv6-Adresse zu charakterisieren.

Hier lässt sich noch nacharbeiten:
Doppel-Doppelpunkte dürfen nur 1x vorkommen.
Wenn es mehr als 8 Blöcke sind, ist auch was faul.
Zu kurze Angaben wie 1234:5678:9abc müssten auch noch verboten werden.

KORRIGIERT:
Wortgrenzen aus erstem grep entfernt.
Der Hauptunterschied zwischen etwas, was möglicherweise kaputtgehen könnte und etwas, was unmöglich kaputtgehen kann, besteht darin, dass sich bei allem, was unmöglich kaputtgehen kann, falls es doch kaputtgeht, normalerweise herausstellt, dass es unmöglich zerlegt oder repariert werden kann.
Douglas Adams

Benutzeravatar
Huck Fin
Beiträge: 1202
Registriert: 10.03.2008 17:10:30

Re: [gelöst] ipv6 aus Dateien

Beitrag von Huck Fin » 09.12.2023 12:48:37

Danke.
Funzt wunderbar... :THX:

Benutzeravatar
cosinus
Beiträge: 3497
Registriert: 08.02.2016 13:44:11
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Bremen

Re: ipv6 aus Dateien

Beitrag von cosinus » 09.12.2023 14:24:19

Livingston hat geschrieben: ↑ zum Beitrag ↑
08.12.2023 21:46:21

Code: Alles auswählen

grep "^Received: from" | sed 's/[Ii][Pp][Vv]6://g' | grep -Eo '[0-9a-fA-F]{0,4}(:[0-9a-fA-F]{0,4}){2,7}' | grep -Ev '\b[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}\b' | grep -Ev ':::'
  • Killt das störende "IPv6:"
  • Matcht nach 0- bis 4-stelliger Hex-Zahl
  • Matcht nach 2- bis 7-maligem Vorkommen von ":xxxx" (xxxx darf leer sein)
  • Sortiert Uhrzeiten aus
  • Sortiert unzulässige Kombinationen von 3 oder mehr Doppelpunkten aus
Exzellent, Mr Livingston! :THX: :D

Benutzeravatar
Huck Fin
Beiträge: 1202
Registriert: 10.03.2008 17:10:30

Re: [gelöst] ipv6 aus Dateien

Beitrag von Huck Fin » 09.12.2023 14:31:45

K. A. ob es interessier...
Hintergrund ist, dass jemand von Fail2ban ständig gesperrt wird.
Schuld ist die IOS Nextcloud App.
Der Server mit der Nextcloud steht im Office.
Jetzt kann die Person eine Mail an eine bestimmte Mailadresse senden (whitelist@) und in der Mail ist automatisch die öffentliche IP vom Sendenden PC.
Das Script sammelt die IPs aus den Mails und setzt diese dann in den ignoreip von Fail2ban
Ausserdem lösche ich alle Mails älter 5 Tage.
Zuletzt geändert von Huck Fin am 09.12.2023 14:45:03, insgesamt 2-mal geändert.

Benutzeravatar
Livingston
Beiträge: 1518
Registriert: 04.02.2007 22:52:25
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.0.0.1

Re: ipv6 aus Dateien

Beitrag von Livingston » 09.12.2023 14:33:18

cosinus hat geschrieben: ↑ zum Beitrag ↑
09.12.2023 14:24:19
Exzellent, Mr Livingston! :THX: :D
Wenn schon, dann bitte Sir Livingston!
Der Hauptunterschied zwischen etwas, was möglicherweise kaputtgehen könnte und etwas, was unmöglich kaputtgehen kann, besteht darin, dass sich bei allem, was unmöglich kaputtgehen kann, falls es doch kaputtgeht, normalerweise herausstellt, dass es unmöglich zerlegt oder repariert werden kann.
Douglas Adams

Benutzeravatar
cosinus
Beiträge: 3497
Registriert: 08.02.2016 13:44:11
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Bremen

Re: ipv6 aus Dateien

Beitrag von cosinus » 09.12.2023 14:45:51

Livingston hat geschrieben: ↑ zum Beitrag ↑
09.12.2023 14:33:18
cosinus hat geschrieben: ↑ zum Beitrag ↑
09.12.2023 14:24:19
Exzellent, Mr Livingston! :THX: :D
Wenn schon, dann bitte Sir Livingston!
Jawohl Sir :mrgreen:

Benutzeravatar
Livingston
Beiträge: 1518
Registriert: 04.02.2007 22:52:25
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.0.0.1

Re: [gelöst] ipv6 aus Dateien

Beitrag von Livingston » 10.12.2023 00:34:30

Kleiner Nachschlag:
Beim ersten grep-Matching habe ich die Wortgrenzen '\b...\b' rausgenommen, da ich statt des anfänglichen grep "^Received: from" zum Testen einfach ipv6-Adressen mit echo in die Pipe gepustet habe. Mit echo ::1 kam dann aber mit '\b...\b' nix raus. Bin mir nicht sicher, warum. Liegt vielleicht daran, dass vor dem Ausdruck keine Wortgrenze liegt. :?:
Fällt da noch wem eine elegante Lösung ein?

Irgendwie ist das megakomplex. Ich glaube mit Python und der Lib ipaddress.py geht das alles viel kürzer und knapper. ---> https://docs.python.org/3/library/ipaddress.html
Der Hauptunterschied zwischen etwas, was möglicherweise kaputtgehen könnte und etwas, was unmöglich kaputtgehen kann, besteht darin, dass sich bei allem, was unmöglich kaputtgehen kann, falls es doch kaputtgeht, normalerweise herausstellt, dass es unmöglich zerlegt oder repariert werden kann.
Douglas Adams

Benutzeravatar
cosinus
Beiträge: 3497
Registriert: 08.02.2016 13:44:11
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Bremen

Re: [gelöst] ipv6 aus Dateien

Beitrag von cosinus » 10.12.2023 00:56:24

Livingston hat geschrieben: ↑ zum Beitrag ↑
10.12.2023 00:34:30
Irgendwie ist das megakomplex.
Hat die KI keine Lösung dafür? ChatGPT? Oder DeppGPT? :mrgreen:

Benutzeravatar
Livingston
Beiträge: 1518
Registriert: 04.02.2007 22:52:25
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.0.0.1

Re: [gelöst] ipv6 aus Dateien

Beitrag von Livingston » 10.12.2023 01:36:07

Immerhin besteht die vage Hoffnung, dass das DF den Turingtest besteht. Bei Deppenchat ist das nicht so klar:
https://www.heise.de/news/Turing-Test-S ... 46845.html
Da frag ich doch lieber mal hier.
Der Hauptunterschied zwischen etwas, was möglicherweise kaputtgehen könnte und etwas, was unmöglich kaputtgehen kann, besteht darin, dass sich bei allem, was unmöglich kaputtgehen kann, falls es doch kaputtgeht, normalerweise herausstellt, dass es unmöglich zerlegt oder repariert werden kann.
Douglas Adams

tobo
Beiträge: 2042
Registriert: 10.12.2008 10:51:41

Re: [gelöst] ipv6 aus Dateien

Beitrag von tobo » 10.12.2023 02:35:05

Livingston hat geschrieben: ↑ zum Beitrag ↑
10.12.2023 00:34:30
Kleiner Nachschlag:
Beim ersten grep-Matching habe ich die Wortgrenzen '\b...\b' rausgenommen, da ich statt des anfänglichen grep "^Received: from" zum Testen einfach ipv6-Adressen mit echo in die Pipe gepustet habe. Mit echo ::1 kam dann aber mit '\b...\b' nix raus. Bin mir nicht sicher, warum. Liegt vielleicht daran, dass vor dem Ausdruck keine Wortgrenze liegt. :?:
So ein Wort besteht ja aus "\b\w+\b", also "Wortgrenze Wortzeichen+ Wortgrenze". Das funktioniert auch mit Wortanfang und Wortende (\<, \>), aber ein Wortzeichen muss halt schon dabei sein. Willst du "::1" finden (auch am Zeichenkettenanfang), dann könntest du vielleicht sowas wie grep -Po "(^|\W)\K[0-9a-fA-F]{0,4}..." benutzen, mit \W=[^0-9a-zA-Z] als Nichtwortzeichen und \K (PCRE), was die Übereinstimmung davor verwirft. Oder auf die IPv6-Thematik ausgedehnt vielleicht sowas: grep -Po "(^|\W|[iI][pP][vV]6)\K[0-9a-fA-F]{0,4}...".

Benutzeravatar
Livingston
Beiträge: 1518
Registriert: 04.02.2007 22:52:25
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.0.0.1

Re: [gelöst] ipv6 aus Dateien

Beitrag von Livingston » 10.12.2023 14:22:14

Danke, tobo, das ist ein Sprung nach vorne. Ich habe aber leider noch weitere Macken entdeckt. Der Uhrzeit-Filter ist dabei noch das Harmloseste. Statt Wortgrenzen kann man hier "^...$" setzen, weil an dieser Stelle der Pipe ohnehin nur ein einziger, geschlossener String auftaucht.
Überlange Nummern sind jedoch ein Problem, auch Strings mit mehr als 8 Hexfeldern: Sie werden einfach abgeschnitten.

Für Huck Fin's Hausgebrauch reicht das alles, aber der kleine Perfektionist in mir hat jetzt Blut gerochen. Wenn ich fertig bin, mache ich 'nen neuen Thread auf.
Der Hauptunterschied zwischen etwas, was möglicherweise kaputtgehen könnte und etwas, was unmöglich kaputtgehen kann, besteht darin, dass sich bei allem, was unmöglich kaputtgehen kann, falls es doch kaputtgeht, normalerweise herausstellt, dass es unmöglich zerlegt oder repariert werden kann.
Douglas Adams

Benutzeravatar
cosinus
Beiträge: 3497
Registriert: 08.02.2016 13:44:11
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Bremen

Re: [gelöst] ipv6 aus Dateien

Beitrag von cosinus » 10.12.2023 14:23:50

Könntest du nicht auch die Großbuchstaben A-F wegrationalisieren, wenn du grep mit -i aufrufst?

Benutzeravatar
Livingston
Beiträge: 1518
Registriert: 04.02.2007 22:52:25
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.0.0.1

Re: [gelöst] ipv6 aus Dateien

Beitrag von Livingston » 10.12.2023 14:26:23

cosinus hat geschrieben: ↑ zum Beitrag ↑
10.12.2023 14:23:50
Könntest du nicht auch die Großbuchstaben A-F wegrationalisieren, wenn du grep mit -i aufrufst?
Jep, oder gleich [[:alnum:]] verwenden
Der Hauptunterschied zwischen etwas, was möglicherweise kaputtgehen könnte und etwas, was unmöglich kaputtgehen kann, besteht darin, dass sich bei allem, was unmöglich kaputtgehen kann, falls es doch kaputtgeht, normalerweise herausstellt, dass es unmöglich zerlegt oder repariert werden kann.
Douglas Adams

Antworten