| Subcribe via RSS

Script PHP para extraer emails de uno o varios ficheros

Enero 31st, 2008 | No Comments » | Posted in php, programacion

Con este sencillo script podemos extraer todos los emails de cualquier fichero (en formato texto plano) cómodamente. En el array $ficheros_emails ponemos los nombres de los ficheros que contienen los emails que queremos extraer y $fichero_destino es el fichero donde los vamos a escribir.

El resultado se muestra en la pantalla (se muestran numerados los emails que se extraen de cada fichero) y se guarda en el fichero.

<?php
$ficheros_emails = array('/home/gorka/Escritorio/email1.txt', '/home/gorka/Escritorio/emails2.txt');
$fichero_destino = '/home/gorka/listado_emails.txt';
$fd = fopen($fichero_destino, "w");
$cuenta = 1;
foreach($ficheros_emails as $fichero_emails)
{
	$contenido_fichero = file_get_contents($fichero_emails);
	preg_match_all("([A-Za-z0-9_.-]+@[A-Za-z0-9_.-]+.[A-Za-z0-9_-]+)", $contenido_fichero, $resultado);
	echo "<br/><br/>Emails del fichero: $fichero_emails<br/>";
	foreach ($resultado[0] as $email)
	{
		echo "<br/>$cuenta.- $email";
		fwrite($fd, $email . "\n");
		$cuenta++;
	}
}
fclose($fd);
?>
Tags: , ,

Activar register_globals

Enero 28th, 2008 | No Comments » | Posted in apache, php

Vale, sí, es una locura hoy en día y una fuente inagotable de problemas en cuanto a seguridad se refiere. Sin embargo hay casos en los que en muy útil activar el register_globals. Precisamente hace unos días me encontré con un cliente que quería actualizar un software antiquísimo escrito en PHP que necesitaba tener activado el register_globals. Dado que no conocía el funcionamiento de su aplicación necesitaba tener activada la opción del register globals.

Dicho y hecho, edité el fichero .htaccess de la carpeta donde tenía instalada dicha aplicación y añadí la línea:

php_value register_globals 1

y listo.

Tags: , , ,

Función en PHP para comprobar si un email es válido

Enero 25th, 2008 | 4 Comments | Posted in php

Hoy he tenido que preparar una pequeña función en PHP para que compruebe si los emails son válidos. Está hecha usando expresiones regulares:

1
2
3
4
if (ereg("([A-Za-z0-9_.-]+@[A-Za-z0-9_.-]+\.[A-Za-z0-9_-]+)", $email, $resultado))
{
    echo $resultado[1];
}

Este sencillo script sólo admitirá emails que contengan letras y números, guiones y puntos, por ejemplo:

paco@email.com
paco.smith@email.com
paco.smith@mi.email.com
paco_smith@mi-email.com

y no admitirá emails con espacios o caracteres “extraños”.

Actualización: He corregido un pequeño un error en el patrón que hacía que aceptase emails con una barra invertida, como por ejemplo:

pa\co@email.com
Tags: , , ,

Primeros pasos con SVN (II)

Enero 23rd, 2008 | No Comments » | Posted in svn

En esta segunda entrega vamos a ver cómo usar un servidor SVN en MS Windows y cómo conectarse a él desde otra máquina.

En primer lugar debemos arrancar el servidor SVN:

svnserve -d -r c:\\svn

Ahora vamos a otra máquina e intentamos conectarnos al servidor SVN. Para eso creamos una carpeta de trabajo (por ejemplo c:\mis proyecto\base_gamma o, en Linux, /home/gorka/proyectos/base_gamma) y nos bajamos una copia del proyecto. Supongamos que el servidor tiene la IP 192.168.1.13 (esta tienes que sustituirla por la IP o el dominio de tu servidor):

svn co svn://192.168.1.13/base_gamma/trunk .

Se puede apreciar que la única diferencia entre trabajar con el servidor en el mismo PC o trabajar remotamente es que en lugar de conectarnos a:

file:///c:/svn/

nos conectamos usando:

svn://192.168.1.13/

Arrancar el servidor automáticamente

Para automatizar el arranque del servidor lo que he hecho ha sido crear un archivo ejecutable llamado arrancar.bat en la carpeta de repositorios (en este caso c:\svn) con el comando que hemos usado antes:

svnserve -d -r c:\\svn

y luego lo he llevado como acceso directo a Inicio->Programas->Inicio.

Existe también un servicio llamado SVNService que no he probado así que no puedo deciros cómo funciona, pero hay información en Google sobre el tema.

Usando contraseñas

Vamos a configurar el servidor de modo que se necesite una clave para poder acceder a él.

