miércoles, 13 de febrero de 2013

Mandar un mail con Php

El formato de los mensajes está especificado en una serie de normas conocidas como el MIME (Multipurpose Internet Mail Extensions) en las que se establecen los contenidos y la sintaxis de las diferentes partes de un mensaje

Recordemos que la función

mail(destinatario, asunto, mensaje, cabecera)

Tiene cuatro parámetros y que las especificaciones del MIME aluden a los dos últimos, es decir a mensaje (el cuerpo del mensaje) y cabecera que es el encabezado del mismo. Respecto a destinatario y asunto no se requieren más comentarios que reiterar la necesidad de incluir esos valores (e-mail del destinatario y asunto) bien directamente, como parámetro en la función, o a través de una variable.

Cabeceras de los mensajes (headers)

Los diferentes elementos de la cabecera de un mensaje deben insertarse siempre separados por saltos de línea bien pulsando Enter o incluyendo la secuencia \n dentro de la misma de línea. No pueden incluirse espacios, ni al comiezo de las nuevas líneas ni después de \n, y las comillas –que han de contener todo el encabezado– se abren delante del primero de ellos y no se cierran hasta después de haber escrito el último. Pueden contener lo siguiente:
Date: xxxxx
Date: debe escribirse con esta sintaxis exactamente. El parámetro xxxxx es una cadena que contendrá la fecha de envío del mensaje y que puede obtenerse a través de una de las funciones de fecha de PHP tal como puedes ver en el ejemplo.
MIME-Version: 1.0
Este elemento de la cabecera especificará la versión MIME que ha de utilizar el cliente de correo para poder interpretar adecuadamente el contenido de los mensajes.
From: remitente
Este elemento de la cabecera permite indicar el nombre del remitente (remitente) y su dirección e-mail siguiendo la sintaxis que se especifica. El nombre, como un elemento independiente y la dirección e-mail dentro de < >.

¡Cuidado!

No debemos poner comillas ni en el nombre del remitente, ni en la dirección e-mail, ni en la fecha, etcétera.

Otros pueden ser Cc: y Bcc: ; Reply-To: y X-Mailer.

Si no se especifica lo contrario, los mensajes se envían como texto sin formato, pero existen opciones que permiten especificar el formato que ha de tener un mensaje. La especificación de un formato obliga a incluir otro elemento en cabecera del mensaje:
Content-Type:
Este elemento debe ir seguido de la especificación en la que se indique el tipo de contenido. Tiene la sintaxis: tipo/subtipo. Hablaremos de dos de ellas:
  • text/plain
    El text/plain es la opción por defecto y señala que el contenido del mensaje es de tipo texto (text) y del subtipo sin formato (plain)
  • text/html
    Como la opción anterior, es tipo texto, pero en este caso, el subtipo es html con lo cual el mensaje se visualizará en formato html siempre que el cliente de correo permita esa posibilidad.
Los tipos anteriores permiten enviar mensajes simples (sin ficheros adjuntos) en uno u otro formato, pero el MIME nos da opciones para insertar dentro de un mismo mensaje elementos de diferentes tipos y subtipos. Las opciones de mayor interés son las siguientes:
  • multipart/alternative
    Es la forma de especificar que el mensaje tiene varias partes (multipart) de las que el destinatario ha de ver una sola (alternative). Se podría utilizar en casos en los que sea necesario prever la posibilidad de que un mensaje con formato HTML pueda ser visualizado como texto plano cuando el cliente de correo no soporte HTML.
    Podemos hacer un mensaje a medida que se presentará de una forma u otra según el cliente utilizado para leerlo.
  • multipart/mixed
    Cuando en el Content-Type se establece el tipo multiparte y el subtipo mezclado (mixed) será cuando tengamos la posibilidad de adjuntar ficheros al mensaje.
    Las diferentes partes de un mensaje deben ir separadas – tanto en modo alternativo como mezclado– y para ello hay que incluir un nuevo elemento en el encabezado. Se trata de un separador al que se llama boundary.
