///////////////////////////////////////////////////////////////////////////
//
// DNSBL - Spam IP address checker.
// Copyright (C) 2011 Alexey A.Znayev
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
// 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
?>
En la actualidad son ya varios modelos de teléfonos móviles los que permiten grabar vídeos a más de 30 fps, llegando en mi caso con un LG G2 a los 120 fps. Esta cualidad permite reproducirlos a cámara lenta sin notar saltos entre frames, pero no todos los teléfonos permiten de forma nativa el cambiar la velocidad de reproducción, lo que requiere una pequeña edición del vídeo en el caso que lo queramos compartir. Esta edición se puede llevar a cabo con la app gratuita Video Speed.
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.
El abanico de juegos disponibles para los móviles de hoy en día (ya sean del androide o de la manzanita) es inmenso, y más aún si echamos la vista atrás y jugamos a los juegos de antaño gracias a los emuladores. Todo está muy bien, pero existe el inconveniente de que para jugar tenemos que pulsar una serie de botones virtuales que aparecen en la pantalla, y esto conlleva que nuestros dátiles (llámense también dedos) tapan gran parte de la misma. Si te ves identificado con este problema, quizás te interese este artículo.
Hay momentos en los que el móvil se nos queda pequeño en las manos, necesitamos disponer de la potencia del mismo pero en una pantalla mayor. Existen dispositivos que integran una salida miniHDMI, pero la mayoría no disponen de ello. En este post vamos a presentar el dock oficial para el Samsung Galaxy Nexus, con el cual podremos ver la pantalla de nuestro móvil en la televisión mediante HDMI.
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.
Samsung finalmente dio a conocer su último móvil en un evento de lanzamiento en el Radio City Music Hall de Nueva York en marzo, su nuevo y flamante GALAXY S4. Pero la pregunta que se hacen muchos usuarios de smartphones es, ¿merece la pena cambiar de terminal? Desde Indaltronia os vamos a dar unas pequeñas indicaciones para que vosotros mismos decidáis.
Con este artículo estrenamos una nueva sección en Indaltronia, en la que se analizarán diversos dispositivos o gadgets relacionados con la telefonía móvil, informática… Y para empezar tenemos esta batería externa, la Veho Pebble Smartstick, que suple la carencia de capacidad de las baterías de los teléfonos actuales.
¿Eres uno de los afortunados que va a poder disfrutar del magnífico Samsung Galaxy S4? Y si es así, no te da miedo llevarlo sin una buena funda que lo proteja de golpes, arañazos, rozaduras,…. Pues adelantándose incluso al lanzamiento del terminal, los chicos de MobileFun te ofrecen esta magnífica funda original para que mantengas tu móvil protegido desde el primer dia.
En Indaltronia siempre que ha surgido se ha hablado de temas de seguridad para el usuario, en este post se va a tratar un tema que nos involucra a todos puesto que… ¿quién no lleva siempre consigo un móvil? Hablamos de la diferencia entre bloqueo de pantalla y bloqueo de acceso.
Al igual que los escaladores de altas cumbres utilizan los sherpas para realizar sus hazañas, ¿por qué no usarlos nosotros en nuestro día a día para facilitarnos nuestras tareas con el teléfono móvil? Más o menos eso es lo que pretende Sherpa, un asistente virtual para Android con un potente sistema de reconocimiento de voz.
Comentarios recientes