DNSBL Test zum Einbauen in die eigene Webseite

Ulrich

Registered User
Hallo Allerseits,

als logische Erweiterung der Spambekämpfung überprüfe ich hin und wieder die Einträge verschiedener DNS Blacklisten.

Es gibt bereits Seiten die diesen Service anbieten. Die meisten sind allerdings nicht vollständig oder total überladen und voll mit Werbung.

Ich habe diesen Service mit 57 Listen (!) nun so bereitgestellt, dass ihr per IFRAME das ganze auf eurer eigenen Webseite anbieten könnt. Das Skript erreicht ihr unter:
Code:
http://www.dnsbl-test.de/dnsbl-test.php
So direkt sieht es natürlich etwas langweilig aus. Bitte die entsprechenden Anpassungen per CSS vornehmen.

Hier mein Ergebnis: msp-it - DNSBL Test

Hier das Skript selbst:
Code:
<?php

# (C) Ulrich C. Manns, msp informations technologie, 2009
# E-Mail: [email protected]
# Internet: http://www.msp-it.de/
# Direkter Aufruf per IFRAME: http://www.dnsbl-test.de/dnsbl-test.php
#
# History: (wird nach unten fortgeschrieben) (+ Hinzugefügt, - Entfernt, ! Geändert)
#
#                +    Listen als Link nutzbar, dabei wird aus dem Listennamen die DOMAIN.TLD genutzt.
#                +    Links öffnen externe Seite
#    15.06.2009    !    Falsche Meldungstexte bei fehlender IP-Adresse (HOSTNAMEFAIL mit IPFAIL vertauscht)
#                !    Überprüfung nun auch möglich, wenn kein Hostnamen aufgelöst wird (Achtung! Das ist schon ein Grund, als Spammer erkannt zu werden.)

    # Konstanten
    # LANG zur Auswahl der Sprachdatei
    define( "LANG", substr( $_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2 ) );
    # weitere Konstanten ... gehören dann in ein Languagefile
    define( "BACK",                "Zurück" );
    define( "DNSBLTEST",            "DNS Blacklist Test" );
    define( "DNSBLTEST1",            "Bitte wenden Sie sich an den Anbieter der Liste, um ggfls. eine IP-Adresse entfernen zu lassen." );
    define( "DNSBLTEST2",            "Fehlt eine DNS Blacklist? Dann senden Sie uns bitte eine E-Mail oder nutzen Sie unser Kontaktformular!" );
    define( "HOST",                "DNS Blacklist Test" );
    define( "HOST1",                "Der eingegebene Hostname wird gegen die DNS Black Listen überprüft." );
    define( "HOST2",                "Bitte geben Sie einen Hostnamen oder eine IP-Adresse ein." );
    define( "HOSTFAIL1",            "Die Eingabe ist ungültig." );
    define( "HOSTFAIL2",            "Bitte geben Sie einen Hostnamen oder eine IP-Adresse ein." );
    define( "HOSTNAMEFAIL1",        "Keine IP-Adresse für den angegebenen Hostnamen gefunden!" );
    define( "HOSTNAMEFAIL2",        "Bitte geben Sie einen Hostnamen ein, der zu einer IP-Adresse aufgelöst werden kann." );
    define( "HOSTNAMEORIP",            "Hostname oder IP-Adresse" );
    define( "IPFAIL1",                "Keinen Hostnamen für die angegebene IP-Adresse gefunden!" );
    define( "IPFAIL2",                "Bitte geben Sie eine IP-Adresse ein, die zu einem Hostnamen aufgelöst werden kann." );
    define( "OK",                    "DNSBL Test starten" );
    define( "OWNIP",                "Eigene IP-Adresse bzw. Hostnamen überprüfen" );
    define( "SECOND",                "Sek." );

    # Remote-DNS-Black-Lists
    $dnsbls = array(    "cbl.abuseat.org",
                    "dnsbl.ahbl.org",
                    "ircbl.ahbl.org",
                    "rhsbl.ahbl.org",
                    "tor.ahbl.org",
                    "virbl.dnsbl.bit.nl",
                    "intercept.datapacket.net",
                    "spamtrap.drbl.drand.net",
                    "dnsbl.dronebl.org",
#                    "list.dsbl.org",
#                    "multihop.dsbl.org",
#                    "unconfirmed.dsbl.org",
                    "blackholes.five-ten-sg.com",
                    "blacklist.hostkarma.com",
                    "dnsbl.inps.de",
                    "hostkarma.junkemailfilter.com",
                    "ix.dnsbl.manitu.net",
                    "no-more-funn.moensted.dk",
                    "combined.njabl.org",
                    "bhnc.njabl.org",
                    "dnsbl.njabl.org",
                    "rbl.orbitrbl.com",
                    "dnsbl.proxybl.org",
                    "dnsbl.sorbs.net",
                    "block.dnsbl.sorbs.net",
                    "dul.dnsbl.sorbs.net",
                    "escalations.dnsbl.sorbs.net",
                    "http.dnsbl.sorbs.net",
                    "misc.dnsbl.sorbs.net",
                    "safe.dnsbl.sorbs.net",
                    "smtp.dnsbl.sorbs.net",
                    "spam.dnsbl.sorbs.net",
                    "new.spam.dnsbl.sorbs.net",
                    "old.spam.dnsbl.sorbs.net",
                    "recent.spam.dnsbl.sorbs.net",
                    "socks.dnsbl.sorbs.net",
                    "web.dnsbl.sorbs.net",
                    "zombie.dnsbl.sorbs.net",
                    "rhsbl.sorbs.net",
                    "badconf.rhsbl.sorbs.net",
                    "nomail.rhsbl.sorbs.net",
                    "abuse.rfc-ignorant.org",
                    "bogusmx.rfc-ignorant.org",
                    "dsn.rfc-ignorant.org",
                    "postmaster.rfc-ignorant.org",
                    "whois.rfc-ignorant.org",
                    "db.rubl.ru",
                    "bl.spamcannibal.org",
                    "bl.spamcop.net",
                    "sbl.spamhaus.org",
                    "xbl.spamhaus.org",
                    "pbl.spamhaus.org",
                    "dyna.spamrats.com",
                    "noptr.spamrats.com",
                    "spam.spamrats.com",
                    "psbl.surriel.com",
                    "dnsbl-1.uceprotect.net",
                    "dnsbl-2.uceprotect.net",
                    "dnsbl-3.uceprotect.net",
                    "db.wpbl.info"
                 ); # 57 Stück

    # Variablen aufbereiten
    if ( isset( $_POST['host'] ) ) { $host = $_POST['host']; } else { $host = ""; }
    if ( isset( $_POST['ownip'] ) ) { $host = $_SERVER['REMOTE_ADDR']; }
    if ( preg_match( "/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/", $host ) ) {
        $ip = $host;
        $hostname = gethost( $ip );
    } elseif ( preg_match( "/[A-Z0-9-.]+\.[A-Z]{2,3}/i", $host )  ) {
        $hostname = $host;
        $ip = gethost( $hostname );
    } else {
        $ip = "";
        $hostname = "";
    }

    # Programmablauf
    if ( $ip == "" && $hostname == "" ) {
        if ( $host == "" ) {
            form_host( HOST1, HOST2 );
        } else {
            form_host( HOSTFAIL1, HOSTFAIL2 );
        }
    } elseif ( $ip == "" ) {
        form_host( HOSTNAMEFAIL1, HOSTNAMEFAIL2 );
#    } elseif ( $hostname == "" ) {
#        form_host( IPFAIL1, IPFAIL2 );
    } else {
        form_dnsbltest( DNSBLTEST1, DNSBLTEST2 );
    }

