xp-user
Goto Top

PHP Script zeigt weiße Seite an

Ich versuche mich mit einem Blackliste DNSBL Check PHP Script.
Jedoch hab ich mal wieder Tomaten vor den Augen. ...

Vielleicht sieht jemand warum es nicht klappt. HTML:
<?php 

$ip =["ip"];  
function is_blacklisted($ip) { 
    $dnsbl_check=array("bl.spamcop.net",   
                       "relays.osirusoft.com",   
                       "list.dsbl.org",   
                       "sbl.spamhaus.org");   
    if ($ip) { 
       $quads=explode(".",$ip);   
        $rip=$quads[3].".".$quads[2].".".$quads[1].".".$quads;   
        for ($i=0; $i<count($dnsbl_check); $i++) { 
            if (checkdnsrr($rip.".".$dnsbl_check[$i],"A")) {   
                $listed.=$dnsbl_check[$i]." ";   
            } 
         } 
       if ($listed) { return $listed; } else { return FALSE; } 
    } 
} 
?>


<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">  
 <p>IP Lookup: <input type="text" name="ip" /></p>  
  <p><input type="submit" NAME="gesendet" value="Übertragen" /></p>  
</form>
Eigentlich sollte jetzt ein Formular sichtbar sein, wo ich eine ip eingeben kann, welche dann nachschaut ob sie in einer Blacklist gelistet ist. Wenn ja sollte es angezeigt werden...

Leider seh ich nur weiß
Kommentar vom Moderator Dani am 29.12.2010 um 11:32:42 Uhr
Formatierungshilfen bitte benutzen!

Content-ID: 157700

Url: https://administrator.de/contentid/157700

Ausgedruckt am: 25.11.2024 um 19:11 Uhr

thaenhusen
thaenhusen 29.12.2010 um 11:20:08 Uhr
Goto Top
Moin.

Du musst die Funktion die Du geschrieben hast auch aufrufen...
<?php
$ip = $_GET["ip"];  
if($ip <> ""){  
  echo is_blacklisted($ip) . '<br />';  
}

function is_blacklisted($ip) {
  $dnsbl_check=array("bl.spamcop.net",  
  "relays.osirusoft.com",  
  "list.dsbl.org",  
  "sbl.spamhaus.org");  
  if ($ip) {
    $quads=explode(".",$ip);  
    $rip=$quads[3].".".$quads[2].".".$quads[1].".".$quads;  
    for ($i=0; $i<count($dnsbl_check); $i++) {
      if (checkdnsrr($rip.".".$dnsbl_check[$i],"A")) {  
        $listed.=$dnsbl_check[$i]." ";  
      }
    }
    if ($listed) {
      return $listed;
    }
    else {
      return FALSE;
    }
  }
}

?>


<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">  
<p>IP Lookup: <input type="text" name="ip" /></p>  
<p><input type="submit" NAME="gesendet" value="Übertragen" /></p>  
</form>
Das Skript funktioniert nun so, solltest aber noch etwas daran optimieren, wenn Du das wirklich einsetzten willst.
Also vorallem an der Ausgabe und dem Layout!

HTH
MK
xp-user
xp-user 29.12.2010 um 11:28:11 Uhr
Goto Top
Danke für die Antwort
xp-user
xp-user 29.12.2010 um 11:53:55 Uhr
Goto Top
Zitat von @thaenhusen:

Das Skript funktioniert nun so, solltest aber noch etwas daran optimieren, wenn Du das wirklich einsetzten willst.
Also vorallem an der Ausgabe und dem Layout!

Ich sehe wohl das Formular, jedoch wenn ich eine IP eingebe und diese sende, sehe ich weder ob die IP gelistet ist, noch ob sie nicht gelistet ist.
thaenhusen
thaenhusen 29.12.2010 um 14:26:41 Uhr
Goto Top
Moin.

Dann versuch mal statt

return FALSE;

return "Keine Treffer."

HTH
MK
xp-user
xp-user 29.12.2010 um 14:46:30 Uhr
Goto Top
Zitat von @thaenhusen:
Moin.