boundary=cadena
Dentro del encabezado y siempre en línea aparte (fíjate que en los ejemplos o está en línea aparte o aparece el \n) debemos incluir el elemento boundary= (sin símbolo de $ delante) y detrás del signo igual una cadena (en este caso entre comillas) que en principio puede ser una cadena cualquiera que no contenga espacios, aunque lo habitual es incluirla con el formato que podemos ver en los ejemplos.
El cuerpo del mensaje
En su formato más simple el cuerpo del mensaje contiene únicamente texto, pero cuando se trata de multipartes deberá contener necesariamente: los separadores de las diferentes partes, los encabezados de cada una de las partes y sus respectivos contenidos. La secuencia habría de ser de este tipo:
  • Separador
  • Content-type

    – Los tipos y subtipos más habituales son los siguientes. Para incluir textos: los ya mencionados text/plain y text/html. Para imágenes y según el tipo de imagen: image/jpeg, image/gif. Para sonidos: audio/basic. Para vídeo: video/mpeg. Para ejecutables, comprimidos y otros ficheros adjuntos: application/octet-stream.

    – En cualquier caso, si quieres utilizar algún otro tipo de archivo puedes consultar en la web las especificaciones del MIME.

    – Aparte de tipo/subtipo puede añadirse a Content-type -en el caso de texto- separado por punto y coma, la especificación del tipo de alfabeto (charset=) seguida del tipo de codificación (te sugerimos el "ISO-8859-1" que hace alusión al alfabeto latino).

    – Cuando se trata de ficheros adjuntos deberemos poner, después del punto y coma, name= seguido del nombre y extensión del fichero que se adjunta.
  • Content-Transfer-Encoding

    – Este apartado del encabezado puede especificar una de los siguientes codificaciones: 7BIT, 8BIT, BASE64, BINARY,QUOTED-PRINTABLE

    – La transferencia codificada en 7bit representa la codificación habitual en el formato ASCII de 7 bits. No permite caracteres ASCII con un código mayor que 127.

    – Quoted-printable constituye una de las alternativas al formato ASCII de 7 bits. Esta codificación suele usarse cuando la mayoría de los caracteres del mensaje puede escribirse con formato US ASCII de 7 bits. Prevé que los caracteres con códigos ASCII superiores a 127 se expresen mediante un mecanismo especial evitando, entre otras cosas, que las letras con tilde y algunos otros caracteres especiales se visualicen incorrectamente. Es la forma de codificación más recomendable para textos.

    – La codificación en base64 convierte cadenas binarias en cadenas de texto, con lo cual pueden ser enviadas de forma más segura. Es la forma de codificación habitual de las imágenes y los ficheros exe, zip, etcétera.
  • Content-Disposition

    – Se utiliza únicamente cuando se insertan ficheros adjuntos. Permite dos opciones: inline o attachment. La primera permite que los contenidos se visualicen junto con el cuerpo del mensaje mientras que bajo la segunda aparecerían como ficheros adjuntos.

    – Este elemento del encabezado lleva –separada por punto y coma– una segunda parte. El filename=, donde se puede especificar entre comillas un nombre y una extensión (igual o distinta de la original) con la que se denominará al fichero en el mensaje recibido.
  • Lectura del fichero

    Cuando se trata de insertar un fichero el proceso es el típico de lectura de ficheros, es decir:
    • – Hay que crear el identificador de recurso del fichero en modo lectura.
    • – Recoger en una variable el buffer de lectura.
    • – Cerrar el fichero.
  • Codificación

    Una vez recogido en el fichero a transmitir en una variable, el paso siguiente es codificar esa variable.Utilizaremos la codificación más habitual y flexible –base64– que requerirá el uso de las funciones base64_encode y chunk_split.
  • Cuerpo del mensaje
    La fase final del proceso es la de agrupar los diferentes trozos en una sola variable, que será la que se insertará como parámetro texto en la función e-mail.
  • Separador
  • .....
  • otra parte
  • ...
  • Separador final
  ¡Cuidado!  

La inserción de ficheros adjuntos requiere que éstos estén disponibles en el servidor por lo que, antes de enviarlos, habrá que subirlos al servidor utilizando un proceso como el que hemos analizado cuando hablábamos de Transferencia de ficheros.

Las cabeceras MIME de un mensaje
Aquí tienes un ejemplo con los diferentes elementos del encabezado de un mensaje. Como ves, hemos incluido todos los elementos dentro de la función mail.

