[php] regexp prob bij lezen apache log

Pagina: 1
Acties:

  • rookie
  • Registratie: Februari 2000
  • Niet online
Ik wil onderstaande code gebruiken om mijn apache logs te lezen.
Deze filtert mooi de code red (+ varianten) d'r uit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?
  Header("Content-Type: text/plain");

  $searcharray = array(
    "{\"GET \/default.ida\?N}", //code red
    "{\"GET \/default.ida\?X}", //code red
    "{\"GET \/msadc}i",
    "{\"GET \/scripts}",
    "{\"GET \/_vti_bin}",
    "{\"GET \/_mem_bin}",
    "{\"GET \/c\/winnt\/system32\/cmd.exe\?}",
    "{\"GET \/d\/winnt\/system32\/cmd.exe\?}"
  );

  $fname = "./logs/access_log";
  $fpointer = fopen($fname,"r");
  if (!$fpointer) {
    echo "ERROR: Could not open: ".$fname."\n";
  } else {
      while (!feof ($fpointer)) {
        $buffer = fgets($fpointer, 4096);
        if (!preg_match($searcharray, $buffer)) {
          echo $buffer;
        }
      }
    if (!fclose($fpointer)) {
      echo "ERROR: Could not close: ".$fname."\n";
    }
  }
?>

Maar hij doet het niet! Wat doe ik fout???

(foutmelding = "Delimiter must not be alphanumeric or backslash", maar dat is echt niet het probleem...)

  • tomato
  • Registratie: November 1999
  • Niet online
Op zondag 07 oktober 2001 15:29 schreef rookie het volgende:
(foutmelding = "Delimiter must not be alphanumeric or backslash", maar dat is echt niet het probleem...)
Dus jij vindt { en } wel elementen van de verzameling "alphanumeric or backslash" :?

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
ik zie op http://www.php.net/manual/en/function.preg-match.php nergens staan dat je preg_match een array kunt meegeven als pattern :?

  • rookie
  • Registratie: Februari 2000
  • Niet online
Op zondag 07 oktober 2001 15:44 schreef marcusk het volgende:
ik zie op http://www.php.net/manual/en/function.preg-match.php nergens staan dat je preg_match een array kunt meegeven als pattern :?
Shit... Bij preg_replace kan het wel...
Iemand suggesties om dit mooi op te lossen?

  • tomato
  • Registratie: November 1999
  • Niet online
Op zondag 07 oktober 2001 15:44 schreef marcusk het volgende:
ik zie op http://www.php.net/manual/en/function.preg-match.php nergens staan dat je preg_match een array kunt meegeven als pattern :?
Dat is waar en het kan ook niet, dus daar zal ie in ieder geval over struikelen.
In perl kun je wel { en } als delimiters gebruiken trouwens (is wel een modifier voor nodig), maar ik weet niet zeker of dat in een PCRE ook kan (want imho vallen deze niet onder "alphanumeric or backslash").

  • tomato
  • Registratie: November 1999
  • Niet online
Op zondag 07 oktober 2001 15:51 schreef rookie het volgende:

[..]

Shit... Bij preg_replace kan het wel...
Iemand suggesties om dit mooi op te lossen?
Je hebt helemaal geen regular expression nodig. Doe gewoon zoiets:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
$search_array = array(
   "GET /default.ida";
   "GET /msadc";
   // etc...
);

//...

$i = 0;
$found = false;
while (!$found &amp;&amp; $search_array[$i]) {
   if (substr_count($buffer, $search_array[$i++]))
      $found = true;
}
if ($found)
   echo $buffer;

//...
?>

Of anders zou ik een regex als dit maken:
code:
1
_"GET /(default.ida|msadc|scripts|..etc..)_i

  • spine
  • Registratie: Juni 2001
  • Niet online

spine

VISHUDDHI

Op zondag 07 oktober 2001 15:51 schreef rookie het volgende:

[..]

Shit... Bij preg_replace kan het wel...
Iemand suggesties om dit mooi op te lossen?
loopje bouwen?

[BSDFreaks.nl] [www.Dark-Future.org] [Alizarin.nl]


  • rookie
  • Registratie: Februari 2000
  • Niet online
Ik gebruik nu:
PHP:
1
2
3
4
5
6
7
8
<?
        if (!preg_match("{\"GET \/default.ida\?(N|X)}", $buffer) &amp;
            !preg_match("{\"GET \/(msadc|scripts|_vti_bin|_mem_bin)}i", $buffer) &amp;
            !preg_match("{\"GET \/(c|d)\/winnt\/system32\/cmd.exe\?}", $buffer)
          ) {
          echo $buffer;
        }
?>

Werkt als een zonnetje!

  • spine
  • Registratie: Juni 2001
  • Niet online

spine

VISHUDDHI

kan ook :)

[BSDFreaks.nl] [www.Dark-Future.org] [Alizarin.nl]

Pagina: 1