Dann versuch mal statt

return FALSE;

return "Keine Treffer."

HTH
MK

Notice: Undefined index: ip in /test.php on line 14

Line 14:
$ip = $_GET["ip"];
thaenhusen
thaenhusen 29.12.2010 um 15:09:18 Uhr
Goto Top
Moin.
if(isset($_GET["ip"])){  
  $ip = $_GET["ip"];  
}
else{
  $ip = "";  
}
Und dann in der Funktion abfangen?

HTH
MK

edit by masterG - 04.01.2011 12:50: Bitte Formatierungshilfe verwenden.
xp-user
xp-user 29.12.2010 um 15:15:57 Uhr
Goto Top
Zitat von @thaenhusen:
Moin.

if(isset($_GET["ip"])){
$ip = $_GET["ip"];
}
else{
$ip = "";
}

Und dann in der Funktion abfangen?


bringt jetzt kein Fehler mehr, aber immer noch kein Resultat


<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);  
?>
<?php
if(isset($_GET["ip"])){  
$ip = $_GET["ip"];  
}
else{
$ip = "";  
}
if($ip <> ""){  
  echo is_blacklisted($ip) . '<br />';  
}

function is_blacklisted($ip) {
  $dnsbl_check=array("bl.spamcop.net",  
  "relays.osirusoft.com",  
  "list.dsbl.org",  
  "sbl.spamhaus.org");  
  if ($ip) {
    $quads=explode(".",$ip);  
    $rip=$quads[3].".".$quads[2].".".$quads[1].".".$quads;  
    for ($i=0; $i<count($dnsbl_check); $i++) {
      if (checkdnsrr($rip.".".$dnsbl_check[$i],"A")) {  
        $listed.=$dnsbl_check[$i]." ";  
      }
    }
    if ($listed) {
      return $listed;
    }
    else {
      return "Keine Treffer.";  
    }
  }
}

?>


<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">  
<p>IP Lookup: <input type="text" name="ip" /></p>  
<p><input type="submit" NAME="gesendet" value="Übertragen" /></p>  
</form>
thaenhusen
thaenhusen 29.12.2010 um 15:43:46 Uhr
Goto Top
Moin.

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);  
if(isset($_GET["ip"])){  
  $ip = $_GET["ip"];  
}
else{
  $ip = "";  
}
echo is_blacklisted($ip) . '<br />';  

function is_blacklisted($ip) {
  $listed = "";  
  $dnsbl_check=array("bl.spamcop.net",  
  "relays.osirusoft.com",  
  "list.dsbl.org",  
  "sbl.spamhaus.org");  
  if ($ip) {
    echo '123 <br />';  
    $quads=explode(".",$ip);  
    $rip=$quads[3].".".$quads[2].".".$quads[1].".".$quads;  
    for ($i=0; $i<count($dnsbl_check); $i++) {
      if (checkdnsrr($rip.".".$dnsbl_check[$i],"A")) {  
        $listed.=$dnsbl_check[$i]." ";  
      }
    }
  }
  if ($listed) {
    return $listed;
  }
  else {
    return "Keine Treffer.";  
  }
}

?>


<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">  
<p>IP Lookup: <input type="text" name="ip" /></p>  
<p><input type="submit" NAME="gesendet" value="Übertragen" /></p>  
</form>

Dieser Code funktioniert bei mir. Vielleicht kommt Deine Installation nicht mit dem $_GET["ip"] zurecht versuche sonst mal mit $ip zuarbeiten.

HTH
MK
xp-user
xp-user 29.12.2010 um 15:58:20 Uhr
Goto Top
Also das Problem lag an dem Formular Input der sollte method="get" sein und nicht method="post"

Einen grossen Schritt weiter...
xp-user
xp-user 29.12.2010 um 16:29:34 Uhr
Goto Top
Ich krieg jetzt jedoch diese Fehlermeldung:
Notice: Undefined variable: listed in /test.php on line 33