mail("juan@mispruebas.as", "Cabeceras", "Prueba de cabeceras",
 "Date: 24 de Junio de 2001
MIME-Version: 1.0
From: Estudiante Perico
Cc:perico@mispruebas.as
Bcc:andres@mispruebas.as
Reply-To: perico@mispruebas.as
X-Mailer: PHP/".phpversion());
?>

Una forma un poco más depurada del script anterior podría ser esta que incluimos aquí debajo. Sus particularidades son las siguientes:
  • – Recogemos los datos en variables e insertamos en la función mail esas variables
  • – La variable $cabecera tiene algunas singularidades:
    • – La vamos construyendo añadiendo subcadenas: date, from, etc. etc.
    • – En cada subcadena dejamos pegado el contenido a las comillas iniciales
    • – Al final de cada subcadena (cada una contiene un elemento del encabezado) insertamos \n para el carácter especial que indica a PHP un salto de línea imprescindible

# datos del mensaje
$destinatario="juan@mispruebas.as";
$titulo="Cabeceras en variables";
$mensaje="Nueva prueba de cabeceras";
$responder="andres@mispruebas.as";
$remite="andres@mispruebas.as";
$remitente="Otra vez Andres"; //sin tilde para evitar errores de servidor
# cabeceras
$cabecera ="Date: ".date("l j F Y, G:i")."\n"; 
$cabecera .="MIME-Version: 1.0\n"; 
$cabecera .="From: ".$remitente."<".$remite.">\n";
$cabecera .="Return-path: ". $remite."\n";
$cabecera .="X-Mailer: PHP/". phpversion()."\n";

if( mail($destinatario, $titulo, $mensaje,$cabecera)){
   echo "mensaje enviado";}else{print "el mensaje no ha podido enviarse";
}  
?>

Mensaje con contenido alternativo

# creamos la variables "salto" para "mayor comodidad
# un salto es la secuencia retorno de carro-nueva línea
# dos saltos es algo similar pero duplicado

$UN_SALTO="\r\n";
$DOS_SALTOS="\r\n\r\n";

# creamos el remitente, etc. y también la que parte que
# contiene el código HTML del mensaje

$destinatario="juan@mispruebas.as";
$titulo="Mensaje alternativo Texto Plano - HTML ";
$mensaje="";
$mensaje .="Prueba HTML. ";
$mensaje .="aquí pueden ir tildes: á, é, í, ó, ú, ñ";
$responder="andres@mispruebas.as";
$remite="andres@mispruebas.as";
$remitente="Andres Perez y Perez";
// omitimos las tildes en encabezados para evitar errores de servidor

# creamos el separador de bloques del mensaje
# anteponiento "_separador" aunque podríamos haber puesto "tiburcio"
# generamos un identificador unico utilizando un numero aleatorio
# como "semilla" y luego lo codificamos con la función md5

$separador ="_separador".md5 (uniqid (rand())); 

# creamos la variable cabecera con los elementos
# ya utilizados en los ejemplos anteriores y ponemos al final
# de cada elemento UN SALTO DE LINEA

$cabecera = "Date: ".date("l j F Y, G:i").$UN_SALTO; 
$cabecera .="MIME-Version: 1.0\n"; 
$cabecera .="From: ".$remitente."<".$remite.">".$UN_SALTO;
$cabecera .= "Return-path: ". $remite.$UN_SALTO;
$cabecera .="Cc:perico@mispruebas.as".$UN_SALTO;
$cabecera .="Reply-To: ".$remite.$UN_SALTO;
$cabecera .="X-Mailer: PHP/". phpversion().$UN_SALTO;

# AQUÍ DEFINIMOS EL CONTENIDO MULTIPART, fíjate que lo acabamos con ";"

$cabecera .="Content-Type: multipart/alternative;".$UN_SALTO; 

# insertamos BOUNDARY (fíjate que dejo un espacio
# en BLANCO DELANTE y ponemos al FINAL los DOS SALTOS DE LINEA

$cabecera .=" boundary=$separador".$DOS_SALTOS;

# colocamos el primer separador(con los dos guiones delante)
# antes de insertar la primera parte del mensaje
# que es el texto plano para el caso de que el cliente de correo
# no soporte HTML

$texto_plano ="--$separador".$UN_SALTO; 

# especificamos el tipo de contenido y la codificación
# e inserto DOS SALTOS AL FINAL ya que ahi acaba la cabecera de esta parte
$texto_plano .="Content-Type:text/plain; charset=\"ISO-8859-1\"".$UN_SALTO; 
$texto_plano .="Content-Transfer-Encoding: 7bit".$DOS_SALTOS; 

# cambiamos las etiquetas "
" por saltos de línea
# y luego quitamos todas las etiquetas HTML del cuerpo del mensaje
# ya que el texto plano no debe llevar ese tipo de etiquetas

 $extractor= strip_tags(preg_replace("/
/", $UN_SALTO, $mensaje)); 

 $texto_plano .=$extractor;

# insertamos un nuevo separador para señalar el final
# de la primera parte del mensaje y el comienzo de la segunda
# en este caso ponemos UN SALTO delante del separador ya que de lo contrario
# al componer el mensaje se uniría con la cadena texto_plano anterior
# que no tiene SALTO DE LINEA AL FINAL

$texto_html =$UN_SALTO."--$separador".$UN_SALTO;

 # especificamos el encabezado HTML para el siguiente bloque
 # y ponemos en la ultima línea los DOS SALTOS DE LINEA

$texto_html .="Content-Type:text/html; charset=\"ISO-8859-1\"".$UN_SALTO; 
$texto_html .="Content-Transfer-Encoding: 7bit".$DOS_SALTOS; 
#añado la cadena que contiene el mensaje
 $texto_html .= $mensaje; 

# insertamos  SOLAMENTE un SALTO DE LINEA 
 # estamos al funal del mensaje

 $texto_html .=$UN_SALTO; 

 # unimos ambas cadenas para crear el cuerpo del mensaje

  $mensaje=$texto_plano.$texto_html;
 
 # enviamos el mensaje utilizando 

  
if( mail($destinatario, $titulo, $mensaje,$cabecera)){
 echo "mensaje enviado ";}else{print "ha habido errores en el envio";
}

?>

Mensaje con ficheros adjuntos

# definimos estas variables igual que en el ejemplo anterior

$UN_SALTO="\r\n";
$DOS_SALTOS="\r\n\r\n";

#incluimos en varias, asunto, un texto en HTML
# remitente, etc. etc.

$destinatario="perico@mispruebas.as";
$titulo="Mensaje con dos fichero adjuntos";
$mensaje="";
$mensaje .="Prueba HTML ";
$mensaje .="";
$responder="andres@mispruebas.as";
$remite="andres@mispruebas.as";
$remitente="Andres otra vez";

# definimos el separador de parte 
# con el mismo procedimiento del ejemplo anterior

$separador = "_separador_de_trozos_".md5 (uniqid (rand())); 

# insertamos los datos de la cabecera del mensaje
  
$cabecera = "Date: ".date("l j F Y, G:i").$UN_SALTO; 
$cabecera .= "MIME-Version: 1.0".$UN_SALTO; 
$cabecera .= "From: ".$remitente."<".$remite.">".$UN_SALTO;
$cabecera .= "Return-path: ". $remite.$UN_SALTO;
$cabecera .= "Reply-To: ".$remite.$UN_SALTO;
$cabecera .="X-Mailer: PHP/". phpversion().$UN_SALTO;

# especificamos el tipo de contenido mutipart/mixed
# ya que ahora insertaremos ficheros de distinto tipo

$cabecera .= "Content-Type: multipart/mixed;".$UN_SALTO; 

# insertamos el valor de boundary haciéndola igual a  $separador
# y acabamos con DOS SALTOS porque es el FINAL DE LA CABECERA

$cabecera .= " boundary=$separador".$DOS_SALTOS; 

/* Parte primera del envio -Mensaje en formato HTML
   ================================================

Separador inicial
------------------------------- */
$texto ="--$separador".$UN_SALTO;

/* Encabezado parcial
   ------------------  */
/* especificamos que este primer elemento
será texto y que irá codificado en formato 7 bits */

$texto .="Content-Type: text/html; charset=\"ISO-8859-1\"".$UN_SALTO; 
$texto .="Content-Transfer-Encoding: 7bit".$DOS_SALTOS; 

/* Contenido de esta parte del mensaje
   -----------------------------------*/
# ya teniamos escrito el texto del mensaje más arriba
# simplemente lo añadimos a la cadena de texto

  $texto .= $mensaje;

  #la variable $texto recoge esta parte del documento
  # la uniremos al final con las siguientes
 
/*  Separador de partes
    -------------------- */

$adj1 = $UN_SALTO."--$separador".$UN_SALTO; 

/* Parte segunda de mensaje -Fichero adjunto nº 1
   ==================================================== */

/* Encabezado parcial
   ------------------  */
# especificamos el tipo de contenido image/jpeg
# ya que ese será el documento que vamos a enviar
# ponemos el nombre del fichero (debemos tenerlo en el servidor
# con ese mismo nombre)
# establecemos in line como disposición para que pueda ser visualizado
# directamente en el cuerpo del mensajes
# en filename le asignamos el nombre con el que queremos que sea
# recibido por el destinatario
# por ultimo especificamos la codificacion como base64

$adj1 .="Content-Type: image/jpeg;";
$adj1 .=" name=\"casa08.jpg\"".$UN_SALTO;  
$adj1 .="Content-Disposition: inline; ";
$adj1 .="filename=\"leoncio.jpg\"".$UN_SALTO;
$adj1 .="Content-Transfer-Encoding: base64".$DOS_SALTOS; 

/* Lectura previa del fichero a adjuntar
   ------------------------------------------  */
    # abrimos el fichero en modo lectura (r)
   # y leemos todo su contenido midiendo previamente
   # su longitud con filesize
   # recogemos en $buff el contenido del fichero
   # y cerramos después

      $fp = fopen("casa08.jpg", "r"); 
           $buff = fread($fp, filesize("casa08.jpg")); 
       fclose($fp); 

/* Codificación del fichero a adjuntar
   ------------------------------------------  */
# codificamos en base 64 y troceamos en lineas de 76 caracteres
# y añadimos el resultado a la variable adj1

$adj1 .=chunk_split(base64_encode($buff)); 

/*  Separador de partes
    -------------------- */

$adj2 = $UN_SALTO."--$separador".$UN_SALTO; 

/* Tercera parte de mensaje -Fichero adjunto nº 2
   ==================================================== */

/* Encabezado parcial
   ------------------  */
# los contenidos del encabezado son similares al caso anterior
# con la salvedad de que el contenido es ahora
# application/octet-stream ya que contiene un fichero ejecutable
# y la disposicion es attachment, no tiene sentido tratar
# de visualizar un fichero zip

$adj2 .="Content-Type: application/octet-stream;";
              $adj2 .=" name=\"apachito.zip\"".$UN_SALTO; 
$adj2 .="Content-Disposition: attachment;
               filename=\"apachito.zip\"".$UN_SALTO;
$adj2 .="Content-Transfer-Encoding: base64".$DOS_SALTOS; 

/* Lectura previa del fichero a adjuntar
   ------------------------------------------  */
   # abrimos el fichero en modo lectura (r)
   # y leemos todo su contenido midiendo previamente
   # su longitud con filesize
   # recogemos en $buff el contenido del fichero
   # y cerramos después

      $fp = fopen("apachito.zip", "r"); 
         $buff = fread($fp, filesize("apachito.zip")); 
      fclose($fp); 

/* Codificación del fichero a adjuntar
   ------------------------------------------  */

$adj2 .=chunk_split(base64_encode($buff)); 

/*  Separador final YA NO HAY MAS PARTES
    ---------------------------------------- */

$adj2 .=$UN_SALTO."--$separador".$UN_SALTO; 

/*  Unión de todas las PARTES
    ---------------------------------------- */
# unimos en la variable mensaje todos los elementos
# y lo hacemos por el orden en el que fueron creados

  $mensaje=$texto.$adj1.$adj2;

/*  Envio del mensaje
    ---------------------------------------- */
  
if(mail($destinatario, $titulo, $mensaje,$cabecera)){
 echo "mensaje enviado";}else{print "ha habido problemas";

miércoles, 9 de enero de 2013

Permisos usuarios o roles en WordPress



Cuando queremos dar permisos a personas para que contribuyan en nuestro blog de WP tenemos la posibilidad de enmarcarlos dentro de 5 categorías o ROLES (Administrador, Editor, Autor, Colaborador, Seguidor).

Administrador.
Un administrador tiene acceso total al blog, puede hacer  y deshacer  todo, desde editar, cambiar  presentación, etc. Este rol implica poder absoluto sobre el blog, puede incluso borrar el  blog. Por lo que es aconsejable que sólo exista un solo administrador.

 Editor.
Un editor puede ver, editar, publicar y borrar los mensajes de las páginas, comentarios moderados, administrar las categorías, gestionar etiquetas, gestionar enlaces y subir archivos e imágenes.



Autor.
Un autor puede editar, publicar y borrar sus mensajes, así como subir archivos e  imágenes, pero sólo los propios, los que él haya creado.

Colaborador.
Un colaborador puede editar sus mensajes, pero no puede publicarlos. Cuando el colaborador crea un mensaje este tendrá que ser revisado por un administrador para su aprobación y publicación, a partir de ese momento ya no puede ser editado por el colaborador.
Un colaborador no tiene la capacidad de subir archivos e imágenes.

Seguidor.
Es aquel que se ha inscrito para poder recibir actualizaciones cada vez que se publique algo en el blog. No tienen ningún privilegio. 

Si tu blog es público, cualquiera puede seguirlo, pero es posible que desee enviar invitaciones a personas específicas a las que les gustaría seguirlo.

viernes, 21 de diciembre de 2012

Resetear Cartucho de tinta Canon PG-540 y PG-540XL

Cuando el cartucho PG-540 (8 ml) ó PG-540XL (21 ml) está vacío, la siguiente advertencia de nivel de llenado aparece en la pantalla de su equipo: "El cartucho de tinta está vacío siguiente: Negro (PG-540)". Este mensaje aparece incluso después de rellenar el cartucho, ya que la impresora recuerda el último estado, vacío del cartucho. El indicador de nivel de llenado le pide que cambiar el cartucho, entonces debe pulsar el botón "Stop / Reset" durante 5 segundos. Si usted está usando un recargado Canon PG-540, pulse el botón "Stop / Reset" durante 5 segundos.
 A continuación, puede seguir imprimiendo sin el indicador de nivel de llenado (haciendo caso omiso de la indicación de cartucho vacio). Tenga cuidado con las rayas en las impresiones que indican un nivel bajo de tinta y vuelva a llenar el cartucho antes de que se seque (será su indicador real cuando se hace un reset de cartucho).

(6) Botón Parar (Stop) Cancela una operación cuando hay un trabajo de impresión, copia, escaneado o transmisión/recepción de fax en curso.

Las características del cartucho Canon PG-540:

La impresora tiene una memoria interna. Esta memoria puede recordar el número de serie del PG-540. Por lo tanto, el cartucho rellenado todavía puede reconocerse como vacío. La memoria suele almacena los últimos 4 cartuchos. Si inserta cuatro cartuchos diferentes y luego el rellenado, la impresora debe reconocer y aceptar como un cartucho nuevo.

martes, 27 de noviembre de 2012

Quitar comentarios en WordPress

En este videotutorial se os explica como hacer para quitar los comentarios de vuestras páginas de Wordpress.

sábado, 15 de septiembre de 2012

Cómo saber si nos roban el WiFi (y cómo evitarlo)

Dicen algunos que es triste pedir, pero más lo es robar. Lo cierto es que con el WiFi a veces ocurre lo contrario. Hay quién piensa que resulta más sencillo robar un poco del WiFi al vecino que ir hasta su puerta y pedírselo. ¿Como podemos saber entonces si hay algún intruso en nuestra red? Os vamos a explicar cómo detectarlo y también cómo evitarlo en el futuro.
No sabemos quién podría colarse en nuestro WiFi. Foto cortesía de sunface13
Según una encuesta, el 99% de los usuarios de smartphone alguna vez ha buscado puntos WiFi gratuitos en la calle. Y según otro estudio, uno de cada dos británicos se conecta al WiFi de alguien sin su permiso (y uno de cada tres piensa que no hay nada de malo de ello). Con todo esto, no sería raro que alguien se haya colado en nuestra red, sobre todo si la tenemos proco protegida.
La mayoría de usuarios alguna vez ha buscado a un WiFi gratuito. Fuente: DeviceScape
La mayoría de usuarios alguna vez ha buscado a un WiFi gratuito. Fuente: DeviceScape

DESCUBRIR AL INTRUSO

Si desde hace un tiempo notamos que nuestra conexión de Internet se vuelve más lenta a ciertas horas concretas del día, es un primer indicio de que alguien puede estar utilizando nuestra conexión sin permiso. Puede que esa persona, por ejemplo, tenga el hábito de descargar cada noche un capítulo de su serie favorita con nuestro WiFi, justo cuando notamos que se ralentiza conexión. Si además vemos que la luz del router destinada al WiFi (a veces se indica como WLAN) continúa parpadeando tras apagar completamente todos los dispositivos inalámbricos de casa, podemos sospechar que algo ocurre.
Una manera sencilla y rápida para descubrir si realmente alguien se ha colado en nuestro WiFi es instalar en nuestro ordenador o teléfono inteligente un programa que nos indique los dispositivos conectados a la red de casa. Pueden encontrarse aplicaciones gratuitas para smartphone, tanto para Android (Fing, Network Discovery, Net Scan) como para teléfonos iPhone (Fing, IP Network Scanner, iNet). Y también para ordenadores de sobremesa: aplicaciones multiplataforma (Angry IP Scanner, Wireshark) o métodos específicos para Microsoft Windows (Wireless Network Watcher, Microsoft Network Monitor), Mac y Linux.
Los aplicaciones Fing (para iPhone y Android) y Wireless Network Watcher (Windows)
Los aplicaciones Fing (para iPhone y Android) y Wireless Network Watcher (Windows)
Con estos programas podremos pillar al intruso con las manos en la masa. Si contamos los dispositivos y hay más de los que en ese momento sabemos que están conectados al WiFi, es muy probable que alguien esté usando nuestra conexión sin permiso. Si desactivamos todos nuestros aparatos inalámbricos, no debería aparecer ninguno en la lista.
En la aplicación, cada dispositivo aparece identificado con una dirección IP (que normalmente le asigna el router al aparato) y una MAC (que la asigna el fabricante y difícilmente puede cambiarse). También a veces con un nombre, que probablemente nosotros hemos elegido en un proceso de instalación o registo. De esta manera podemos saber con certeza quién es quién. Luego explicaremos cómo identificar estas direcciones IP y MAC, en el caso de que no lo sepamos.

EL REGISTRO DEL ROUTER

Con estos programas sólo podremos detectar al intruso si está conectado en el mismo momento en el que miramos. En caso contrario, no aparecerá. Para saber si alguien se ha conectado antes, debemos acceder al lugar del crimen: el router. A él podremos entrar a través de una página web, escribiendo la dirección del aparato en el navegador. En alguno de los apartados de la web del router habrá un registro en el que podemos ver las conexiones que se han realizado hasta ese momento.
Para poder conectarse al router, primero hay que conocer su dirección. Debe ser algo parecido a 192.168.1.1. Podemos encontrarla en el manual o preguntar por ella a nuestro operador (en el caso de que é nos haya dado el router).
Otra manera de conocer la dirección del router es a través de un dispositivo que esté conectado a él (por WiFi o cable). En Windows hay que ir Inicio, luego Ejecutar, escribir cmd y aceptar. Luego escribimos ipconfig/all en la ventana que nos aparece y el número al lado de puerta de enlace predeterminada será muy probablemente la dirección IP del router WiFi. También podemos conocerla en Mac, Linux, iPhone y Android. En este momento seguramente también nos toparemos con la direcciones IP y MAC (también conocida ésta como dirección física, dirección de hardware o dirección Wi-Fi del dispositivo), que utilizaremos más adelante.
Una vez conocemos la dirección del router, la escribimos en la barra de direcciones del navegador. Si es correcta, aparecerá la web del router y nos pedirá un nombre de usuario y/o contraseña. Si no la hemos cambiado, nuevamente el manual o nuestro operador nos la podrán decir. También hay páginas que recopilan contraseñas. Y si no, una búsqueda en Internet con el modelo del router seguramente nos dará la respuesta.
Página de configuración de un router D-Link
Página de configuración de un router D-Link
Una vez hemos entrado en el router, estaremos en posición de recoger la prueba definitiva y expulsar al vecino de nuestro WiFi. Buceando por los diferentes apartados, encontraremos el registro del router (también llamado log) donde probablemente veremos las direcciones IP o MAC de los dispositivos que se han conectado últimamente. Seguramente también encontraremos en otro apartado la lista de dispositivos conectados en ese momento mediante DHCP (los que reciben automáticamente los parámetros de configuración). La IP de nuestros aparatos a veces cambian (si así lo tenemos configurado con DHCP, lo más habitual), por lo que será más fácil identificar un intruso por su dirección MAC, que siempre es la misma para cada aparato (aquí os explican cómo averiguarla en Android y iPhone; en Windows y Mac os debería haber aparecido antes).

PROTEGER NUESTRO WI-FI

Si alguien ha estado utilizando nuestra conexión, es porque muy probablemente no está bien asegurada. O quizás todavía nadie se ha colado, pero podría ocurrir en el futuro si no tenemos un buen nivel de seguridad. Desde la página del router podemos hacer todos los cambios necesarios para que no vuelva ocurrir. Si estamos algo perdidos, el manual del aparato o el servicio técnico del operador nos ayudarán.
Os damos a continuación algunas recomendaciones de configuración para que vuestro WiFi sea más seguro. Obviamente, cuántas más se apliquen, más segura será la red.  Pero sólo con seguir algunas de ellas ya será impenetrable para la mayoría de vecinos y curiosos.
  • Asegurarse de que tener una contraseña segura. El WiFi debe exigir una contraseña para conectarse que, a ser posible, sea larga y combine mayúsculas, minúsculas y números. Es recomendable que el cifrado sea de tipo WPA o WPA2. Las contraseñas de tipo WEP son muy fáciles de descubrir. Y cambiar la contraseña de tanto en tanto no está de más.
  • Filtrar las conexiones por direcciones MAC. Como hemos dicho, la dirección MAC es como la firma del dispositivo inalámbrico, y el router puede identificarla. Podemos configuarlo para que sólo permita que se conecten ciertos aparatos con unas MAC concretas. Aunque esta firma también puede impostarse, es un obstáculo más.
  • Asignar las direcciones IP manualmente. Por defecto, no hace falta configurar nada en nuestro dispositivo para que se conecte a un WiFI,  ya que recibe automáticamente del router todos los parámetros necesarios. Para dificultar la entrada de intrusos, podemos desactivar esta asignación automática (llamada DHCP). En ese caso, cada dispositivo que se conecte al WiFi deberá configurarse individualmente según los parámetros establecidos en el router (Windows, Mac, Android, iPhone).
  • Hacer invisible nuestro WiFi o cambiar el nombre (el SSID). Normalmente un router WiFi informa de su presencia a todo el que se acerca. Además, ciertos nombres identifican el dispositivo con el operador que lo ha suministrado, lo que facilita que pueda conocerse la contraseña por defecto. Para evitar que esto ocurra, podemos ponerle a nuestra conexión otro nombre y además que no informe de su presencia cuando alguien busque redes inalámbrica. Para conectar uno de nuestros dispositivos habrá que introducir manualmente el nombre exacto.
Al proteger nuestro WiFi no sólo evitamos que alguien utilice nuestra conexión gratuitamente sino que también impedimos que pueda acceder a nuestra información personal (archivos compartidos, webs que visitamos, etc.).  Ésta última es seguramente la razón más importante para proteger la red. Y no hay que olvidar que comprometemos información personal no sólo cuando un intruso se cuela en nuestro WiFi sino también cuando nosotros somos los que nos conectamos a un WiFi público.

Info:http://blogcmt.com/2012/09/14/como-saber-si-nos-roban-el-wifi-y-como-evitarlo/

sábado, 1 de septiembre de 2012

Etiqueta META robots y archivo robots.txt.

Mediante las diferentes etiquetas META que podemos colocar en un sitio web disponemos de una variedad amplia de metainformaciones para comunicar a cualquier sistema que lea nuestra página web.
Nota: Conviene recordar que también se puede definir el comportamiento de los robots de búsqueda con nuestro sitio, a la hora por ejemplo de permitir o no indexar las distintas páginas, mediante el archivo robots.txt.
Ahora veamos cómo se define esta etiqueta META de robots.

Como se puede ver, se define el etiqueta META y se acompaña de dos atributos esenciales:
Name: que para la etiqueta META que controla los comportamientos en motores de indexación el valor es "robots".
Content: se indica las directivas que queremos que apliquen los motores de indexación cuando visitan la página.

Valores posibles de la etiqueta META ROBOTS

En el atributo Content de la etiqueta meta debemos colocar las directrices que deseemos para buscadores, tantas como deseemos, separadas por comas. Las distintas directrices a aplicar son las siguientes: INDEX / NOINDEX
Sirve para indicar si se desea o no permitir la indexación de la página por los motores de búsqueda.
FOLLOW / NOFOLLOW
Con esta directriz se indica si se debe o no permitir a los motores de búsqueda recorrer o seguir recorriendo la web a través de los enlaces que encuentre en el cuerpo del documento.
ARCHIVE / NOARCHIVE
Esto permite decir si deseamos o no que el motor de búsqueda archive el contenido del sitio web en su caché interna. Como habremos podido ver, buscadores como Google tienen una caché y podemos ver las páginas web tal como las tiene cacheadas el buscador. Para ello, en los resultados de las búsquedas aparece un enlace que pone caché. Si decimos que no archive la página, no debería mostrar ese enlace de caché. Esto en realidad, según Google, no evita que se guarde en caché la página, sino que no permite verla a los usuarios del buscador y por lo tanto no muestra el enlace.
SNIPPET / NOSNIPPET
Esta directriz en principio no resulta muy útil, al menos a primera vista. Sirve para que el motor de búsqueda no muestre ninguna descripción de un sitio, sólo su título. Si utilizas NOSNIPPET automáticamente defines un NOARCHIVE, por lo que la página tampoco se mostrará en caché.
ODP / NOODP
Sirve para decirle al buscador que debe, o no, mostrar el título y descripción de la página iguales a los que se encuentra en el Open Directory Project. En algunos casos, algunos buscadores muestran como título y descripción de una web los que se han publicado en el ODP (ENLACE A http://www.dmoz.org/).
YDIR / NOYDIR
Es básicamente lo mismo que ODP / NOODP, con la diferencia que es para que no se pueda, o si, mostrar la descripción y título que aparece en el directorio de Yahoo.
Cuando no existe esta etiqueta los buscadores interpretan las condiciones más favorables para ellos, es decir, que pueden hacer todo lo que suelen hacer con otras páginas a la nuestra, como indexarla, seguir sus enlaces, archivarla, etc.

Ejemplos de etiquetas META ROBOTS

A la hora de utilizar la META ROBOTS básicamente lo que podemos hacer es restringir las posibilidades de los motores de búsqueda, puesto que las posibilidades por defecto son las menos restrictivas. Esto quiere decir que una etiqueta como la siguiente es irrelevante, porque el buscador siempre va a indexar la página y seguir sus enlaces de manera predeterminada:

Podemos definir entonces casos más restrictivos como estos:

Para indicar que se desea que se indexe la página, pero no se sigan los enlaces. Dada que la opción INDEX es la que se sobreentiende por defecto, esta etiqueta tendría el mismo valor que la siguiente:

Para indicar que no queremos que se sigan los enlaces de la página.

Para indicar que no queremos que se indexe la página ni se sigan los enlaces que pueda contener.

Lo único que indicamos es que no se muestre el enlace para ver la página en la caché del buscador.

Con esta restrictiva etiqueta forzamos para que no se indexe la página, no se sigan los enlaces, no se muestre el link de caché, no se muestre el título y descipción del Open Directory Project y sólo se muestre el título de la página en los resultados de las búsquedas.

Archivo robots.txt

Un robot es un programa más o menos complicado que se dedica a rastrear nuestras páginas web y guardar su contenido en una base de datos y seguir los enlaces que tengamos a otras páginas web. Esto nos beneficia pero también nos puede perjudicar, ya que a veces no nos conviene que se indexen ciertas páginas de nuestras webs.

Actualmente los robots actúan de tal forma que lo primero que hacen es buscar en la raíz de nuestra página si tenemos un archivo llamado robots.txt, si lo encuentra lo lee y sigue las directrices que en él se encuentran, si no lo encuentra empieza a rastrear toda la web.

Por este tema es importante crear bien este archivo y pensar que páginas queremos que sean rastreadas y cuáles no, ya que las que no sean rastreadas no serán indexadas en los navegadores.

Crear el archivo robots.txt
Este archivo es muy fácil de construir tan solo tienes que saber ciertas pautas y podrás hacerlo sin problema.

robots.txt puede construirse para que se aplique solo a los robots de determinados buscadores.

Pasamos a escribir un ejemplo para ir explicando las posibilidades:

User-agent: * # aplicable a todos los robots
Disallow: / # impide la indexacion de todas las paginas

En este ejemplo los robots no podrían indexar ninguna pagina del dominio.
User-agent lo que nos dice es a que robots se les aplica las características que le siguen debajo. Si usamos el * estamos diciendo que esas reglas son aplicables para todos los robots. Pero también podemos hacerlo para determinados robots, como ves en el siguiente ejemplo:

User-agent: lycra
User-agent: BadBot
Disallow: /

En este ejemplo los robots lucra y BadBot tendría prohibida la indexación de cualquier pagina del dominio.

El disallow nos dice los archivos o carpetas que queremos que no sean indexadas. De esta forma podríamos hacer un archivo como este:

User-agent: *
Disallow: /tmp/prueba.html
Disallow: /logs

Este ejemplo lo que haría sería prohibir la indexación de la carpeta logs y el archive prueba.html a todos los robots.

Con esto ya podríamos realizar un archivo robots.txt perfectamente válido, pero también existen términos para determinar en qué horas queremos que esos robots rastreen nuestras páginas. La forma de construirlo es la siguiente:

Visit-time: 0300-0400 #esta opción obligaría a rastrear las paginas solo de 3 am a 4 am

Recuerda que las horas siempre se colocan en Greenwitch

Por otro lado podemos decirle que indexe una página o varias cada equis tiempo, para ello se utiliza la siguiente sintaxis:

Request-rate: 1/30

Siendo el 1 el número de documentos a rastrear y el 30 el tiempo que transcurre entre un rastreo y el siguiente.

Es importante saber que no puedes dejar líneas en blanco ya que no funcionaria, el robots dejaría de leer en el momento que encuentra la línea en blanco.

Otro aspecto que no he comentado antes pero que habréis notado es que los comentarios ser realizan utilizando la #.

Un ejemplo completo seria el siguiente:

User-agent: *
Disallow: /tmp/prueba.html
Disallow: /logs
Visit-time: 0300-0400

Esto permitirá a todos los robots rastrear todas las paginas menos prueba.html y la carpeta logs, además solo podrían indexar de 3 de la mañana a 4.
 
 Info:http://www.desarrolloweb.com/articulos/robots-txt.html
 Info:http://www.desarrolloweb.com/articulos/etiqueta-meta-robots.html

miércoles, 15 de agosto de 2012

Cómo un profesor creó un aula informática con presupuesto cero

Info:http://ubuntu-españa.org/content/c%C3%B3mo-un-profesor-cre%C3%B3-un-aula-inform%C3%A1tica-con-presupuesto-cero

En una soleada clase de la Bay Area (San Francisco), veintiséis estudiantes trabajan en sus ordenadores. Están haciendo sitios web (páginas en MySpace con imágenes de la historia de América). Un estudiante está consultando los cinco mayores logros de Frederick Douglass. Otro le muestra a un compañero cómo buscar imágenes de Susan B. Anthony. Todos están aprendiendo como usar Google Sites, ayudándose unos a otros. A principios de esta semana, esta clase aprendió como añadir números en una hoja de cálculo. La semana pasada como hacer música con un sintetizador sencillo. La gente frecuentemente asume que tener tecnología en las aulas es caro, pero este laboratorio no ha costado nada.

¿El problema? Una escuela sin presupuesto necesita ordenadores para el aula. ¿Presupuesto? $0. ¿Profesores involucrados? Solamente uno: Robert Litt, un profesor de sexto.

Robert enseña en ASCEND, una pequeña escuela en el distrito de Alameda. Es un fanático de la tecnología y considera que es una parte importante de la educación. Hasta ahora ASCEND no tenía aula de informática ni ordenadores en las aulas. En 2007, Robert consiguió 18 ordenadores donados, pero estos equipos resultaron menos interesantes de lo previsto. El sistema operativo era lento, algunos equipos tenían virus y malware y los estudiantes terminaron frustrados con su uso.

Muchos de los problemas de los ordenadores se podrían arreglar limpiando el disco y reinstalando el sistema operativo, pero comprar programas nuevos para cada ordenador donado sería prohibitivo. Robert comenzó a buscar opciones más realistas. Un conocido del Alameda County Computer Recyclers le sugiere el uso de un sistema operativo libre como GNU/Linux. No habiéndose aventurado nunca en el mundo del código abierto, Robert busca ayuda en internet. Se encontró con un grupo local de usuarios de Linux, un grupo de amigos, de personas dedicadas a ayudar a los demás a empezar a trabajar con software libre.

Con la ayuda de su grupo de usuarios de Linux local, consiguió instalar y hacer funcionar Linux en sus 18 máquinas donadas. De repente, eran rápidos. Estaban limpios. Trabajaban bien en el aula. Robert se sintió reforzado así como sus alumnos. Su jefe vio lo emocionados que estaban todos, y decidió dar a Robert cuatro horas de permiso por semana para darle tiempo para encontrar más ordenadores para un laboratorio completo para ASCEND. Y así Robert se convirtió en un "maestro en misión especial", como él mismo dice.

Encontrar ordenadores fue más sencillo de lo esperado. Muchas familias y negocios tienen un antiguo ordenador (o diez) almacenado. Robert empezó a llamar a las empresas y a pedir donaciones de equipos que de otra manera se habrían enviado al reciclaje. La gente fue bastante receptiva. La mayoría de la gente prefiere que se usen sus ordenadores para bien a que se pudran en un vertedero o que terminen destrozados, lo que ocurre es que no suelen saber cómo hacer llegar los ordenadores allí donde se necesitan. "Las escuelas con escasos fondos están muriendo de hambre en medio de la abundancia". "Los ordenadores desechados en nuestro país, son los recursos más desperdiciados del sistema educativo", explica Robert.

De hecho, como las donaciones eran bastante fáciles de conseguir, Robert comenzó a rechazar equipos que tuvieran menos de 512 megabytes de RAM o se fabricaran antes de 2002. No los ordenadores que la gente decía que estaban "rotos". Se dió cuenta de que "Los ordenadores que muchos dicen que están rotos, lo que tienen son en realidad problemas de software". Cuando instaló Linux, muchos de los equipos supuestamente rotos funcionaron bien.

Seis meses después, Robert tenía su primer laboratorio ASCEND completo,  compuesto por ordenadores donados que corrían software libre. Pero no todo estaba hecho. Las donaciones siguieron llegando y pronto contactó con una asociación sin ánimo de lucro denominada Partimus, dedicada a "proporcionar ordenadores y soporte sobre software libre" a las escuelas en Bay Area. Partimus ayudó a Robert a configurar un servidor de instalación y de esta manera pudo instalar linux en múltiples máquinas a al vez.

Este año se han conseguido más de 70 ordenadores para ASCEND. Con una educación inadecuada en tecnología, pocos profesores podrían encargarse de crear un laboratorio completo sin financiación. Es una tarea de enormes proporciones, sin duda. Pero, afirma Robert, que está dentro de las capacidades de cada profesor. Él entró en el proyecto sin ningún tipo de conocimiento sobre reparación o manipulación de ordenadores. "Mi experiencia es ser un maestro de sexto grado", dice. "Yo soy autodidacta 100%". Utilizó los recursos gratuitos disponibles en línea y resolvió los problemas sobre la marcha.

Robert aboga por el software de código abierto incluso en escuelas en las que no falta la tecnología. El gobierno de los EE.UU. informa que la brecha digital se abre cada vez más, menos del 97% de las escuelas tienen un ordenador en el aula. Pero esto no es todo. Dice Robert "La brecha digital crece en una estadística oculta, la enseñanza de la tecnología de una manera significativa". Muestra a los estudiantes cómo hacer matemáticas en hojas de cálculo, cómo hacer páginas web sencillas, cómo armar presentaciones de diapositivas, todo sobre software libre. Estos son los conocimientos de informática que los estudiantes dicen que más tarde se espera que sepan. Y con la prevalencia de los ordenadores reciclados, ni el 3% de las aulas están sin ordenadores.

Robert se mueve hacia una nueva escuela que está al caer, donde espera seguir enseñando tecnología de una manera significativa y llama a otros profesores a hacer lo mismo: en un mundo digital, los profesores son responsables de hacer de sus estudiantes "mejores ciudadanos digitales".

Enlace a la fuente: ifixit.org.
Traducido por Francisco Molinero, pacoaldia.com