IP-Adresse und Port aus Textdatei extrahieren

Ich hätte den PHP-Code auch gern mal gesehen, genau das brauche. Wäre schön, wenn der Code zur Verfügung gestellt würde.
 
Ich hab mal einfach etwas zusammengeschustert...
PHP:
<?php

# Inhalt liegt vor im Format: XXX.XXX.XXX.XXX:XXXX

$file = "datei.txt";

$fp = file($file);

for($i = 0; $i < count($fp); $i++) {
	echo $fp[$i]."<br/>";
}

?>
 
Ok, ich hab es mittlerweile schon selbst herausgefunden:

Als erstes liest man mit file alles ein und implodiert den Array des Inhalts:

PHP:
$conts = implode("\n", file("logfile.txt"));

Dann lässt man eine Schleife durch den String laufen, der alle Adressen:Ports ausliest, darstellt und aus dem String löscht. Das macht man deswegen, da sonst immer die selbe Adresse/Port gefunden würde und man eine Endlosschleife hätte:

PHP:
while( preg_match("/([0-9]{1,3}\.){3}[0-9]{1,3}\:[0-9]{1,5}/", $conts, $ip) )
{
    $ip = $ip[0];
    echo "IP: $ip<br />";
    $conts = preg_replace("/$ip/", "", $conts);
}

Das Logfile wird dabei nicht verändert, nur der Inhalt im Speicher.

Vielleicht braucht das jemand noch einmal.

PS: Erklärung des Regex (Regulären Ausdrucks)

[0-9] => Alle Ziffern von 0-9 suchen
{1,3} => Es dürfen nur 1 - 3 Ziffern hintereinander stehen
([0-9]{1,3}\.) => Das sind die ersten 3 Teile des IP-Adressen-Oktetts

Demzufolge muss noch ein Oktett hinten angehängt werden
([0-9]{1,3}\.)[0-9]{1,3}

\:[0-9]{1-5} => Wir wissen nicht, welche Portnummer es ist, also kann die Portnummer 1 bis 5 Ziffern lang sein.

Der Backslash escaped die Zeichen, da ein Punkt oder ein Doppelpunkt durchaus Zeichen sind, die ebenfalls ein Regulärer Ausdruck sein können. Wir wollen aber, das diese Zeichen tatsächlich als Zeichen anerkannt werden.

Fragen?
 
Zurück