Zahl mit 0 auffüllen? 127.0.0.1 -> 127.000.000

Hallo,

Ich möchte IP-Adressen aus einem Logfile auslesen und so neu formatieren, daß alle 4 Oktetts (so heißt das, glaube ich?) 3stellig sind.

Also aus 127.0.0.1 soll 127.000.000.001 werden.

Zuerst trenne ich nach den Punkten:

$octlog = preg_split("/./",$log[0]);

Und dann?

Natürlich könnte ich was basteln, aber ich benötige eine sehr performante Lösung, da das Logfile über 100 MB groß ist. Gibt es eine praktische Funktion dafür?

Vielen Dank schonmal, Paul

Ich möchte IP-Adressen aus einem Logfile auslesen und so neu
formatieren, daß alle 4 Oktetts (so heißt das, glaube ich?)
3stellig sind.

Klar, dass dir mein Beitrag nicht weiterhelfen kann (bevor jetzt gleich wieder wütende Schreie kommen), aber mich würde einfach mal interessieren warum in Gottes Namen du die IP Adressen derartig umändern willst - wozu braucht man denn sowas?

Gruss,
Andreas

Ich habe die Lösung schon gefunden:

$ip = „127.0.0.1“;
$d = sscanf($ip,"%d.%d.%d.%d");
$ipneu = sprintf("%03d.%03d.%03d.%03d", $d[0],$d[1],$d[2],$d[3]);

Warum ich das machen will spielt doch keine Rolle, aber na gut:

Ich will überprüfen bei einer Logfile-Auswertung überprüfen, ob eine IP-Adresse aus dem logfile zu einem bestimmten Kundennetz gehört, zum Beispiel ein Netz mit der IP-Adresse 10.199.102.16 und der Subnetmaske 255.255.255.240.

Also muß ich zuerst den letzten Host eines Netzes finden.

Ich werde also gegenüner der oben dargestellten Lösung dann noch die Oktetts der dazugehörigen Subnetzmaske aufteilen und jeweils folgende Operation für jedes Oktett durchführen:

$ip_oct_last[$i] = ("$d[$i]"+(255-"$netmask[$i]"));

Danachfüge ich diese Oktetts wieder zusammen und ich erhalte den letzen Host des Netzes. Ich fasse die Oktetts aber 3stellig und ohne Punkte zusammen.

Also habe ich nun

$ipneu = 010199102016
$ipneulast = 010199102031

und die IP-Adresse aus dem Logfile: 127000000001

Somit kann ich eine ganz einfache und schnelle Überprüfung in für jede Zeile des Logfiles machen:

if ($ipneu