Comenzamos por editar el fichero svnserve.conf que está en el directorio conf de nuestro repositorio (en este caso c:\svn). Lo editamos y descomentamos las líneas (descomentar = quitar las # del principio de la línea):

password-db = userfile
realm = gamma

userfile es el fichero que contiene los datos de autentificación de los usuarios y realm es una etiqueta que definimos nosotros, en este caso gamma.

Si te fijas estas líneas están dentro de la sección [general] del fichero.

Guardamos el fichero, lo cerramos y abrimos userfile que está en el mismo directorio. Vamos a crear al usario ross y le vamos a crear como contraseña hulkmalo.:

[users]
ross = hulkmalo

Guardamos el fichero y lo cerramos.

Reiniciamos el servidor y ya debería funcionarnos correctamente.

Para conectarnos usamos:

svn co svn://192.168.1.13/base_gamma/trunk . ross hulkmalo

En la próxima entrega voy a hablar de algunos clientes de SVN como Tortoise SVN y RapidSVN.

Tags: , ,

Primeros pasos con SVN

Enero 20th, 2008 | No Comments » | Posted in svn

Hoy me ha tocado poner en marcha, Subversion, un software de control de versiones en un servidor con Windows XP. Aprovecho para escribir este artículo con instrucciones para los primeros pasos.

Primero de todo descargamos la última versión de subversion desde la web oficial de Tigris, en mi caso la versión para Windows XP.

Una vez descargado el software la instalación es muy sencilla (como cualquier programilla de windows xp).

Vamos a usar como ejemplo un proyecto que tenemos en un directorio llamado “c:\mis proyectos\base_gamma” (sí, es mi proyecto ultra-secreto para crear supersoldados pero no se lo digas a la Masa).

El siguiente paso es crear lo que se llama un repositorio (abre una consola con Inicio->Ejecutar->cmd) y teclea:

svnadmin create c:\\svn

Ahora creamos una carpeta temporal para nuestro proyecto, por ejemplo: c:\temp\proyectos\base_gamma.

mkdir c:\\temp\\proyectos\\base_gamma

Es recomendable crear en la carpeta temporal estas tres subcarpetas:

trunk
tags
branches

Los archivos de nuestro proyecto debemos copiarlos al directorio trunk. Más adelante veremos el por qué de esta organización.

NOTA: Si aún no hemos comenzado el proyecto la carpeta trunk estará vacía evidentemente.

Luego tenemos que hacer la primera impotación de los archivos que queremos controlar con SVN. Para eso primero que tenemos que hacer es entrar en la carpeta donde está nuestro proyecto, en el ejemplo:

cd c:\\temp\\proyectos

y hacemos el import:

svn import base_gamma file:///c:/svn/base_gamma -m "Importación inicial"

Ahora podemos ver cómo ha quedado nuestro repositorio:

svn list c:\\svn\\base_gamma

Esto nos mostrará:

trunk/
tags/
branches/

Ahora tenemos que traer desde el servidor SVN una copia para empezar a trabajar. Para eso vamos a la carpeta c:\proyectos\base_gamma y tecleamos:

svn co file:///c:/svn/base_gamma/trunk/ .

ahora ya podemos empezar a trabajar con los ficheros en c:\proyectos\base_gamma\trunk

Un día de trabajo con SVN

Lo primero que debemos hacer cuando vamos a trabajar en un proyecto compartido con SVN es actualizar la copia que tenemos en nuestro ordenador con el comando update.

svn update

y se nos mostará la lista de ficheros actualizados.

Una vez actualizada nuestra copia podemos editar un fichero, por ejemplo “radiacion.c” (es el fichero que controla la candidad de radiación que debe recibir un sujeto para adquirir superpoderes :-P ).

Además supongamos que también creamos el fichero “candidatos.c”. Tenemos que avisar al SNV de que existe este nuevo fichero:

svn add candidatos.c

Ojo, el fichero aún no ha sido enviado al repositorio. Sólo está marcado para enviar.

Una vez terminemos de trabajar tenemos que enviar los archivos modificados al repositorio con un commit:

svn commit -m "poner aquí cualquier comentario que de una idea de lo que hemos hecho"

Hasta ahora sólo hemos visto cómo trabajar en una misma máquina. En la próxima entrega explicaré cómo trabajar con un servidor-cliente. Mientras tanto podéis consultar el manual de SVN disponible gratuitamente en múltiples formatos.

Tags: ,

Backups con rsync

Enero 16th, 2008 | No Comments » | Posted in linux, privacidad-y-seguridad, ubuntu

Si queréis hacer copias de seguridad de manera sencilla una herramienta muy potente es rsync. Existen un montón de programas para hacer backups pero ninguno acaba de convencerme. Yo necesito que la copia de seguridad sea fácilmente accesible, es decir, que esté sin comprimir para poder acceder directamente a determinados archivos de manera cómoda sin tener que andar descomprimiendo archivos de varios megas (o gigas). Además, utlizo el disco externo de backup para llevar los arhivos de casa a la oficina y vice versa. Para mi caso la mejor herramienta que he encontrado hasta ahora es rsync. Uso un sencillo comando para hacer los backups:

rsync -avz --exclude-from=.rsync/exclude /home/gorka/. /media/discobackup

-avz: copia recursivamete todos los ficheros desde el directorio /home/gorka a /media/discobackup (mi disco duro externo). Además mantiene los permisos, enlaces simbólicos, propietarios, atributos, etc… La opción -z comprime los ficheros antes de transferirlos, pero, dado que uso un disco usb2 realmente no estoy seguro de que tenga utilidad (un día que me aburra mediré la diferencia entre hacer la copia de seguridad con esta opción o sin ella).

–exclude-from=.rsync/exclude: esta opción busca el fichero .rsync/exclude en el que está la información de qué ficheros no se deben copiar. En mi caso uso el siguiente:

*.iso
*.avi
*.mp3

para que no me copie ni los ficheros iso, avi ni mp3. Cada tipo de fichero que queramos excluir debe ir en una línea.

/home/gorka/. aquí indico que quiero copiar el contenido de la carpeta /home/gorka. Si uso el ‘.’ es para que me copie los ficheros ocultos que empiezan por el punto. Si no se quieren copiar los archivos ocultos hay que usar /home/gorka/*

/media/discobackup – mi flamante disco duro externo.

Ejecuto el script, me voy a comer y espero a que se haga la copia tranquilamente.

Algo más de información: rsync y rsync Tips & Tricks.

Tags: , , , ,

Problema con Firestarter – el interfaz eth0 no está preparado

Enero 16th, 2008 | 18 Comments | Posted in privacidad-y-seguridad, ubuntu

Recientemente me he encontrado con este problema y, después de darle muchas vueltas he encontrado el problema. La causa está en el script firestarter.sh. Abre el dichoso script:

gksudo gedit /etc/firestarter/firestarter.sh

y modifica la línea:

MASK=`/sbin/ifconfig $IF | grep Mas | cut -d : -f 4`

por:

MASK=`/sbin/ifconfig $IF | grep Más | cut -d : -f 4`

Explicación paso a paso

Por si a alguien le interesa saber cómo dí con el problema he aquí un pequeño e instructivo rollete.

El mensaje de error que me aparece al intentar arrarcar el firestarter es:

External network device $IF is not ready. Aborting..

ese mensaje de error se muestra aquí (en este caso $IF es eth0):

if [ "$MASK" = "" -a "$1" != "stop" ]; then
	echo "External network device $IF is not ready. Aborting.."
	exit 2
fi

comprobé que la variable $MASK estaba en blanco (era la razón de que no arrancara el firestarter) así que busqué dónde se definía:

MASK=`/sbin/ifconfig $IF | grep Más | cut -d : -f 4`

El comando /sbin/ifconfi eth0 muestra un mensaje parecido a éste:

eth0      Link encap:Ethernet  HWaddr 00:13:8F:4C:47:59
          inet dirección:192.168.1.2  Bcast:192.168.1.255  Máscara:255.255.255.0
          dirección inet6: fe80::213:8fff:fe4c:4759/64 Alcance:Vínculo
          ARRIBA BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:221627 errors:0 dropped:0 overruns:0 frame:0
          TX packets:226060 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:159080113 (151.7 MiB)  TX bytes:105193874 (100.3 MiB)
          Interrupción:23 Base address:0xe400

y el comando:

/sbin/ifconfig $IF | grep Mas | cut -d : -f 4

Lo que hace es buscar la línea donde esté el texto Mas (de Mask) y, claro, al estar mi Ubuntu en castellano en lugar de Mask poner Máscara:

eth0      Link encap:Ethernet  HWaddr 00:13:8F:4C:47:59
          inet dirección:192.168.1.2  Bcast:192.168.1.255  Máscara:255.255.255.0
          dirección inet6: fe80::213:8fff:fe4c:4759/64 Alcance:Vínculo
          ARRIBA BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:221627 errors:0 dropped:0 overruns:0 frame:0
          TX packets:226060 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:159080113 (151.7 MiB)  TX bytes:105193874 (100.3 MiB)
          Interrupción:23 Base address:0xe400

Como resultado de este pequeño detalle $MASK se queda en blanco. Por tanto, la solución consiste en modificar el script y dejarlo como:

MASK=`/sbin/ifconfig $IF | grep Más | cut -d : -f 4`
Tags: , , , ,