ipliste auswerten
juli
- css
- html
- php
0 Jörg Reinholz0 juli
Hi Männer,
ich hab mal wieder eine frage. ich will eine datei mit ips auswerten wie oft welche geklickt wurde. das ergebnis ist dann später eine htmltabelle. je nach wie oft wird die farbe noch geändert. das klappt auch. aber mun sollen die ips noch aufgeteilt angezeigt werden, also von aaa.bbb.ccc.ddd jede teilnummer in einer eigenen spalte in der tabelle. die anzahlanzeige bleibt aber auf die vollständige nummer beschränkt. aber wenn jetzt aaa.bbb auch schon mehrmals war, will ich die farbe auch ändern.
jetzt komm ich mit dem aufbau des arrays in php nicht klar, wie ich das am besten machen muss, damit ich gleich die anzahl habe für die farbwahl wenn die zeile dran ist mit der ausgabe. das sind je jetzt vier felder für die ich die anzahl wissen muss pro zeile.
versteht mich einer? ich weiß jedenfalls nicht mehr weiter.
danke schonmal
juli
Moin!
Willst Du das wirklich? "Bald" kommt nämlich flächendeckend IPv6 und ich bezweifle begründet, dass sich der Spaß - hinter dem ich auch keinerlei Nutzen sehe - dann noch auf einem ordinären Webserver speichern lässt.
Jörg Reinholz
hi,
Willst Du das wirklich? "Bald" kommt nämlich flächendeckend IPv6 und ich bezweifle begründet, dass sich der Spaß - hinter dem ich auch keinerlei Nutzen sehe - dann noch auf einem ordinären Webserver speichern lässt.
ja, will ich. bald ist auch wieder weihnachten und ich will trotzdem vorher noch am strand liegen :-P
lg juli
Moin!
Na dann: (In PHP)
Kannst ja probieren. (ERST ALLES LESEN!)
<?php
for ($i=1; $i < 256; $i++) {
$classA[$i]=0;
$classB[$i]=array();
$classC[$i]=array();
$classD[$i]=array();
for ($k=1; $k < 256; $k++) {
$classB[$i][$k]=0;
$classC[$i][$k]=array();
$classD[$i][$k]=array();
for ($l=1; $l < 256; $l++) {
$classC[$i][$k][$l]=0;
$classD[$i][$k][$l]=array();
for ($m=1; $m < 256; $m++) {
$classD[$i][$k][$l][$m]=0;
}
}
}
}
Ungefähr das hier passiert, wenn jede IP(v4) einmal "klickt":
Das Skript hat Speicher ohne Ende gebraucht und auf meinem System zur Nutzung von 12GB RAM geführt. Mit einer langsamen Platte hätte ich aufgeben können. (SWAP!)
Zeiten:
real 1m39.223s
user 1m3.586s
sys 0m11.457s
Dafür habe ich es jetzt schön warm.
Versuchen wir es anders herum:
<?php
$classA=array();
$classB=array();
$classC=array();
$classD=array();
$handle = fopen("/tmp/inputfile.txt", "r");
if ($handle) {
while (($buffer = fgets($handle, 4096)) !== false) {
$row=trim($buffer);
if ($row) {
list($a, $b, $c, $d) = explode('.', $row);
if (! isset($classA[$a]) ) {
$classA[$a]=1;
} else {
$classA[$a]++;
}
if (! isset($classB[$a]) ) { $classB[$a]=array(); }
if (! isset($classB[$a][$b]) ) {
$classB[$a][$b]=1;
} else {
$classB[$a][$b]++;
}
if (! isset($classC[$a][$b]) ) { $classC[$a][$b] = array(); }
if (! isset($classC[$a][$b][$c]) ) {
$classC[$a][$b][$c]=1;
} else {
$classC[$a][$b][$c]++;
}
if (! isset($classD[$a][$b][$c]) ) { $classD[$a][$b][$c] = array(); }
if (! isset($classD[$a][$b][$c][$d]) ) {
$classD[$a][$b][$c][$d]=1;
} else {
$classD[$a][$b][$c][$d]++;
}
}
}
fclose($handle);
} else {
echo "da war nichts zu lesen...";
}
print "\nA: ";
print_r($classA);
print "\nB: ";
print_r($classB);
print "\nC: ";
print_r($classC);
print "\nD: ";
print_r($classD);
liefert mit 27 Zeilen "192.168.1.2" erwartungsgemäß:
A: Array
(
[192] => 27
)
B: Array
(
[192] => Array
(
[168] => 27
)
)
C: Array
(
[192] => Array
(
[168] => Array
(
[1] => 27
)
)
)
D: Array
(
[192] => Array
(
[168] => Array
(
[1] => Array
(
[2] => 27
)
)
)
)
und geht ziemlich fix:
real 0m0.046s
user 0m0.026s
sys 0m0.017s
... sollte also ungefähr das sein, was Du willst.
Jörg Reinholz
Moin!
Mit einer Textdatei aus einer kleinen DDoS-Attacke und 201716 Zeilen, 2.851.041 Bytes (nur IP-Adressen):
real 0m0.986s
user 0m0.813s
sys 0m0.105s
( ... und ohne Ausgabe der Arrays:)
real 0m0.841s
user 0m0.827s
sys 0m0.012s
Jörg Reinholz
hi ho jörg,
danke für das beispiel. ich krieg das jetzt wohl hin. muss nur noch ein bisschen das php und html sortieren. sonst steigt hier bei mir keiner mehr durch :-O
ich hätte dir gerne punkte gegeben, aber das geht nicht.
liebe grüße juli
Hallo
ich hätte dir gerne punkte gegeben, aber das geht nicht.
Ja, dazu musst du registriert und angemeldet sein. Du solltest aber Antworten als die Antworten akzeptieren können. Das hülfe später Suchenden und verhülfe Jörg auch zu Punkten.
Tschö, Auge