-copycat-
Goto Top

IP mittels expr überprüfen

Tagchen

Ich möchte überprüfen, ob eine angegebene IP (Parameter von PHP-Seite) der normalen Form einer IP entspricht.

Bisher versuchte ich folgendes:

# IP=192.168.2.1
# IPT=`expr $IP : '\(*\.*\.*\.*\)'` 
# echo $IPT

# 

oder in der Form:

# IP=192.168.2.1
# IPT=`expr $IP : '\([*]\.[*]\.[*]\.[*]\)'` 
# echo $IPT

# 

Funktioniert jedoch wie ihr seht beides nicht, kann mir da jemand helfen?

Gruss CopyCat

Content-Key: 110098

Url: https://administrator.de/contentid/110098

Printed on: April 25, 2024 at 13:04 o'clock

Member: -CopyCat-
-CopyCat- Feb 26, 2009 at 16:24:27 (UTC)
Goto Top
Und wieder finde ich die Lösung kurz nachdem ich einen Post geschrieben habe :P

# IP=192.168.2.1
# IPT=`expr $IP : '\(.*\..*\..*\..*\)'` 
# echo $IPT
192.168.2.1
#

Sieht komisch aus, is aber so ^^

Gruss CopyCat
Member: theton
theton Feb 27, 2009 at 00:35:02 (UTC)
Goto Top
Deine IP könnte also auch foobar.foobar.foobar.foobar sein und er würde sie als richtig erkennen. Ich würde das '.*' (also beliebig viele beliebige Zeichen) eher durch ein '\d{1,3}' (Zahl mit 1-3 Stellen) ersetzen.
Member: -CopyCat-
-CopyCat- Mar 03, 2009 at 12:29:58 (UTC)
Goto Top
Ach das ist nicht das Problem, der Code hier war nur ein kleiner Teil.
In meinem Script wird die IP anschliessend noch mit awk aufgeteilt und jede einzelne Zahl überprüft (ob zwischen 0 und 255, Netz- und BC-Addressen dürfen nicht akzeptiert werden), deshalb muss ich hier nur überprüfen, ob das Format "irgendwas.irgendwas.irgendwas.irgendwas" eingehalten wird.
Da bei awk der Punkt als Delimiter gesetzt ist, wurde bei einer Angabe ohne Punkt (z.B. "TestIP") die Prüfung trotzdem erfolgreich durchgegangen (ka wieso) und beim Abfüllen der endgültigen Variabel IP entstant dann sowas: "TestIP...".
Hoffe das war einigermassen verständlich^^.

Gruss CopyCat

PS: Natürlich könnte ich das mit \d{1,3} trotzdem anwenden, würde aber keine Auswirkung aufs Endergebnis haben, zudem ist das Eingabefeld im WebGUI auf 15 Zeichen beschränkt.