. // // Alexey A.Znayev, znaeff@mail.ru, http://xbsoft.org, http://xbsoft.ru // /////////////////////////////////////////////////////////////////////////// // This file contains public class DNSBL // This class performs IP address check in spam blocking lists as described // on http://ru.wikipedia.org/wiki/RBL class DNSBL { private $_aCheckers = array( // list of checkers available for individual checking 'spamhaus' => array('.zen.spamhaus.org', true), //available for group checking with 'all' key 'spamcop' => array('.bl.spamcop.net', true), //available for group checking with 'all' key 'dsbl' => array('.list.dsbl.org', false), //not available for group checking with 'all' key 'ordb' => array('.relays.ordb.org', false), //not available for group checking with 'all' key 'sorbs' => array('.dnsbl.sorbs.net', false), //not available for group checking with 'all' key 'njabl' => array('.dnsbl.njabl.org', false) //not available for group checking with 'all' key ); // AZ - 1. Key 'all' is illegal // AZ - 2. Most of spammer IP addresses is covered by 'spamhaus' & 'spamcop' (and they are fast), // some of the rest may not work sometimes, you can make them group checking available after individual testing private $_sDefaultChecker = 'spamhaus'; /////////////////////////////////////////////////////////////////////////// // CheckSpamIP - check IP for spam in checkers : given, default or all available for group checking (may be slow) // parameters: // string $ip - ip address // string $checker - checker name or 'all' or nothing // returns: // true when IP exitsts in spam-lists of $checker or at least one of all checkers // false when not or when ip address is local or not correct public function CheckSpamIP($ip, $checker = ''){ if(empty($ip)) return false; if(preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $ip) != 1) return false; $octets = explode('.', $ip); if($octets[0] == '127') return false; if($octets[0] == '10') return false; if($octets[0] == '192' && $octets[0] == '168') return false; if($octets[0] == '169' && $octets[0] == '254') return false; // ms windows if((int)$octets[0] > 255 || (int)$octets[1] > 255 || (int)$octets[2] > 255 || (int)$octets[3] > 255 ) return false; $ret_val = false; $PTR = implode(array_reverse($octets), '.'); if($checker === 'all'){ foreach(array_values($this->_aCheckers) as $c){ if($c[1]){ $ret_val = $ret_val || $this->_CheckDNSAnswer(dns_get_record($PTR . $c[0], DNS_A)); } if($ret_val) break; } }else if(array_key_exists($checker, $this->_aCheckers)){ $ret_val = $this->_CheckDNSAnswer(dns_get_record($PTR . $this->_aCheckers[$checker][0], DNS_A)); }else{ $ret_val = $this->_CheckDNSAnswer(dns_get_record($PTR . $this->_aCheckers[$this->_sDefaultChecker][0], DNS_A)); } return $ret_val; } /////////////////////////////////////////////////////////////////////////// // GetCheckers - gets list of available checker names // returns: // array of strings public function GetCheckers(){ return array_keys($this->_aCheckers); } /////////////////////////////////////////////////////////////////////////// // GetGroupCheckers - gets list of checker names available for group checking with 'all' key // returns: // array of strings public function GetGroupCheckers(){ $ret_val = array(); foreach(array_keys($this->_aCheckers) as $k) if($this->_aCheckers[$k][1]) array_push($ret_val, $k); return $ret_val; } /////////////////////////////////////////////////////////////////////////// // GetDefaultChecker - gets default checker name // returns: // string public function GetDefaultChecker(){ return $this->_sDefaultChecker; } /////////////////////////////////////////////////////////////////////////// // SetDefaultChecker - sets default checker name // parameters: // string $new_checker - new default checker name // returns: // true when success // false when failed ($new_checker is not in the list of available checker names) public function SetDefaultChecker($new_checker){ if(array_key_exists($new_checker, $this->_aCheckers)){ $this->_sDefaultChecker = $new_checker; return true; }else{ return false; } } /////////////////////////////////////////////////////////////////////////// // EnableGroupChecking - sets checker available for group checking // parameters: // string $checker - checker name // returns: // true when success ($checker is included) // false when failed ($checker is not in the list of available checker names) public function EnableGroupChecking($checker){ if(array_key_exists($checker, $this->_aCheckers)){ $this->_aCheckers[$checker][1] = true; return true; }else{ return false; } } /////////////////////////////////////////////////////////////////////////// // DisableGroupChecking - sets checker not available for group checking // parameters: // string $checker - checker name // returns: // true when success ($checker is excluded) // false when failed ($checker is not in the list of available checker names) public function DisableGroupChecking($checker){ if(array_key_exists($checker, $this->_aCheckers)){ $this->_aCheckers[$checker][1] = false; return true; }else{ return false; } } // private methods /////////////////////////////////////////////////////////////////////////// // _CheckDNSAnswer - checks DNS-server answer for 127.0.0.* values // returns: // true when success // false when failed private function _CheckDNSAnswer($dns_answer){ if(!is_array($dns_answer)) return false; $len = count($dns_answer); if($len <= 0) return false; for($i=0; $i<$len; $i++){ $obj = $dns_answer[$i]; if(!(is_object($obj) || is_array($obj))) return false; $ip_str = $obj['ip']; if(!is_string($ip_str)) return false; $pos = strpos($ip_str, '127.0.0.'); if($pos !== false) return true; } return false; } } // end of class DNSBL ?> indaltronia