####################################################################################################

    function form_host( $msg1, $msg2 )
    {
        global $host;
        ?>
            <h1><?php echo HOST; ?></h1><br />
            <?php if ( isset( $msg1 ) ) { echo $msg1."<br /><br />"; } ?>
            <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
                <fieldset style="border:1px solid #666666;">
                    <legend>&nbsp;<?php echo HOST; ?>&nbsp;</legend>
                    <table cellpadding="2" style="margin:10px;">
                        <colgroup>
                            <col width="200px;" />
                        </colgroup>
                        <tr>
                            <td align="right"><label for="host" style="cursor:pointer; margin-right:10px;"><?php echo HOSTNAMEORIP ?>:</label></td>
                            <td><input id="host" type="text" name="host" value="<?php echo htmlspecialchars( $host ); ?>" default /></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td><?php if ( isset( $msg2 ) ) { echo "<br />".$msg2."<br /><br />"; } else { echo "<br />"; } ?></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td><input type="submit" name="hostok" value="<?php echo OK; ?>" default /></td>
                        </tr>
                        <tr>
                            <td>
                                <br />
                            </td>
                            <td></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td><input type="submit" name="ownip" value="<?php echo OWNIP; ?>" /></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td><?php echo htmlspecialchars( " ".$_SERVER['REMOTE_ADDR']." / ".gethost( $_SERVER['REMOTE_ADDR'] ) ); ?></td>
                        </tr>
                    </table>
                </fieldset>
            </form>
        <?php
    }

    function form_dnsbltest( $msg1, $msg2 )
    {
        global $dnsbls;
        global $ip;
        global $hostname;
        ?>
            <h1><?php echo DNSBLTEST; ?></h1><br />
            <?php if ( isset( $msg1 ) ) { echo $msg1."<br /><br />"; } ?>
            <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
                <fieldset style="border:1px solid #666666;">
                    <legend>&nbsp;<?php echo DNSBLTEST; ?>&nbsp;</legend>
                    <table style="margin:10px;">
                        <colgroup>
                            <col width="200px;" />
                        </colgroup>
                        <tr>
                            <td align="right"><a style="margin-right:5px;">IP-Adresse:</a></td>
                            <td><b style="margin-left:5px;"><?php echo htmlspecialchars( $ip ); ?></b></td>
                        </tr>
                        <tr>
                            <td align="right"><label style="margin-right:5px;">Hostname:</label></td>
                            <td><b style="margin-left:5px;"><?php echo htmlspecialchars( $hostname ); ?></b></td>
                        </tr>
                        <tr>
                            <td><br /></td>
                            <td></td>
                        </tr>
                        <tbody style="line-height:1em;">
                            <?php foreach( $dnsbls as $dnsbl ) { ?>
                                <tr style="background-color:#cccccc;">
                                    <td align="right" valign="top" style="padding:5px;"><label><a href="http://www.<?php $dnsblarr = explode( ".", $dnsbl ); end( $dnsblarr ); echo prev( $dnsblarr ).".".end( $dnsblarr ); ?>/" rel="external"><?php echo $dnsbl; ?></a></label></td>
                                    <td style="padding:5px;"><table cellpadding="0" cellspacing="0" width="100%"><tr><td width="50%"><?php $dnsbltest = dnsbltest( $ip, $dnsbl ); echo "<b>".$dnsbltest[0]."</b></td><td align=\"right\" width=\"50%\"><span style=\"color:#ffffff; font-size:0.8em;\">".$dnsbltest[2]." ".SECOND."</span></td></tr></table>"; if ( $dnsbltest != "–" ) { if ( $dnsbltest[1] != "" ) { echo "<span style=\"font-size:0.8em;\">".$dnsbltest[1]."</span>"; } } ?></td>
                                </tr>
                            <?php } ?>
                        </tbody>
                        <tr>
                            <td></td>
                            <td><?php if ( isset( $msg2 ) ) { echo "<br />".$msg2."<br /><br />"; } else { echo "<br />"; } ?></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td><input type="submit" name="back" value="<?php echo BACK; ?>" /></td>
                        </tr>
<!--                        <tr>
                            <td></td>
                            <?php
                                $dnsblresult[] = "Erste Zeile";
                                $dnsblresult[] = "Zweite Zeile";
                            ?>
                            <td><a href="mailto:?subject=DNSBL Test Ergebnis&amp;body=<?php echo htmlentities( implode( "\r\n", $dnsblresult ) ); ?>">Als E-Mail versenden</a></td>
                        </tr>
-->                    </table>
                </fieldset>
            </form>
        <?php
    }

