Skip to content

Instantly share code, notes, and snippets.

@EddieRingle
Created April 22, 2012 18:12
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save EddieRingle/2465846 to your computer and use it in GitHub Desktop.
Save EddieRingle/2465846 to your computer and use it in GitHub Desktop.
Spamhaus DBL example
<?php
/* Let's say the variable $input contains a user-submitted link */
$parsed_url = parse_url($input);
if ($parsed_url != false) {
/* The domain should be found using the 'host' key */
$domain = $parsed_url['host'];
/* Now check that domain against the DBL */
$dbl_record = dns_get_record($domain);
/* If the resulting array is empty, the domain is clear for liftoff */
if ($dbl_record != NULL && count($dbl_record) == 0) {
/* Do stuff with the good domain */
} else {
/* Warn about a blocked domain */
}
}
@bradleybensmith
Copy link

As-is, it does not work. However, after doing some research, I figured out that the $domain variable should be set like $revip.zen.spamhaus.org where $revip is the reverse IP address of what you're checking.

For example:

<?php
$ip = "50.31.209.254";
$revip = implode(".", array_reverse(explode(".", $ip, 4), false)); // 254.209.31.50
$dns = dns_get_record($revip . ".zen.spamhaus.org");
?>

The rest is basically true, but it's better to check the actual results:

<?php
if ($dns != null && count($dns) > 0) {
    foreach ($dns as $entry) {
        if (in_array($entry['ip'], array('127.0.0.2', '127.0.0.3', '127.0.0.4')))
            return true;
    }
}
?>

The return codes are listed here: http://www.spamhaus.org/faq/section/DNSBL%2520Usage#202

@shawnkhall
Copy link

$domain = $parsed_url['host'] . '.dbl.spamhaus.org';

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment