. // // 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 ?> Electrónica

Categoría Electrónica

¿Está roto mi mando a distancia?

Seguro que nadie los tiene en cuenta en el día a día, pero, ¿os habéis parado a pensar que sería de nuestras vidas son los preciados mandos a distancia?  En nuestras casas existen numerosos mandos a distancia, que en ocasiones dejan de funcionar, pero existe una forma fácil y sencilla de diagnosticar su avería.

Ver más

ESP8266 y Notify My Android. Una buena pareja (Parte I)

Una de las cosas preferidas por toda persona que está sumergido en el mundillo de la electrónica es ver como algo tan insignificante, como puede ser el cambio de estado de un interruptor, puede provocar una sucesión de acontecimientos que desemboquen, por ejemplo, en una notificación en nuestro teléfono móvil. Pensando en esto último son numerosas las aplicaciones que se me están ocurriendo mientras escribo este artículo, así que mostraré los pasos iniciales para poderlas llevar a cabo.

ESP866 NMA

Ver más

A prueba: Altavoz bluetooth Veho M4

La verdad es que la potencia de los altavoces de los móviles de hoy en día están bastante bien, pero, ¿y si pudieramos conseguir un poco más de potencia sonora de manera sencilla?  Con sus 2 altavoces integrados de 2,2 W, el Veho 360º M4 es un gran aliado allí donde queramos tener música de manera sencilla y de calidad.

IMG_20130813_200406

Ver más

A prueba: TankBot

Los juegos tanto en el Google Play como en la AppStore proliferan a lo largo de los días de una forma considerable. Unos nos pueden gustar más, otros menos… y otros directamente apenas los instalamos, desinstalarlos. Se puede dar la necesidad de querer controlar algo físico, algo tangible, que no sea simplemente un conjunto de polígonos en la pantalla, en este caso os presentamos una posible solución: el TankBot de DeskPets.

Tankbot

Hemos...

Ver más

Pinouts.ru, información de todos los conectores y cables

USB, Firewire, mando de PSX, puerto ISA, HDMI, memorias RAM DDR, conector ATX, el Nokia Pop-Port o el viejo joystick del Atari, ….. seguramente se te vienen a la cabeza decenas de cables y/o configuraciones de conectores. Pero no tienes por qué memorizarlos todos (o ninguno) porque para ello están nuestros amigos rusos de Pinouts.ru


Tan s...

Ver más

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

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

Intercambio de 2 variables sin variable auxiliar

Seguramente, a lo largo de tu vida de programador, se te ha presentado el caso de que tengas que intercambiar el valor de 2 variables. La forma más utilizada es la de usar una variable auxiliar, pero en este post te presento una manera diferente de hacerlo.

Ver más

Cyber araña y arañitas

He aquí una pequeña escultura realizada con componentes electrónicos.

El que se ve al final es el pequeño 555 😉

Ver más

Fotos Gigabyte en la UAL

Fantástico el día transcurrido en la Universidad de Almería por parte del personal de Gigabyte (Noelia e Iñigo) y los mejores overclockers de España (DaCoSa, Predator y Skunk). Aquí os dejo una recopilación de fotos tanto de la charla, exhibición y talleres.

Ver más