Line 33:
$listed.=$dnsbl_check[$i]." ";

Jedoch gibt er mir korrekt an ob eine IP gelistet ist, oder eben nicht.
thaenhusen
thaenhusen 29.12.2010 um 18:12:41 Uhr
Goto Top
Moin.

Siehe letztes Posting von mir:

function is_blacklisted($ip) {
$listed = "";  

Dann ist der Fehler weg...
HTH
MK
xp-user
xp-user 30.12.2010 um 08:51:15 Uhr
Goto Top
Perfekt wär's, wenn man auch URL/Domains abfragen könnte. Nicht nur IP's

P.S: Sehr gut. Vielen Dank face-wink
Jetzt klappt alles bestens.
thaenhusen
thaenhusen 30.12.2010 um 10:42:51 Uhr
Goto Top
Moin.

Also google hätte Dir da auch schnell helfen können. Du solltest Dich mal mit PHP etwas näher auseinandersetzen und dann die Dinge erstmal
selber angehen, dass bringt Dich am Ende weiter...

Aber...

<?php
  $host = "www.google.de";  
  $ip = gethostbyname($host);
  echo $ip;
?>

... sollte Dir weiterhelfen.

HTH
MK
xp-user
xp-user 30.12.2010 um 11:42:46 Uhr
Goto Top
hab mir das Buch \"PHP für Dummies\" gekauft, ... also ich bin schon dabei.

Habe im Bereich PHP wirklich \"Baby-Status\" :-S

Also der Code gibt ja die IP von google.de aus. Wie kann ich das jetzt mit dem Eingabefeld verbinden, so dass ich domain.xy eingeben kann?
thaenhusen
thaenhusen 30.12.2010 um 12:02:12 Uhr
Goto Top
Moin.

Vieleicht in dem Du mit dem Form einen Hostnamen übergibst und dass dann in die gethostbyname()-Funktion steckst,
anstatt die IP direkt zu verarbeiten!?

Also dass sollte doch jetzt auch im Babystatus erkennbar sein.

Du kannst auch zwei Felder übergeben host und ip und musst dann entscheiden was Du prüfst...

HTH
MK
xp-user
xp-user 30.12.2010 um 12:57:10 Uhr
Goto Top
Also mit zwei Formularen krieg ich das schon hin, jedoch das weitergeben nicht. Also das es nur ein Eingabefeld benötigt.
<?php 
// Die Abfrage der IP von der Domain
  if(isset($_GET["host"])){  
  $host = $_GET["host"];  
  $iphost = gethostbyname($host); 
  echo $iphost; 
  }
?>
thaenhusen
thaenhusen 30.12.2010 um 13:49:15 Uhr
Goto Top
Moin.

Das wird auch so einfach mit einem Eingabefeld nicht gehen, da Du ja dann prüfen musst, ob es sich um eine IP oder
einen Host handelt.

Das könnte man dann mit reglären Ausdrücken bauen, aber dazu brauchst Du denke ich noch mehr Grundlagen...

Einfach ist es doch folgendermassen:

1. Zwei Eingabefelde Host und IP
2. Wenn IP leer ist Host in IP und dann die Funktion aufrufen

Fertig.

HTH
MK
xp-user
xp-user 30.12.2010 um 14:39:49 Uhr
Goto Top
ja mit zwei Formularen funktioniert es einwandfrei. Nur ist das nicht so schick face-wink

Ich habe mir folgenden Weg ausgedacht.

Ein Feld. IP / Host
Egal ob eine IP oder eine Domain eingegeben wurde, nach
<?php 
// Die Abfrage der IP von der Domain
  if(isset($_GET["host"])){  
  $host = $_GET["host"];  
  $iphost = gethostbyname($host); 
  echo $iphost; 
  }
?>

erhalte ich $iphost und diese würde ich dann als $ip definieren.
$iphost = $ip;

... aber es klappt nicht
Guenni
Guenni 07.01.2011 um 22:00:59 Uhr
Goto Top
Hi xp-user,

. . . erhalte ich $iphost und diese würde ich dann als $ip definieren.

Dann solltest du auch schreiben . . .

$ip = $iphost; ==> Zuweisung von rechts nach links und nicht umgekehrt.

Ich frage mich aber, wenn du mit $iphost = gethostbyname($host);" die IP-Adresse doch schon hast, warum willst du die

denn nochmal in einer anderen Variablen ablegen? Dann zerlegst du diese Variable in ein Array, anschließend verknüpfst du

die Arrayelemente wieder umständlich zu dem, was die IP vorher auch schon war.

$ip="192.168.0.1";

$quads=explode(".",$ip);
$rip=$quads[3].".".$quads[2].".".$quads[1].".".$quads;

echo $rip; ==> ergibt: 192.168.0.1 face-smile


Dann steht im PHP-Manual ==> http://www.php.net/manual/de/function.checkdnsrr.php

Prüft DNS-Einträge auf Übereinstimmung mit einem gegebenen Internet-Host-Namen ODER einer IP-Adresse.

Beachte bitte das Wörtchen ODER. Du aber verknüpfst IP UND Hostname . . .

if (checkdnsrr($rip.".".$dnsbl_check[$i],"A")) . . .

. . . heißt, bei dir steht jetzt da z.B.: "217.150.151.99.www.telekom.de". Also entweder bin ich jetzt zu doof dazu, aber ich sehe

in "deinem" Script, was übrigens schon vor Jahren in PHP-Net "Wort für Wort" veröffentlicht wurde, nicht, wie jetzt die Hosts aus

deiner Blacklist mit der eingegebenen IP in Verbindung gebracht werden. Zumal ich auch als IP "ABC.DFG.XY.r" eingeben kann:

Ein, zwei Hosts werden immer ausgegeben. Ich kann auch meinen Server in die Blacklist eintragen und die IP eingeben. Zumindest

das müsste ja dann funktionieren. Tut's aber nicht. Schreibe ich jedoch if (checkdnsrr($dnsbl_check[$i],"A")) . . . , dann kann

ich auch als IP "ABC.DFG.XY.r" oder sonst was eingeben, dann wird auch mein Server ausgegeben, je nachdem, wie der zweite

Parameter ist, also "A", "MX", "PTR", "SOA" . . . etc.. Dieses "Gefummel" im Script mit einer IP bringt also gar nix. Ich denke mal,

diese Funktion ist eher dazu da, um im "eigenen" Netz(werk) DNS-Einträge zu überprüfen. Dass ein Internet-Host-Name übergeben

werden muß, hat mit Internet selber eher auch nichts zu tuen, sondern heißt wohl nur, das muß ein FQDN-Name sein; subdomain.domain.tld

Es ist eigentlich auch ziemlich sinnfrei, IP-Adressen mit Hosts in Verbindung zu bringen. Dazu gab ja auch schon mal Fragen wie:

"Wie kann ich in meinem Gästebuch eine IP-Sperre einbauen, um Spam zu verhindern?". IP-Adressen werden für einen gewissen Zeitraum

verliehen (siehe Lease-Time). Du legst also meinen Host in deiner Blacklist ab, merkst dir meine IP. Drei Stunden später gehe ich wieder

ins Internet und hab' eine neue IP. Meinen Host findest du mit deiner gemerkten IP (wahrscheinlich) nie mehr wieder.

Also schreib' doch einfach mal, was du überhaupt machen willst. Vielleicht kommen wir dann irgendwie weiter.


Gruß
Günni
xp-user
xp-user 08.01.2011 um 06:57:01 Uhr
Goto Top
Danke für die Ausführliche Antwort.
face-wink

Ich habe das ganze nun anders gelöst. Die Schwachstellen dieses Scriptes wurden mir mit der Zeit auch klar. Wobei die "Zeit" welche es braucht um so eine IP / Host abzufragen schlichtweg zu lange dauert.

Nun nutze ich eine API für ein RBL. face-wink Einfach sauber schnell.

Besten Dank

/* gelöst */