. // // 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 ?> febrero 2011

Monthly Archives febrero 2011

Un prontuario de electrónica, en tu bolsillo

Si te gusta la electrónica y tienes un móvil con Android, estás de suerte. Os presentamos ElectroDroid, un programa que a más de uno le hubiese gustado tener en un examen :p

Ver más

Apagar el equipo sin instalar actualizaciones

Cuando se está trabajando con el ordenador nos interesa tener todos los recursos disponibles libres, por ello Windows se espera al momento de apagar el equipo para instalar las actualizaciones que se haya descargado. No es mala ocasión, pero en el caso de trabajar con un portátil y tener que esperar cierto tiempo a que termine para recoger las cosas… personalmente me ha llegado a desquiciar, sobre todo en el caso de estos días del ServicePack1 de Windows7.

Aquí va un truquillo para poder apagar el ordenador sin que instale las actualizaciones.

Tenie...

Ver más

Localiza las antenas de telefonía móvil más cercanas

En alguna ocasión he tenido la curiosidad de saber dónde se encuentra la antena de mi operador móvil más cercana, ya que los vacíos de cobertura que aparecen en algunos sitios me hacen acordarme de ello…

Mediante coberturamovil.es se puede ver fácilmente este tipo de información.

El fu...

Ver más

Plantillas para oscilogramas

En el transcurso de la vida de un electrónico o el de un aficionado le surge la necesidad de plasmar en un papel los trazos representados en un osciloscopio. Si es tu caso, y estás cansado de dibujar la cuadrícula a mano, desde Indaltronia te facilitamos un poco el trabajo.

Ver más

Controla tu tráfico de datos en Android

Quien tiene un denominado smartphone ahora, es más que sugerente o goloso disponer de una tarifa de datos para tener conexión a Internet desde el terminal. Las compañías actualmente ofrecen tarifas planas (generalmente 300MB, 500MB algunas OMV) a un precio que ronda los 8€; luego cada compañía aplica distintas políticas si se excede ese máximo de transferencia, tal como bajar la velocidad a una velocidad paupérrima o pagar por cada MB consumido.

Disponiendo de Android en el móvil, vamos a mostrar 2 aplicaciones gratuitas con las que controlar el tráfico de datos y evitar posibles sorpresas.

Ver más

Facebook chat emoticons y Photo Zoom

Las palabras si van acompañadas de expresiones cobran más sentido. Siendo Facebook la red social más extendida es normal que también tenga sus propios emoticonos en la mísera ventanita de chat que nos ofrece.

Ver más

[Java] Antialiasing en gráficos

Cuando por defecto se pinta un gráfico en Java se aprecia que por defecto no le aplica ningún filtro antialising.

Dicho de otra forma, y como se aprecia en la imagen, cuando un objeto no tiene aplicado el antialiasing éste aparece con los bordes muy marcados, pareciendo que el objeto ha sido «recortado» y no ha sido pulido/suavizado. A continuación mediante una simple línea en Java se consigue tener objetos como la segunda A de la imagen (el resultado es más explícito ahí por tener un zoom considerable).

Ver más