####################################################################################################

    function gethost( $query )
    {
        $result = trim( end( explode( " ", `host $query|head -n1` ) ) );
        if ( substr( $result, 1, 1 ) == "(" ) { $result = ""; }
        return $result;
    }

    function dnsbltest( $ip, $dnsbl )
    {
        $time0 = microtime( true );
        $iparr = explode( ".", $ip );
        $rip = $iparr[3].".".$iparr[2].".".$iparr[1].".".$iparr[0].".".$dnsbl;
        $result1 = trim( end( explode( " ", `dig $rip +short` ) ) );
        $time1 = microtime( true );
        $result2 = "";
        if( $result1 == "" ) {
            $result1 = "<span style=\"color:green;\">–</span>";
        } else {
            $result1 = "<span style=\"color:red;\">".htmlspecialchars( $result1 )."</span>";
            $result2 = htmlspecialchars( trim( str_replace( "\"", "", `dig $rip txt +short` ) ) );
            $time2 = microtime( true );
        }
        if( $result2 == "" ) {
            $result3 = substr( $time1 - $time0, 0, 4 );
        } else {
            $result3 = substr( $time1 - $time0, 0, 4 )."/".substr( $time2 - $time1, 0, 4 );
        }
        return array( $result1, $result2, $result3 );
    }