indaltronia posts etiquetados

A prueba: Mini teclado bluetooth

Móviles, tablets y consolas disponen hoy en día de la tecnología Bluetooth para la conexión de distintos periféricos, y un periférico casi indispensable es un teclado.

Teclado Bluetooth

Ver más

Cupones descuento para Worten

En colaboración con CuponesMágicos nos complace en Indaltronia abrir una nueva sección de cupones y descuentos para nuestros lectores. En este primer caso, ofertamos a nuestros fieles lectores la posiblidad de comprar en la tienda online de Worten con promociones exclusivas online u optar por los portes gratuitos del paquete.

Wort...

Ver más

Video: Light-painting WIFI

Radio, Televisión, GSM, WIFI… son ondas que conviven con nosotros sin que se vean, pero que se encuentran en todos casi todos los lugares de una ciudad. Un grupo de noruegos se propuso ver el aspecto de las señales WIFI en ciertos puntos de Oslo.

Mediante una barra con luces indicando la intensidad de señal que se recibía en ese preciso lugar y la técnica de larga exposición y light painting para captar las imágenes se han llegado a obtener las siguientes imágenes:

Video

Ver más

Video: Actualizando desde Windows 1.0 hasta Windows 7

A través de Genbeta he visto el siguiente video en el cual en una máquina virtual se comenzó instalando Windows 1.0 (previa instalación necesaria de MSDOS 5.0) hasta llegar a Windows 7 (actualizando siempre a la siguiente versión de Windows, pasando por ejemplo por Windows 3.1, Windows 98, Windows XP…).

Se pueden ver cosas curiosas como por ejemplo instalar en MSDOS 5.0 el Monkey Island y el Doom II, y poder seguir ejecutándolos hasta en Windows 7; o cómo mantiene el esquema de colores establecido también en MSDOS. También observar que no todo fue siguiente -> siguiente -> siguiente ya que por ejemplo surgen problemas con el formato de disco duro entre las versiones anteriores a XP y éste mismo.

Enlaces

Vis...

Ver más

Guia: Usar GoogleCode para administrar nuestros proyectos mediante SVN

Cuando se ha de realizar un proyecto conjuntamente con otros miembros, se ha de mantener sincronizados los recursos y poder disponer de ellos cuando se necesite. En esta guía vamos a explicar cómo usar Google Code para tener sincronizados nuestros proyectos mediante SVN.

Antes de proseguir, para quien no lo sepa, gracias a Google Code disponemos de una plataforma donde tener los recursos de nuestro proyecto (hasta 4GB), subir/descargar cualquier material referente al mismo (fotos, esquemas, documentos… límite 50MB) y mantener una documentación clara y ordenada del mismo; revisión online del código, Wiki y un panel de control bastante completo. La guía se basa en un ejemplo para utilizar Eclipse como IDE.

Reco...

Ver más