Client Inspection / Alert Script

  • Themenstarter Themenstarter Klon
  • Beginndatum Beginndatum
K

Klon

Servus,

ich brauche umbedingt ein Script das den verbundenen Client untersucht, und zwar auf:
FTP, 21
SMTP, 25
POP3, 110
IMAP, 140
HTTP, 80
(je Open/Closed)

IP/Hostmask
OS/Browser (ok JavaScript zur Not)

Diese Informationen sollten dann samt Timestamp an eine eMail Addresse gesendet werden und in eine Datei geschrieben werden (die Einträge sollten dort Datum getrennt aufgelistet sein).
Die IP des Clients sollte danach für 20 Minuten ignoriert werden.

Mit welchem Aufwand ist das realisierbar? Meine PHP Kenntnisse belaufen sich nahezu auf 0 in dem Bereich (das Mailen schaf ich noch so grade...)

Danke für jede Hilfestellung.
 
Zum ersten kannst du per getenv(REMOTE_ADDR); die IP-Adresse des Besuchers herausfinden.

Dann gibts da noch die Funktion fsockopen. Allerings ist das eine TCP/IP-Funktion, und ich weiss nicht, ob die auf Antworten im entsprechenden Protokoll wartet :rolleyes:
PHP:
if (fsockopen (getenv(REMOTE_ADDR), 21, &$error, &$eroor_desc, 10))
  $ftpport = 1;
else
  $ftpport = 0;

Zur näheren Info: fsockopen


//Edit: Ach ja, zur IP-Sperre: Speichere einfach die IP in ne Datei, inkl. Timestamp und Prüfe bei jedem Zugriff, ob 20 Mins vergangen sind.


//Edit 2: Habs etz getestet, und es geht so weit (mit den Protokollen)
 
Zuletzt bearbeitet von einem Moderator:
Hi Klon,

ich bin kein PHPler, sondern hätte ich dir das Script eben fix zusammensetzen können.

Ich denke, das Grundgerüst sollte so aussehen:
PHP:
<?php

$remote_server["ip"] = "217.123.132.110";
$remote_server["port"] = "80";

$server_connect =  fsockopen("udp://".$remote_server[ip], $remote_server[port]); // zum server verbinden

if($server_connect) {
    $mailtext = $mailtext."\nPort ".$remote_server["port"]." offen";
}
else {
    $mailtext = $mailtext."\nPort ".$remote_server["port"]." geschlossen";
}
Abgewandelt von http://www.tutorials.de/forum/showthread.php?threadid=74712

An IP / Host kommst du auf jeden Fall über die Umgebungsvariablen (ich meine es waren: REMOTE_ADDR, REMOTE_HOST) heran. OS / Browser mag darüber auch gehen, müsste man im Einzelnen mal gucken.

Obigen PHP-Code in eine Schleife für die benötigten Ports packen und ganz zum Schluss die Variable $mailtext an die Mailfunktion übergeben. Ich hoffe, dass der PHP-Code oben richtig ist, da ich diesen nur nach einigermaßen Wissen zusammengeschrieben habe. In Perl wäre das hat kein Problem, aber PHP beherrsche ich nun mal nicht wirklich.

Ich hoffe mal, dass ich ein bisschen helfen konnte.

//edit: Hm, da war jemand schneller. ;)
 
wozu brauchst du die protokolle und deren status, außerdem -> wozu nen mailer einsetzten, lokale restriktionen?
 
Danke Nuinmundo, ohio: Weil ich es brauche.

Ok, Update:

PHP:
<?php 
$ip = getenv(REMOTE_ADDR); 
$ports = array(21, 25, 110, 140, 80); 
for ($k=0; $k<count($ports); $k++) { 
  $j = $ports[$k]; 
  if ($dt = fsockopen($ip, $j, &$err_no, &$err_desc, 1)) { 
   $mailtext .= "\nPort $ports[$k] ist offen"; 
   } 
  else { 
   $mailtext .= "\nPort $ports[$k] ist dicht"; 
   } 
 } 
mail("root@digitaldeath.de", "Port Scanning", $mailtext); 
?>

Jetzige Fassung, bringt Parse error in Line 4...
PHPinfo= http://www.digitaldeath.de/archiv/test.o_O

Jemand eine Idee?
 
Zuletzt bearbeitet von einem Moderator:
Hmm.
Bei mir bringt das Scipt keinen Parse Error.
Parse Error hat ja eigentlich auch nichts mit den PHP-Einstellungen zu tun. Und Syntaktisch ist eigentlich auch alles korrekt.
*ratlos*
 
PHP:
<?php
$ip = getenv("REMOTE_ADDR");
$ports = array(21, 25, 110, 140, 80);
$mailtext = "";
foreach ($ports as $port) {
	if ($sock = fsockopen($ip, $port, $errno, $errstr, 1)) {
		$mailtext .= "Port $port ist offen\n";
		fclose($sock);
	} else {
		$mailtext .= "Port $port ist dicht\n";
	}
}
mail("root@digitaldeath.de", "Port Scanning $ip", $mailtext);
?>
Änderungen: Unsauber programmierte Teile gefixt, for- durch foreach-Schleife ersetzt. HTH.
 
Zurück