####################################################################################################

?><br />
Über konstruktive Kritik freut sich,
Ulrich

PS
Ich habe es hier unter Plesk gepostet, weil ich es als Erweiterung im weiteren Sinne verstehe. Oder gibt es einen besseren Platz, an dem es auch genügend Aufmerksamkeit bekommt?
 
Last edited by a moderator:
Hi,

da scheint noch was buggy zu sein.
Mit IP-Adressen funktioniert die Abfrage wunderbar. Gebe ich allerdings einen Hostnamen wie z.B. "google.de" an, dann läd sich nur das Formular neu, jedoch kriege ich keine entsprechenden Ergebnisse angezeigt.


-W
 
Danke für die Nachricht.

google.de ist eine Domäne und kein Host. Ich überprüfe auf xxx.xxx.xxx, ansonsten wird die Abfrage nicht ausgeführt. Es kommt dann die Meldung: Eingabe nicht gültig.

Ist es laut RFC erlaubt keinen wirklichen Hostnamen anzugeben und davon SMTP zu senden?
 
Code:
2.3.4 Host

   For the purposes of this specification, a host is a computer system
   attached to the Internet (or, in some cases, to a private TCP/IP
   network) and supporting the SMTP protocol.  Hosts are known by names
   (see "domain"); identifying them by numerical address is discouraged.

2.3.5 Domain

   A domain (or domain name) consists of one or more dot-separated
   components.[...]

http://www.ietf.org/rfc/rfc2821.txt

Der Hostname darf also durchaus auch nur einen Punkt enthalten.
 
Ich habe den Code geändert; Es werden jetzt auch 'kurze' Hostnamen abgefragt.

Hinweis:

Gerade bei dem Beispiel mit 'google.de' ist mir aufgefallen, dass Namen manchmal zu mehreren IP-Adressen aufgelöst werden. (Loadbalancing oder auch RoundRobbin genannt.) Wenn ein Hostname angegeben wird, so wird immer die erste IP-Adresse verwendet. Ansonsten bitte einfach eine IP-Adresse nutzen.
 
Das Script selbst oben hast du hier aber nicht aktualisiert, oder? Wenn ich das bei mir auf dem Server nutze sieht es anders aus bzw. Funktionen fehlen..
 
Jetzt habe ich das Skript oben erneuert.

Wie zu sehen ist, schreibe ich noch dran rum. Eigentlich wollte ich jetzt noch eine Funktion einbauen, die es einem ermöglicht das Ergebnis in eine E-Mail zu übernehmen.....

In Zukunft wird auch die Dokumentation besser....versprochen.
 
Müssen auf dem Server besondere Pakete installiert sein? Die Hostname Auflösung funktioniert bei mir überhaupt nicht..
 
In den Funktionen gethost und dnsbstest werden externe Kommandos aufgerufen. Dazu muss der PHP Safe Mode ausgeschaltet sein. Das kann aber auch eine Sicherheitslücke darstellen!!!

Es werden die Kommandos host, head und dig aufgerufen. Diese müssen natürlich installiert sein.
 
Hallo Allerseits,

nun könnt ihr das Ergebnis der DNS Blacklisten per E-Mail versenden. (An eure Kunden, oder Interessenten oder oder oder....)

:-)

Da ich die eingegebenen Daten, wie E-Mail und Text per Cookie speichere, könnt ihr die Defaults einmal für euch anpassen und dann immer so verwenden.

http://www.dnsbl-test.de/

Grüße,
Ulrich

PS
@Admin: Bitte den Thread verschieben, das hat nun nicht wirklich noch was mit Plesk zu tun. Sorry und Danke.
 
Back
Top