Documente Academic
Documente Profesional
Documente Cultură
ESTE MES
P
P 16 páginas
A
A extra!!!
S
S
O
O
P A S Oa
P A a
a
a
a
a
a
aa
a
a
a
a
a EN EL PROXIMO NUMERO: HACKEA WINDOWS EN 40 SEGUNDOS
NUMERO 16
PROGRAMACION DEL SISTEMA
COMUNICACION
ENTRE PROCESOS
DESTRIPANDO
OLO
TOCO
LOS PROTOC S
LOS
DE INTERNET
HACIENDO COPIAS DE
SEGURIDAD DE TUS
JUEGOS
ULTIMA ENTREGA
DEL CURSO
8 414090 202756
Otra más
se ha recibido muchas protestas por el mal 30 CURSO XML:DOM (III)
funcionamiento de los Servidores de Hack. Azimut ha
42 C ONCURSO DE SUSE LINUX 9.0
estado retocando los protocolos de reinstalación semanal
y esperamos que a partir de ahora se cumplan las 43 BA J ATE NUESTR OS L OGOS Y MEL ODIAS
reinstalaciones y los servidores se mantengan ON LINE. 43 G AN ADOR DEL C ONCURSO DE SUSE LINUX
No obstante, debemos tener en cuenta que los servidores
están para ser hackeados y que algunas personas los dejan 43 C OLAB ORA C ON NOSO TR OS
inoperativos cuando hacen sus prácticas. 4 4 XB O X (II): EV OL UTION X
Otra de las grandes peticiones es que escribamos artículos 55 SERIE RAW (10): USENET
de Hacking Básico. Bien, en nuestra opinión el Hacking 79 NUMER OS ATRAS ADOS
Básico no existe (o al menos no puede llamarse hacking);
pero no podemos ignorar las peticiones de nuestros lectores, 82 SUSCRIPCIONES
así que a partir del mes que viene habrá un artículo de
Hack-Básico para disfrute del personal. Empezaremos por
hackear cualquier sistema Windows NT/2000/XP en 40
segundos (o menos), algo que todo iniciado debería
saber y, sobretodo, algo que cualquier Administrador de
Sistemas debería conocer.
GRACIAS
GRACIAS
GRACIAS
GRACIAS
GRACIAS
GRACIAS
curso de php:
Aprende a manejar ficheros con PHP
Continuamos con el curso de PHP. En este 1. Abrir el fichero, para ello hay que
número aprenderemos a manejar tanto la especificar como se va a abrir.
lectura como la escritura. Continuaremos
mejorando el programa de generación de IP, 2. La acción sobre el fichero, (escribir o
en esta ocasión las IPs en vez de ser leer).
presentadas en pantalla serán guardadas en
un fichero para su posterior tratamiento. Y 3. Y por último, cerrar el fichero.
además aprenderemos a consultar datos de
manera remota. Abrir ficheros
El proceso a seguir para acceder a un fichero, No maneja redirecciones HTTP, por eso se debe
sea para consultar el contenido o para incluir una barra final cuando se trata de
modificarlo va asociado a 3 pasos: directorios.
if (fopen(c:\\windows\\php.ini,r)) {
Primer ejemplo:
Vamos a comenzar con un sencillo ejemplo.
Ejecuta el siguiente código, el cual abre el
fichero php.ini, situado en la ruta
c:\windows\php.ini, con operación de lectura
(valor: r). Resultado de abrir el fichero
php.ini con la función fopen()
<?
$fichero=c:\\windows\\phppp.ini;
// Introducimos un error en el nombre del fichero
fopen($fichero,r) or die (El fichero no se ha podido abrir.);
?>
<?
$fichero1=fopen($fichero1,r);
$fichero2=fopen($fichero2,r);
// Aquí colocamos código para tratar los archivos
//(leer, modificarlos, ...)
fclose ($fichero1); // cerramos el fichero1
fclose ($fichero2); // cerramos el fichero2
?>
<?
! Si en tu PC... $fichero="c:\\windows\\iis6.log"; //fichero en formato texto que se va a abrir
if ($fp=fopen($fichero,"r")) { // abre el fichero y crea un identificador
for ($cuenta=1;$cuenta<=10;$cuenta=$cuenta+1) {
Si en tu PC no tienes el fichero iis6.log en c:\windows\, $caracter=fgets($fp); // leemos una linea del archivo
pues créalo tu mismo con el Block de Notas (o cualquier print "Linea $cuenta del fichero: ".$caracter."<br>"; // muestra la linea del arhivo
otro editor de texto). }
} else {
print ("No se ha podido abrir el fichero");
Otra función para leer el contenido de un fichero }
es fgetc(). A diferencia de la función anterior ?>
esta lee carácter a carácter. Por ejemplo:
<?
$fichero="c:\\windows\\iis6.log"; //fichero en formato texto que se va a abrir.
if ($fp=fopen($fichero,"r")) { // abre el fichero y crea un identificador.
$caracter=fgets($fp,1); // lee carácter a carácter.
print $carácter;
} else {
print ("No se ha podido abrir el fichero");
}
?>
<?
$fichero="terra.html"; // página principal de Terra.
se encuentra delimitada por algún carácter en especial.
if ($fp=fopen($fichero,"r")) { // abre el fichero y crea un identificador.
$lineas=file($fp); Lo veremos mejor con un ejemplo, fíjate en la siguiente
// lineas es un array, en cada posición se encuentra una linea del fichero leído. línea:
for ($cuenta=0;$cuenta<count($lineas);$cuenta=$cuenta+1) {
print (Linea .($cuenta+1).:.$lineas[$cuenta].<br>; 1,tcp,tcpmux,TCP Port Service Multiplexer [rfc-1078]
// Mostramos el contenido del array.
}
Esta línea sería un registro dividido en 4 campos,
} else {
print ("No se ha podido abrir el fichero"); estando los campos divididos por comas. El delimitador
} en este caso son comas, pero podría ser cualquier
?> cosa, incluso espacios en blanco. Lo importante es
utilizar un identificador único, un identificador que no
En este pequeño programa hemos utilizado la
se encuentre en el contenido de cada uno de los
función count(), sirve para averiguar el número
campos.
de elementos de un array. Utilizando count()
podemos conocer el número de elementos de
Mismo ejemplo utilizando como delimitador el símbolo #
la variable $lineas y así poder mostrar cada
uno de estos. En el número anterior ya se
1#tcp#tcpmux#TCP Port Service Multiplexer [rfc-
explicó esta función.
1078]
Y por último la todopoderosa función fgetcsv(),
esta función es similar a fgets() excepto que
fgetcsv() analiza la línea buscando campos en
formato CSV y obtiene un array conteniendo El siguiente programa explica como funciona
los campos leídos. El delimitador de campo es la función fgetcscv(), pero no solo eso, ¿sabias
una coma, a menos que se especifique otro que con fopen() podemos conectarnos a un
delimitador con el tercer parámetro opcional. URL y leer su contenido como si de un fichero
se tratara?, increíble pero cierto.
fgetcsv ( identificador_fichero, longitu, delimitador);
<?
<? $fichero="c:\\windows\\iis6.log"; //fichero en formato texto que se va a abrir.
$fichero="http://www.neohapsis.com/neolabs/neo-ports/neo-ports.csv"; if (file_exists($fichero)) { // abre el fichero y crea un identificador.
$fp=fopen($fichero,"r"); Print (El fichero existe);
while ($data = fgetcsv ($fp,1000,",")) { }else {
print "Puerto:".$data[0]."     Tipo:".$data[1]. print (El fichero no existe);
"     Descripcion:".$data[3]."<br>"; }
} ?>
fclose ($fp);
?> Es recomendable siempre que se trabaje con
ficheros comprobar la existencia de estos para
evitar errores.
Escritura en un fichero
Este programa crea un fichero si no existe y en un fichero para que en posteriores script
escribe 10 lineas de texto. podamos acceder a las ips sin necesidad de
volverla a generar.
Atención: Puede ocurrir que al crear o escribir
en un fichero te de error por no tener permiso <?php
de escritura, la siguiente imagen es un ejemplo $ipinicio=ip2long("81.35.0.0");
de ello. $ipfinal=ip2long("81.39.255.255");
for ($ip=$ipinicio;$ip<=$ipfinal;$ip=$ip+1) {
if ($fd=fopen("ips.txt","a")) {
fwrite($fd,long2ip($ip)."\r\n");
}
}
?>
David C.M
Programacion en GNU/LiNUX
Programacion del Sistema:
El Sistema I.P.C.
programa. Esto que en principio parece una El I.P.C. es tan sólo una parte de la
perogrullada es muy importante: Podemos programación del sistema, concretamente la
tener cien cursillos de C bajados de internet que trata con procesos y la forma en que estos
y cincuenta libros. Si no hacemos programas, se comunican entre sí.
no nos servirán de nada. He procurado ir
Antes de comenzar a definir algunos conceptos
explicando conceptos con ejemplos. Una
vez indicado el camino, sóis vosotros quién importantes como proceso, voy a explicar
debéis recorrerlo. Muchos estamos brevemente porqué he escogido comenzar por
dispuestos a acompañaros en este camino. esta parte de la programación del sistema.
Tras lo leído, es fácil deducir que un único Pero antes de llegar ahí, nos queda aún mucho
ejecutable puede ser llamado varias veces, camino por recorrer. Por ahora quedémonos
creado así varios procesos (copias en memoria) con la idea que refleja dicho gráfico: Un proceso
que hacen lo mismo pero que son no es algo estático, sino que mientras este
independientes. Será el núcleo el encargado permanece en memoria ejecutándose, pasa por
de gestionar como y cuando a un proceso le diversos estados. La razón de ello es que un
toca realizar sus funciones. proceso no está solo en memoria, sino que
puede haber simultáneamente muchos procesos,
El tiempo de vida de un proceso es el
todos compitiendo por obtener los mismos
conjunto de estados por los que un proceso
recursos del sistema (cpu, memoria, disco,
puede pasar desde que comienza hasta que
I/O...). El núcleo será el encargado de gestionar
termina. En un entorno UNiX, los estados por
qué procesos deben de hace qué y cuando. Es
los que puede pasar un proceso son:
lo que se conoce como concurrencia y, como
veremos en esta serie, también se nos
suministrarán herramientas (semáforos) que
nos permitirán gestionar la concurrencia de
nuestros propios programas si así lo deseamos
o necesitamos.
Una manera sencilla de ver los procesos que
se están ejecutando en nuestro sistema es
mediante el comando ps. Como este comando
suele variar ligeramente en sus parámetros en
distintos sabores UNiX, recomiendo la consulta
de la página del manual (por ejemplo, en
GNU/LiNUX, el comando ps A lista todos los
procesos del sistema. En *BSD, la orden es ps
-a y aún así esto no garantiza que se muestren
todos los procesos, dado que el sistema debe
de estar configurado para ello.
Sea como fuere, una salida clásica en GNU/LiNUX
suele ser:
123 ? 00:00:00 kjournald del proceso. Este número es único para cada
176 ? 00:00:00 eth0 proceso y actúa de DNI de cada uno. De esta
196 ? 00:00:00 dhclient manera el sistema podrá manejar los procesos
200 ? 00:00:00 eth1 utilizando su DNI.
213 ? 00:00:00 portmap
PPID
503 ? 00:00:05 syslogd
506 ? 00:00:00 klogd ( Parent Process Identification ) Identificador
.......... del proceso padre. En un sistema UNiX los
procesos son creados siempre por otros
Para obtener aún más información sobre estos procesos, procesos. Esto hace que siempre exista una
añadimos el parámetro -f: relación padre-hijo entre ellos y que obtengamos
una estructura arbórea de dependencias entre
luis@leonov:~$ ps -Af // En *BSD ps -al
procesos.
UID PID PPID C STIME TTY TIME CMD
Existe un programa llamado pstree que
root 1 0 0 16:42 ? 00:00:05 init [2] muestra esta estructura arbórea de
dependencias padre-hijo. Suele estar
root 2 1 0 16:42 ? 00:00:00 [keventd] disponible en todos los UNiX, pero no se
suele instalar por defecto. Hasta donde
root 0 1 0 16:42 ? 00:00:00 [ksoftirqd_CPU0] se, en Debian se puede instalar mediante
apt-get install pstree y en *BSD se
root 0 1 0 16:42 ? 00:00:00 [kswapd]
dispone de un port en
root 0 1 0 16:42 ? 00:00:00 [bdflush] /usr/ports/sysutils/pstree/. Sea
como fuere, lo podemos descargar de
root 0 1 0 16:42 ? 00:00:00 [kupdated] ftp://ftp.thp.Uni-Duisburg.DE/pub/source/
root 122 1 0 16:43 ? 00:00:00 [kjournald] El resto de los campos de información los
ignoraremos por ahora. Con lo visto, debe de
root 123 1 0 16:43 ? 00:00:00 [kjournald] quedar claro que la información más importante
asociada a un proceso será su PID y su PPID.
root 176 1 0 16:43 ? 00:00:00 [eth0] Estos número que como hemos dicho identifican
respectivamente al proceso, y al proceso padre
......
del mismo, son números de 16 bits que serán
La información relevante mostrada será: asignados secuencialmente por el núcleo cuando
se crea un proceso.
UID
Cuando programamos, el tipo asociado a un
( User Identification ) Nos muestra qué usuario lanzó ese
PID suele ser un entero ( int ). Dado que
proceso.
siempre debemos de programar de manera que
PID nuestro código sea lo más portable posible, se
suele emplear el tipo pid_t proporcionado por
( Process Identification ) Nos muestra el número identificador
<sys/types.h>.
Veamos como podemos hacer que nuestros programas Los datos pueden variar un poco, pero lo
conozcan su PID y su PPID: importante es observar que el PID y el PPID
coinciden.
/////////////////////////////////////////////////////////////////////////////////////////////////////// Ya sabemos qué es un proceso y sabemos cómo
// se identifica. A continuación vamos a pasar al
// ARCHIVO: pid.c lado siniestro de los entornos UNiX-like: El
// comando kill. Este comando sirve para matar
// DESCRIPCIÓN: cualquier proceso que haya creado nuestro
// Este archivo muestra como obtener el PID y el PPID de usuario ( el usuario root puede matar cualquier
// un programa. proceso del sistema ). Este comando funciona
// enviando la señal SIGTERM a nuestro proceso,
// COMPILACIÓN: haciendo que este muera de asesinato alevoso.
// gcc -o pid pid.c
//
Sobre señales hablaremos más adelante, pero
//////////////////////////////////////////////////////////////////////////////////////////////////////
anticipemos que es el medio de comunicación
más básico que existe entre procesos. Todos
#include <stdio.h>
los procesos entienden un "lenguaje" especial
#include <unistd.h> llamado señales. Mediante estas señales que
#include <sys/types.h> son órdenes de este lenguaje, podremos dar
ciertas órdenes a los procesos. Así que
int main() estrictamente no estamos asesinando un
{ proceso: Le estamos invitando cortésmente a
que se suicide.
pid_t mi_pid, pid_papa;
mi_pid = getpid();
pid_papa = getppid(); Vamos a ver esto con un ejemplo:
printf("\n Mi PID es %d y el de mi padre %d\n", mi_pid, pid_papa);
////////////////////////////////////////////////////////////////
}
//
Un experimento interesante será el añadir al final del programa // ARCHIVO: pesado.c
mostrado una instrucción como sleep(10);. Esta instrucción //
hace que tras ejecutar nuestro programa, este espere 10m
// DESCRIPCIN:
segundos para terminar. Si en un terminal ejecutamos este
// Este archivo nos hará perder la paciencia
programa, y en otro ejecutamos ps con los parámetros
adecuados, podremos ver algo similar a: //
// COMPILACIN:
luis@leonov:~/hxc/articulo9_el_chaman/codigo$ ./pid2
// gcc -o pesado pesado.c
Mi PID es 24560 y el de mi padre 24490
//
Y en la otra ventana: ////////////////////////////////////////////////////////////////
luis@leonov:~/hxc/articulo9_el_chaman$ ps -Al
#include <stdio.h>
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
#include <unistd.h>
............
0 S 1004 24560 24490 0 69 0 - 334 126840 pts/3 00:00:00 pid2 #include <sys/types.h>
............
Este programa es exactamente lo que parece: 27972 dice: Desisme, ¿qué le pasó al mamut?
Un bucle infinito. Este programa repite mientras Terminado (killed)
cierto, un absurdo mensaje acompañado por
Lo que quiere decir que, esta vez sí, ha sido
un pitido en el altavoz (secuencia de escape un asesinato y no un suicidio.
\a). Para el que no crea que este programa
Tras leer tanto humor (malo) negro, puede
no es digno merecedor de su nombre,
parecer que esto de suicidarse y matar es un
ejecutadlo durante diez minutos. Si pasado un
recurso para hacer entretenido el artículo. Nada
tiempo no os ha dado un ataque de tics o unas
más lejos de la realidad: No es lo mismo que
ligeras ganas de dejar mudo al ordenador un proceso se mate a él mismo aunque sea
para siempre, entonces es que tenéis mucha por orden de otros, a que otros lo maten. Es
paciencia. una sutil diferencia que nos debe de hacer
Una posible salida de este programa será: sospechar que aunque el efecto sea el mismo,
lo que ha ocurrido por debajo no lo es tanto.
luis@leonov:~/hxc/articulo9_el_chaman/codigo$ ./pesado
Ya lo veremos más adelante.
27972 dice: Desisme, ¿qué le pasó al mamut?
En varias ocasiones he visto preguntar
27972 dice: Desisme, ¿qué le pasó al mamut?
a la gente si no hay alguna manera para
27972 dice: Desisme, ¿qué le pasó al mamut? matar los procesos por el nombre del
programa en vez de por el PID. A priori,
........
con los comandos vistos hasta ahora,
El número que aparecerá a la izquierda ( en no. Pero existe un comando llamado skill
el ejemplo el 27972 ), es el PID del programa. que sí puede hacer esto. Este comando
tampoco se suele instalar por defecto
Ahora, desde otro terminal, ejecutemos pero está disponible en todas las
distribuciones que conozco. Si por alguna
luis@leonov:~/hxc/articulo9_el_chaman/codigo$ kill 27972
razón no lo estuviese, podemos bajarnos
En el terminal que nos estaba molestando l a s f u e n t e s d e
aparecerá: ftp://fast.cs.utah.edu/pub/skill/.
........
Claro que siempre podemos hacernos nuestra
27972 dice: Desisme, ¿qué le pasó al mamut? propia versión de skill.... Esto no es una
27972 dice: Desisme, ¿qué le pasó al mamut? machada, y es un ejercicio muy interesante.
Terminado Para ello disponemos del directorio /proc donde
está la información disponible que nos muestra
Descanse en paz. el comando ps ( ¿Recordáis lo que decíamos
La familia de funciones exec puede ser clasificada como: 4.- Funciones que contienen la letra e (execve
y execle, ambaas vistas).
1.- Funciones que contienen la letra p en sus nombres
(execvp y execlp). Sus declaraciones son: Este tipo de funciones poseen un argumento
int execvp(char *file, char *argv[]); adicional, char *envp[] que contiene las
variables de entorno a pasar al programa a
int execlp(char *file, char *arg0, char *arg1, ..., char*argN,
(char *) NULL); ejecutar.
Este tipo de funciones busca el programa a ejecutar pasado Tanta variedad principalmente es debida a cómo
a *file en el path. Como veremos ahora, las funciones que pasamos los argumentos al programa. Y esto
no llevan la letra p en el nombre, requieren que se de la es importante porque nuestros programas
ruta (path) absoluta al programa a ejecutar. también pueden recibir parámetros de la línea
de comandos. Como esto en el cursillo de C
*arg0, *arg1, ...., *argN son punteros a cadenas de texto
básico se obvió, vamos a explicarlo brevemente
que formarán los argumentos a pasar al programa. Se suele
con unos ejemplos.
apuntar *arg0 al nombre del propio programa (donde apunta
*file), y se requiere que el último puntero apunte a NULL. En ocasiones nos interesará pasar a nuestros
programas diversos argumentos. Por ejemplo:
*argv[] será otra forma de representar los argumentos
pasados al programa. Es un vector de cadenas de texto que
$ codifica archivo.txt
contiene los parámetros. Por convenio, argv[0] apunta
siempre al nombre del propio programa y argv[N] a NULL archivo.txt es un argumento de nuestro
programa codifica. Puede ser el nombre de
2.- Funciones que contienen la letra v en sus nombres (La
ya vista execvp más execv y execve. Sus declaraciones cualquier archivo. La manera de que "veamos"
son: desde dentro del código, el nombre de cualquier
archivo, es consultando la lista de argumentos.
int execv(char *path, char *argv[]);
Esta está disponible en argv[] que es un vector
int execve(char *path, char *argv[], char *envp[]); de cadenas de texto que contendrá tantas
Estas funciones se caracterizan porque los argumentos del cadenas como argumentos se pasen. Veamos
programa se pasan mediante *argv[] arriba explicado. un código que nos muestra sus argumentos:
En cuanto al nuevo parámetro que aparece, *envp[],
representa una lista de variables de entorno que podemos ////////////////////////////////////////////////////////////////
pasar al nuevo programa. Estas variables de entorno se //
pasan como cadenas de texto con el formato // ARCHIVO: args.c
VARIABLE=valor. env[N] debe valer NULL.
//
3.- Funciones que contienen la letra l (execl, execle y la // DESCRIPCIÓN:
ya vista execlp. Su declaración es:
// Este programa nos muestra el paso de argumentos
int execl (char *path, char *arg0, char *arg1, ..., char
// por línea de comandos
*argN, (char *)NULL);
//
int execle(char *path, char *arg0, char *arg1, ...,
// COMPILACIÓN:
char *argN, (char *)NULL, *envp[]);
// gcc -o args args.c
Este tipo de funciones pasa los argumentos del programa
uno a uno, a diferencia del caso anterior que se han de //
meter previamente en una lista de argumentos. ////////////////////////////////////////////////////////////////
En la columna S (State) vemos que el proceso padre está Ahora la salida producida será:
durmiendo (S) y el proceso hijo, además de difunto, es un
luis@leonov:~/hxc/articulo9_el_chaman/codigo$ ./fork01
zombi (Z).
Comienza el programa principal 12291
La otra posibilidad es que el proceso padre haya ejecutado
la función wait pasando al estado wait. Esto quiere decir Yo soy el padre. Mi PID es 12291
que la ejecución de un proceso se detiene hasta que alguno
Yo soy el padre. Mi PID es 12291
de sus procesos hijo termina. El funcionamiento de wait es
el siguiente: Yo soy el padre. Mi PID es 12291
int pid_hijo, estado; ¡Yo soy Espartaco! ( 12292)
...
¡Yo soy Espartaco! ( 12292)
pid_hijo = wait(&estado);
... ¡Yo soy Espartaco! ( 12292)
Donde pid_hijo es el PID del proceso hijo zombi y estado El proceso hijo 12292 terminó con estado 0
es el estado en el que este realizó su salida.
Que es un comportamiento mucho más civilizado del que
El siguiente ejemplo muestra como modificaríamos el programa
obtuvimos la vez pasada.
original:
////////////////////////////////////////////////////////////////////////////////////////////// Al ver estos tres tipos de generación de procesos (ya sea
// ARCHIVO: fork01.c mediante la ejecución de otros programas, ya sea mediante
//
la creación real de proceso) tal vez los que vengáis de la
// DESCRIPCIóN:
// Primer ejemplo de sincronozación de procesos mediante programación en windows echéis de menos la función spawn.
// el uso de wait Esta función, que no existe en UNiX, funciona de manera
// similar a exec con la salvedad de que exit, como hemos
// COMPILACIÓN: visto, sustituye la ejecución del proceso original por el nuevo
// gcc -o fork01 fork01.c
////////////////////////////////////////////////////////////////////////////////////////////// programa que mandamos ejecutar, sin posibilidad de retornar
al proceso original.
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
spawn sí permite retornar al proceso original. Aunque la
int main()
{ función spawn no exista, su funcionamiento, tras lo visto
int pid_hijo, estado; hoy será fácil de simular:
int i;
printf("Comienza el programa principal %d\n", (int) getpid());
pid_hijo = fork(); ////////////////////////////////////////////////////////////////
if (pid_hijo != 0) // Si somos el proceso padre (e.d. El pid_hijo // ARCHIVO: spawn.c
{ // vale distinto de 0 //
for(i=0;i<3;i++)
printf("Yo soy el padre. Mi PID es %7d\n", (int) getpid()); // DESCRIPCIóN:
pid_hijo=wait(&estado); // Programa que emula la funcionaldad de la función spawn
printf("El proceso hijo %7d terminó con estado %d\n", pid_hijo, estado);
// perteneciente a la API de win32
}
else //
{ // Somos el proceso hijo // COMPILACIÓN:
for(i=0;i<3;i++)
// gcc -o spawn spawn.c
printf("¡Yo soy Espartaco! (%7d)\n", (int) getpid());
////////////////////////////////////////////////////////////////
exit (0);
}
}
N o t a : R a í z d e l S e r v i d o r, s i g n i f i c a q u e e l W i n d o w s A d va n c e d
!
Server está instalado en esa unidad (la unidad c:) y
concretamente en el
Por lo tanto, la raíz
directorio por defecto \winnt\
del sistema está en c:\winnt\
MUY IMPORTANTE...
- E l I I S , I n t e r n e t I n f o r m a t i o n S e r v e r, e s e l S e r v i d o r d e
páginas Web y tiene su raíz en c:\inetpub (el directorio
por defecto)
MUY IMPORTANTE!!!!! Por favor, no borres archivos
Nota: Para quien nunca ha tenido instalado el IIS, le será del Servidor si no sabes exactamente lo que estás haciendo ni
e x t ra ñ o t a n t o e l n o m b r e d e e s t a c a r p e t a ( c : \ i n e t p u b ) c o m o
s u c o n t e n i d o . Pe r o b u e n o , u n d í a d e e s t o s o s e n s e ñ a r e m o s borres las carpetas de los demás usuarios. Si haces eso, lo único
a i n s t a l a r v u e s t r o p r o p i o S e r v i d o r We b ( I I S ) y d e t a l l a r e m o s
su funcionamiento. que consigues es que tengamos que reparar el sistema servidor
De momento, lo único que hay que saber es que cuando y, mientras tanto, ni tu ni nadie puede disfrutar de él :(
T Ú p o n g a s n u e s t ra I P ( l a I P d e u n o d e n u e s t r o s s e r v i d o r e s )
en tu navegador (el Internet explorer por ejemplo), lo que Es una tontería intentar romper el Servidor, lo hemos puesto
estás haciendo realmente es ir al directorio
c : \ I n e t p u b \ w w w r o o t \ y l e e r u n a r c h i vo l l a m a d o d e fa u l t . h t m . para que disfrute todo el mundo sin correr riesgos, para que todo
Nota: Como curiosidad, te diremos que APACHE es otro el mundo pueda crearse su carpeta y practicar nuestros ejercicios.
S e r v i d o r d e p á g i n a s We b ( s e g u r o q u e h a s o í d o h a b l a r d e
él). Si tuviésemos instalado el apache, cuando pusieses En el Servidor no hay ni Warez, ni Programas, ni claves, ni nada
n u e s t r a I P e n T U n a v e g a d o r, a c c e d e r í a s a u n d i r e c t o r i o de nada que robar, es un servidor limpio para TI, por lo tanto
raíz del Apache (donde se hubiese instalado) e intentarías
leer una página llamada index.html ... pero... ¿qué te cuídalo un poquito y montaremos muchos más :)
estoy contando?... si has seguido nuestra revista ya
dominas de sobras el APACHE ;)
MANIPULACIoN DE DOCUMENTOS XML: EL DOM
Tercera parte:
interfaz XMLDOMNode (2)
interfaz XMLDOMNodeList
interfaz XMLDOMNamedNodeMap
Otras interfaces del DOM
- DOMNode -- Métodos
- XML + DTD + DOM
- XQL (XML como Base de Datos)
Vimos en el anterior número los atributos de Vamos a continuar con lo que nos queda de
la interfaz DomNode y algunos de sus esta interfaz.
principales métodos:
INTERFAZ DOMNode Métodos :
Appendchild = que enganchaba un Continuación
nodo hijo al final del nodo padre.
Hemos visto los métodos para insertar, modificar
Insertbefore = que enganchaba un (reemplazar) y borrar nodos, es decir los
nodo hijo dentro del nodo padre, justo métodos con los que podríamos hacer un
antes del nodo hermano (sibling) que mantenimiento básico de un xml. Vamos a ver
indicabamos como referencia. otros métodos interesantes de esta interfaz
No abrais el Visual basic, os pongo un ejemplo Bien, pues estos métodos lo que hacen es: uno
de un trozo de código que realizaría la devuelve el primer nodo que cumpla la
comprobación: condición especificada en el argumento
Dim tienehijos As Boolean consulta, el otro devuelve la lista de nodos
tienehijos tendrá valor true si el nodoPadre que cumplen la condición. Vemos estos dos
tiene hijos, de lo contrario tendrá false métodos con un ejemplo:
tienehijos = nodoPadre.hasChildNodes
si tiene hijos borramos el nodo Colocad un botón en el formulario, id a las
If tienehijos Then propiedades y poner:
nodoPadre.removeChild (nodoABorrar) name = cmdSeleccionNodos
end if caption = &Seleccion de nodos
! Un inciso...
Seguro que os preguntáis lo del título de este Los elementos dentro de NodeList se numeran
párrafo y dos mas por lo bajini porque no comenzando por cero, no por uno; esto quiere
van a haber ejemplos de los dos últimos decir que si tenemos dos elementos en el
métodos que quedan de esta interfaz: NodeList, la propiedad length será 2, pero para
TransformNode y transformNodeToObject.
acceder al primer nodo habrá que usar el índice
item(0) y para obtener el segundo se deberá
El motivo es que, lo que hacen estos métodos,
es transformar el nodo utilizando una hoja de usar item(1).
estilos XSL.
Una lista de nodos siempre está actualizada,
Esta hoja de estilos es un archivo externo como es decir, si añadimos o eliminamos nodos del
puede serlo el dtd o el xml, que se guarda con documento, la lista reflejará inmediatamente
el nombre: Nombrearchivo.xsl. Y tal como he estos cambios.
comentado antes no vamos a hablar de xpath
ni de xsl (aunque me gustaría). Si hago el de Por ejemplo, si añadiésemos un tercer nodo
xpath, vendrá conjuntamente con el de xsl ORDEN_DE_COMPRA, la lista se actualizaría sin
porque están íntimamente ligados. tener que hacer nada, inmediatamente después
de añadirlo, podríamos preguntar por item(2)
Finalmente decir que lo que devuelven es una y si preguntásemos por la length de la lista, en
cadena de caracteres el primero y un nodo el
lugar de devolvernos 2 nos devolvería 3.
segundo con el resultado de la transformación.
1. item = que nos permite acceder a los Los nodos que se suelen tratar más comúnmente
elementos de la lista, a los nodos de la lista, con esta interfaz son los nodos atributos.
teniendole que indicar la posición del nodo.
Ejemplo:
Recordemos que los atributos son nodos.
<NUMERO_DE_CUENTA>12345678</NUMERO_DE_CUENTA>
Vamos también a añadir un atributo dni a
<NOMBRE_COMPLETO>
CLIENTE, también de tipo ID, pero esta vez le
<NOMBRE>Sam</NOMBRE>
vamos a decir que es #IMPLIED (opcional), <APELLIDO1>Bass</APELLIDO1>
dicho de otro modo, vamos a decirle que el <APELLIDO2/>
cliente puede o no puede proporcionarnos el </NOMBRE_COMPLETO>
dato del dni, pero si nos lo proporciona, debe </CLIENTE>
<PRODUCTO>LIBRO</PRODUCTO>
de ser único entre todos los CLIENTE del
</ORDEN_DE_COMPRA>
documento xml.
<ORDEN_DE_COMPRA num="_02">
<CLIENTE DNI="J5555555">
¿Ya no os acordabais? Si no os acordabais,
repasad por favor el PC Paso a Paso número <NUMERO_DE_CUENTA>987654321</NUMERO_DE_CUENTA>
12. <NOMBRE_COMPLETO>
<NOMBRE>Jesse</NOMBRE>
<APELLIDO1>James</APELLIDO1>
De modo que el dtd pedidos quedará de la
<APELLIDO2/>
siguiente manera: </NOMBRE_COMPLETO>
</CLIENTE>
<!ELEMENT PEDIDOS (ORDEN_DE_COMPRA+)> <PRODUCTO>DISCO DE VINILO</PRODUCTO>
<!ELEMENT ORDEN_DE_COMPRA (CLIENTE, PRODUCTO+)> <PRODUCTO>SUPERSNAZZ - FLAMIN' GROOVIES</PRODUCTO>
<!ATTLIST ORDEN_DE_COMPRA num ID #REQUIRED> </ORDEN_DE_COMPRA>
<!ELEMENT PRODUCTO (#PCDATA)> </PEDIDOS>
<!ELEMENT CLIENTE (NUMERO_DE_CUENTA, NOMBRE_COMPLETO)>
Esta interfaz solo tiene un atributo: length, SetNamedItem es un método que nos permite
que nos devuelve el número de atributos que añadir un nodo a la lista de nodos atributos(o
contiene la lista de atributos. nodos entidades o nodos notation) de la interfaz
DOMNamedNodeMap. Si hay un nodo que tiene
el mismo nombre, es reemplazado. Devuelve
La lista de atributos que contiene un objeto
una referencia al nuevo nodo, si estamos
de tipo DOMNodeMap, hemos dicho al principio
añadiendo un nuevo nodo atributo, y una
que es muy parecida a la interfaz nodelist y
referencia al nodo que ha reemplazado al
donde nodelist tenía una lista de nodos, antiguo nodo en caso de que haya un reemplazo
namednodemap tiene una lista de atributos de de nodos.
un nodo. Y repito por favor que tengáis en
mente que un atributo es un nodo a su vez. Sintaxis removeNamedItem( String
Por ejemplo: strNombre)
Codificad el evento del botón: 'esto también lo podríamos haber hecho con la interfaz
DomAttribute de la siguiente manera:
Private Sub cmdCogerPonerAtributos_Click() 'Dim atributo As IXMLDOMAttribute
'Recordad que aunque hemos visto las principales, el DOM
Dim xmlDocument As DOMDocument 'tiene más interfaces. Habíamos visto en otros números la interfaz
Dim nodoAtributo As IXMLDOMNode DOMElement, ahora podéis ver que existe la DOMAttribute...
Dim listaNodos As IXMLDOMNodeList efectivamente, para cada tipo de nodo hay una interfaz DOM,
Dim listaAtributos As IXMLDOMNamedNodeMap así tenemos DOMComment, DOMCDATASection etc.
Dim nuevoNodoAtributo As IXMLDOMNode 'Set atributo = xmlDocument.createAttribute("Vendedor")
'atributo.nodeValue = "Manel of the bomb"
Set xmlDocument = New DOMDocument 'Set nuevoNodoAtributo = listaAtributos.setNamedItem(atributo)
xmlDocument.async = False
xmlDocument.validateOnParse = True 'le decimos a la listaAtributos que añada el nuevo atributo, y lo
xmlDocument.resolveExternals = True referenciamos a la variable de tipo nodo nuevoNodoAtributo
xmlDocument.Load ("C:\xmlDom\pedidos.xml") Set nuevoNodoAtributo = listaAtributos.setNamedItem(nuevoNodoAtributo)
MsgBox xmlDocument.documentElement.childNodes(0).xml
'vemos que la longitud de la lista de atributos pasa a ser de uno
'atributos tendrá todos los nods atributos del segundo nodo del a dos:
árbol xml. Y tendrá el segundo porque documentElement nos 'ahora además de "num" tenemos el atributo "vendedor"
devuelve el elemento raíz que es PEDIDOS. MsgBox listaAtributos.length
Por tanto childNodes (0) = tiene el primer
ORDEN_DE_COMPRA, y atributos la lista de los nodos atributos 'comprobamos que hemos añadido el nuevo atributo en el lugar
que tiene el primer ORDEN_DE_COMPRA correcto
Set listaAtributos = xmlDocument.documentElement.childNodes(0).Attributes MsgBox xmlDocument.documentElement.childNodes(0).xml
'mostramos un mensaje con el número de nodos atributos "num", si creamos un nodo atributo con un nombre ya existente lo
y efectivamente, tal como hemos explicado en la teoría, el visual reemplaza.
basic nos dice que tenemos un atributo "num" en ese nodo. Volved lo comprobamos con un mensaje
a repasar la teoría!! Set nuevoNodoAtributo = xmlDocument.createNode(NODE_ATTRIBUTE, "Vendedor", "")
Colocad un botón en el formulario, id a las propiedades y Añadimos el elemento con su texto al nodo raíz, y finalmente
poner: añadimos todo el nodo raíz al fragmento xml
name = cmdDocumentFragment Set nodoHijo = xmlDocument.createNode(NODE_ELEMENT, "NOMBRE", "")
caption = Document Fragment nodoHijo.Text = "Wild"
Set nodoHijo = nodoRaiz.appendChild(nodoHijo)
Set nodoHijo = xmlDocument.createNode(NODE_ELEMENT, "APELLIDO1", "")
nodoHijo.Text = "Bill"
Set nodoHijo = nodoRaiz.appendChild(nodoHijo)
Set nodoHijo = xmlDocument.createNode(NODE_ELEMENT, "APELLIDO2", "")
nodoHijo.Text = "Hichtcock"
Set nodoHijo = nodoRaiz.appendChild(nodoHijo)
¿es todo? Si, pero, ¿no hay algo en este código que no está En el explorador de proyectos, vemos que se
bien? ¿No hay algo en este código que hace que tengáis nos ha añadido una carpeta con nombre
dolor en los ojos, algo dentro vuestro que os dice que hay Módulos y un archivo que se llama Module1.
algo que no marcha?
y
selecciona
mos la
opción de
Abrir
'fijaros que podéis hacerlo de una sola vez, aunque es menos Set nodoRaiz = crearNodo(xmlDocument, nodoRaiz, NODE_ELEMENT, "NOMBRE_COMPLETO")
'fácil de leer, os ahorra tiempo, comparadlo con la función
'crearNodo Set nodoRaiz = apenNodo(nodoRaiz, fragmentoXML)
Set apenNodo = nodoDondePegamos.appendChild(nodo) 'llamamos a la subrutina mensajeXML, pasando como párametro
'un nodo como una subrutina no devuelve nada, escribimos
End Function 'nombreSubrutina parametro
'si fuera una función escribiríamos
Volved al formulario, colocad un botón: 'variable=nombrefuncion(parametro)
mensajeXML nodoRaiz
Set nodoHijo = crearNodo(xmlDocument, nodoHijo, NODE_ELEMENT, "NOMBRE")
nodoHijo.Text = "Wild"
Set nodoHijo = apenNodo(nodoHijo, nodoRaiz)
Set nodoHijo = crearNodo(xmlDocument, nodoHijo, NODE_ELEMENT, "APELLIDO1")
nodoHijo.Text = "Bill"
Set nodoHijo = apenNodo(nodoHijo, nodoRaiz)
Set nodoHijo = crearNodo(xmlDocument, nodoHijo, NODE_ELEMENT, "APELLIDO2")
nodoHijo.Text = "Hichtcock"
Set nodoHijo = apenNodo(nodoHijo, nodoRaiz)
S e t n o d o H i j o = fragmentoXML.appendChild(nodoRaiz)
'la función mensajeXML espera un nodo, fragmentoXML es un nodo
mensajeXML fragmentoXML
mensajeXML nodoHijo
xmlDocument.documentElement.childNodes(1).childNodes(0).appendChild fragmentoXML
End Sub
B) DOMEXCEPTION
blnValido = xmlDocument.Load("C:\xmlDom\Compraxx.xml")
Lo que proporciona Microsoft es una propiedad, If blnValido Then
dentro de la interfaz DOMDocument que se MsgBox "El documento es válido"
llama parseError, y esta propiedad a su vez Else
tiene un listado de propiedades, por ejemplo:
parseError.errorCode nos devolverá el código 1- parseError.errorCode
del error, y parseError.reason la descripción
del error. strString = " El código de error es " & xmlDocument.parse.Error.errorCode & Chr(13)
3- parseError.Line
Vamos al formulario y ponemos un botón
'Si el error se hubiera producido en una línea determinada del
En las propiedades y escribid: 'archivo xml, se nos indicaria aquí
strString = strString & " Ha ocurrido en la línea " & xmlDocument.parseError.Line
name = cmdErrores & " como no ha cargado el documento, y ahi es donde ha dado el error, la linia
· caption = Errores del DOM es la cero" & Chr(13)
SI TE GUSTA LA INFORMÁTICA.
SI ESTAS CABREADO CON GÜINDOUS ;)
SI QUIERES PROGRESAR DE VERDAD
Incluye 5 CDs y 2 DVD
PC PASO A PASO Manual de Instalación.
SOR TEA CADA MES UN S.O. Manual de Administracion
TARRAGONA
SEGUIR LLAMANDO, EL PROXIMO
HAY MUCHOS MAS EN
http://pclog.buscalogos.com/ PODRIA SER PARA TI (PAG 42)
Muy buenas a todos todas :) que todo el mundo sabe lo que se mueve en
el mundillo, creemos que todo el mundo ha
En este artículo, en primer lugar veremos qué oído hablar de los Mod Chip y que, quien mas
es y cómo se instala el famoso Evolution X, en / quien menos, todos sabemos descargar juegos
segundo lugar veremos cómo hacer una copia de Internet para la XBOX y jugar a ellos.
de seguridad de un juego.
CRASO ERROR!!! Hemos recibido cientos de
e-mails de personas que no tienen ni idea de
! Sobre las copias... lo que es un Mod Chip y mucho menos de
grabar juegos bajados de Internet para la XBOX.
Sobre las copias de seguridad de tus juegos: ¿INCREÍBLE? No, pura realidad.
Imaginemos que compramos un juego de la XBOX y a
nuestro perro, un buen día, le da por mordisquearlo pensando Los que estamos todo el día liados con
que es un Donette. Se acabó, adiós a nuestro juego. PUES ordenadores y extraños textos llenos de
NO!! incomprensibles símbolos, poco a poco
desarrollamos una terrible enfermedad: La
Aparentemente no se pueden hacer copias (de seguridad) Autista-implicito-patia. No, los psicólogos no la
de los juegos de la XBOX, pero nosotros vamos a iniciarte conocen, pero los pillados por la Informática
en esta saludable práctica (y el mes que viene la padecemos y muchas veces ni nos enteramos.
profundizaremos en ello).
Implícito porque, cuando hablamos de algo,
Hay quienes comparten sus copias de seguridad de los creemos que todos saben de qué va el tema y
juegos de la XBOX en Internet (generalmente con el e- utilizamos infinidad de conceptos técnicos que
mule, www.spanishare.com). Allá cada uno con su quizás muy pocos conocen en profundidad.
conciencia :)
Autista porque ni siquiera somos capaces darnos
Lo que os voy a explicar en un principio puede cuenta cuando alguien no tiene ni idea de lo
parecer complicado, pero como veréis mas que le estamos contando.
adelante, no lo es tanto.
Vamos a ver si podemos curarnos de esa
Antes de empezar, vamos a dejar muy claritas
enfermedad :)
unas cuantas cosas.
Los que creamos esta revista tenemos una La XBOX es la consola de videojuegos de
enfermedad MUY DIFÍCIL de erradicar. Creemos Microsoft (vale, vale, me he lucido).
Aclarando Conceptos: Los Mod Chips Ya dijimos que había que soldarlo, es decir,
armarte de valor, abrir la consola y darle caña
¿Cómo podemos hacer todo eso? Pues bien, al soldador. Puedes encontrar mucha información
hay una serie de señores que han fabricado s o b r e e l l o e n m u l t i t u d d e We b s
unos circuitos integrados que, una vez instalados (http://www.chipeando.com/ o
en el interior de la consola (hay que soldarlos), http://www.chipspain.com o
nos permiten hacer todo eso que antes no http://www.xboxreality.net/).
podíamos.
¿Eres de los que no se arriesgan? Pues de FTP en la consola). Bien, pues eso es el
que te lo instalen!!! Evolution X.
Este menú es lo que llamamos Dashboard Os detallo aquí una lista con lo que necesitamos
para poder hacer todas estas travesuras en la
Imagina que pudieses cambiar ese software, consola de M$.
es decir, imagina que pudieses cambiar el
Dashboard. Para instalar Evolution X:
Para crear una copia de seguridad: Para los que queráis la última versión buscad
un poco en Google que seguro que lo encontráis,
Evolution X instalado. pero no os preocupéis ya que todos los evox
Cliente FTP se instalan y configuran de la misma forma,
Pc con tarjeta de red. independientemente de su versión.
1 o 2 Cables RJ45.
Xbox con modchip instalado. Boxplorer 0.96 Beta (o superior)
Grabadora de CDs o DVDs (depende
del tamaño del juego que queramos Es la herramienta que vamos a usar para copiar
hacer nuestro Backup). cosas al HD (disco duro) de la consola, en este
Nero 6.019 o superior. caso el evox, pero servirá para cualquier otra
cosa que queramos copiar al HD.
Evolution X
Tiene que ser la versión 0.96 Beta o superior,
ya que en las anteriores versiones sólo se podía
Esto es un Dashboard (término que ya hemos
ver el contenido del HD y DVD, pero no se
explicado antes).
podía copiar ni manipular nada.
CASO 2: CABLE RJ45 NORMAL (también Estas carpetas (C, E, F) corresponden a las
llamado NO CRUZADO). unidades del HD de la consola. Así será más
fácil y menos lioso.
Utilizaremos este cable cuando interponemos
un elemento de red intermedio (HUB, SWITCH) En esta carpeta C, descomprimimos el evox
entre el PC y la XBOX. En este caso que nos hayamos bajado. Tendremos estos
necesitaremos 2 cables. archivos en la carpeta .
Cliente FTP:
AutoLaunchAudio = No ScreenSaver =5
Fahrenheit = No
Si o No se auto inicia un cd de música al ShadeLevel = 90
introducirlo, lo dejamos en NO. EnableSMART = Yes
HDD_Temp_ID = 194
#AudioPlayer = "c:\xboxdash.xbe" DebugTSR = No
ChameleonLed = 15
La ruta de reproductor por defecto al meter
un cd de música, lo dejamos como está (al [Network]
tener la # delante significa que está
desactivado). SetupNetwork = Yes
El nombre del tema del evox, lo dejamos como Puerta de enlace, aquí debe ir la ip del PC.
está.
Lo siguiente lo dejamos como está:
IGR = Yes
DNS1 = 0.0.0.0
Es para resetear la consola mientras estás DNS2 = 0.0.0.0
jugando con la combinación de teclas SkipIfNoLink = No
L+R+START+BACK, pero esto crea conflictos SetupDelay =0
con muchos juegos así que lo cambiamos a [Clock]
NO.
JumpToMsDash = No
Lo siguiente lo dejamos como está: JumpIfNoLink = Yes
Use24 = Yes
#SkinName = RuDeDuDe2 SwapDate = No
UseItems = No SNTP_Server = 216.244.192.3
}
Si os gusta mi evox.ini, lo podréis bajar del foro
Como veréis, todo va relacionado con secciones de nuestra web, ya sabéis copiar y pegar ;-)
(Section) y Funciones (Item). (www.hackxcrack.com)
Lo que hay que tener en cuenta, es que las Bueno, ya ha acabado la configuración del evox
Section pueden englobar otras Section o Item, así que ahora pasamos a descomprimir el
pero los ítems sólo son ítems (funciones) y no boxplorer en la carpeta instalacion, tal cual.
pueden contener nada, sino que son el último El resultado de esta descompresión será una
clic donde vamos a dar para llegar a un fin, carpeta media y un default.xbe
por ejemplo arrancar un juego que hayamos
pasado al HD.
Ok, ya casi estamos, ahora quemaremos
(grabamos) el contenido de la carpeta
Las secciones empiezan por Section Nombre
instalacion a un CD-RW con el Nero, tal y
de la Section
como os enseñé el mes pasado. Si no tienes el
Abrimos un { y todo lo que esté aquí será número anterior de PC PASO A PASO, puedes
parte de la Section, y cerramos con un }. pedirlos desde la Web (www.hackxcrack.com);
de todas maneras, puedes encontrar el artículo
La Section Root es la principal por lo que no de la XBOX del mes pasado LIBERADO en la
podremos cambiar el nombre y todo debe estar misma WEB ;)
comprendido en ésta.
Botón Y: Deselecciona.
Quizá hoy día las news estén desfasadas desde el foro de esta revista: www.hackxcrack.com).
el punto de vista tecnológico, pero no es fácil Usenet es básicamente una comunidad de foros
hacer desaparecer una sociedad formada en la cual existen decenas de miles de foros
durante años por cientos de miles, o millones diferentes, cada uno con su temática particular
de personas y, en cuestiones como ésta, donde y sus usuarios particulares, y donde se pueden
lo realmente importante es la información, la crear nuevos foros según vaya surgiendo la
tecnología queda en un segundo plano. necesidad por parte de los usuarios.
Probablemente, Usenet será conocido para Quizá algunos conozcáis Usenet por otros
muchos de vosotros, pero estoy también seguro nombres más comunes, ya que vulgarmente
de que más de uno no habréis oído hablar se le suele llamar las news o los newsgroups.
jamás de lo que sigue siendo hoy día una de
las comunidades más importantes de Internet, Posiblemente más de uno os habréis topado
y todo esto os estará sonando a chino. con estos términos pero los habréis ignorado
al no saber de qué iban. Por ejemplo, al contratar
Para todos esos que aún no sabéis de qué vuestra conexión a Internet, posiblemente
hablo, empezaré por una pequeña introducción vuestro ISP os dio la dirección de su servidor
para contaros qué es todo esto, porque hoy de news, o al configurar vuestro cliente de
día sigue siendo una importante fuente de correo (Outlook, Netscape, ...) os habréis
información que, por su carácter propio, no encontrado con opciones para conectar con un
puede ser reemplazado por los nuevos sistemas servidor de news, o incluso en el propio Google
(al menos de momento). habréis visto el apartado GRUPOS entre los 5
apartados principales: La web, Imágenes,
2. ¿QUÉ ES USENET? Grupos, Directorio, y News (en este caso, News
no tiene nada que ver con el tema, pero si
Si estas leyendo esto, quizá es tu día de suerte, Grupos).
porque si en lugar de habérmelo preguntado
a mí, hubieses buscado respuesta a esta
pregunta en los FAQs y diversos artículos acerca
de Usenet te habrías encontrado con multitud ! Hay un dicho poular...
de respuestas evasivas y complicadísimas
reflexiones filosóficas y metafísicas acerca de
lo que es, no es, deja de ser, y sigue siendo
Hay un dicho popular que reza: si no sale en la tele-,
Usenet. Personalmente, no entiendo bien a
no existe, pues hoy en día podríamos decir lo mismo pero
qué se deben estas comeduras de cabeza
relacionado con Internet: si no sale en GOOGLE, no
porque, si bien Usenet es complejo en sus
detalles, la idea general es bien sencilla. Esto existe.
es lo que es Usenet: una red de foros.
Hay muchas utilidades del buscador GOOGLE que muchas
Supongo que todos sabéis lo que es un foro: personas desconocen. Una es la de poder buscar imágenes
un punto de encuentro para gente interesada (botón imágenes) y otra es la de poder buscar en USENET
en un tema común, en el cual esta gente puede (botón grupos). Dedícale 3 minutos a cada opción y ya no
escribir artículos, preguntas, o cualquier otra
podrás vivir sin ellas.
cuestión que deseen compartir o comunicar al
resto de personas del foro (claro ejemplo es
Si entramos en el apartado GRUPOS de saber qué será este último, porque el nombre
www.google.com veremos un directorio no es muy explícito que digamos...).
bastante extenso de los grupos de Usenet que
existen en la actualidad. En la página principal Para acceder a Usenet basta con conectarse a
sólo se muestran las categorías principales, uno de los miles de servidores existentes
pero puedes expandir la lista completa de mediante el software adecuado (clientes de
grupos para hacerte una idea de la cantidad correo con funciones para lectura de news, o
de grupos que existen. bien clientes específicos), que lo que hace
internamente es comunicarse con el servidor
de news, a través del puerto TCP 119, mediante
el protocolo NNTP, que es precisamente el que
detallaré en este artículo. Una vez conectados
a la red, solicitaremos al servidor una lista de
los grupos disponibles, y navegaremos por la
jerarquía para suscribirnos a aquellos que
nos interesen.
Imagen C
Una vez introducido pulsaremos el botón siguiente y en la Según esta configuración, cada servidor incluirá
siguiente ventana pulsaremos el botón finalizar. Nos en su lista unos grupos u otros. Por ejemplo,
encontraremos entonces frente a la ventana de la Imagen puede haber servidores censurados que no
B, donde pulsaremos sobre el botón CERRAR. Después incluyan en su lista ningún grupo relacionado
nos preguntará si queremos descargar los Grupos de Noticias con sexo o violencia, o puede haber servidores
a lo que responderemos que si. Si todo ha ido bien, se españoles que sólo incluyan grupos
descargarán los grupos de noticias y podrás suscribirte a internacionales o españoles, pero no grupos
los que quieras. franceses, japoneses, o de otros países, etc.,
etc.
Aquí te dejamos para que experimentes tu mismo o corremos
el riesgo de que en el foro nos machaquen a críticas por El problema es que este tipo de filtrado de
explicar cosas tan sencillas. Si tienes dudas sobre el grupos puede ser propagado a otros servidores
funcionamiento del Outlook Express pregunta en el foro en contra de sus deseos. Por ejemplo, veamos
de la revista (www.hackxcrack.com). la siguiente ilustración:
realidad Usenet consta de miles de servidores. que le comunicó que el grupo había sido creado
Como ejemplo, podéis encontrar listas de (el cómo sabe exactamente el servidor B que
servidores en http://www.newzbot.com/. el servidor A ya conoce ese grupo es algo que
explicaré más adelante). A los que si que
En nuestra red ficticia existen dos tipos de intentará propagar el nuevo grupo es a los
servidores: los servidores malignos, y los servidores C y F.
servidores católicos. Los servidores malignos
(señalados con un pequeño diablillo en la El servidor C pasará del tema, porque ya conocía
ilustración) no tienen ningún tipo de censura, la existencia del nuevo grupo gracias al servidor
mientras que los servidores católicos A. En cambio, el servidor F no tenía noticia de
(señalados con unos rombos en la ilustración) la creación del nuevo grupo, pero tampoco lo
aborrecen los contenidos pornográficos. incluirá en su lista, ya que es uno de los
servidores católicos, y su filtro encontrará la
Supongamos que el administrador (Admin)
temida palabra sex en el nombre del grupo.
del servidor A, que es uno de los servidores
Por tanto, los servidores C, D, y F han recibido
malignos, decide crear un grupo nuevo,
la noticia de que ha sido creado el grupo
llamado alt.sex.aliens, para los usuarios que
desean tratar el apasionante tema de las alt.sex.aliens, pero ninguno de ellos lo ha
relaciones sexuales con seres de otros planetas añadido a sus listas y, por los mismos motivos,
(aunque parezca mentira, este grupo existe tampoco contribuirán a la propagación de ese
en realidad). nuevo grupo.
de Usenet, así que sólo os introduciré un poco como curiosidad que una traducción al inglés
el tema. Básicamente lo que haré será advertiros sería la palabra thread, que seguro que conocéis
de algunas cuestiones que irritan bastante a todos aquellos que utilicéis habitualmente
los usuarios honrados de Usenet, para evitaros cualquier tipo de foro, pues un thread es
problemas si pensáis incorporaros a esta precisamente eso: un hilo de conversación.:-)
interesante comunidad.
Por tanto, os aconsejo que evitéis en la medida
En primer lugar, comenté algo antes acerca de lo posible enviar un mismo mensaje a varios
del spam. Como ya sabemos, el spam es esa grupos, ya que podéis causar problemas y, sin
odiosa publicidad que no solicitamos pero que duda, molestar al resto de usuarios.
nos llega una y otra vez impidiéndonos centrar
nuestra atención en lo que realmente nos En lo que respecta al spam, si el servidor limita
interesa. Usenet no se libra del spam, ni mucho este tipo de mensajes dirigidos a varios grupos
menos, ya que existen bots que lo que hacen simultáneamente, los bots pueden saltarse esto
simplemente es conectarse a los servidores sencillamente por fuerza bruta, es decir, enviando
NNTP para enviar automáticamente una serie
el mismo mensaje a cada grupo por separado.
de mensajes a varios grupos.
En este caso, es bastante más complicado
evitarlo, y la principal arma son ahora los filtros
La solución más sencilla para estos bots
que analicen los mensajes tratando de encontrar
spameadores sería enviar un único mensaje,
e indicarle al servidor que publicase ese mismo algo sospechoso (remitentes indeseados,
mensaje en tropecientos grupos que él palabras clave como enlarge your penis, o
especificase. El problema que tienen los bots cualquier otro tipo de filtrado inteligente).
con esto es que, en general, los servidores
NNTP no se lo pondrán tan fácil. Ya que he hablado de las conversaciones
cruzadas difíciles de seguir a las que se llega
En efecto, se puede indicar a un servidor que debido al crossposting, también hablaré de
un mismo artículo sea publicado en más de un otras conversaciones indeseables, que son las
grupo simultáneamente, pero en general los famosas flamewars. Si tratáis de documentaros
servidores NNTP limitarán mucho esta acerca de Usenet por vuestra cuenta,
característica, o incluso directamente la probablemente daréis con términos como
inhabilitarán. flamewar, o troll. Por cómo se utilizan estos
términos en la documentación que se suele
Al limitar la publicación en múltiples grupos, encontrar, quizá podáis pensar que se trata de
no sólo están combatiendo el spam, si no que términos técnicos probablemente relacionados
también están evitando otro problema común con alguna compleja técnica utilizada por
en Usenet, que es el conocido como hackers avanzados. Nada más lejos de la
crossposting (publicación cruzada). Cuando realidad, ya que una flamewar no es más que
un usuario empieza un tema de discusión un hilo de conversación molesto y que no lleva
enviando un mismo artículo a varios canales, a ninguna parte, ya que consiste simplemente
y la gente se pica y empieza a publicar en un intercambio de insultos, o en un diálogo
respuestas al tema se puede montar un buen de besugos. Se habla tanto acerca de las
jaleo, pues habrá multitud de mensajes cruzados flamewars por el simple hecho de que son
entre varios grupos simultáneamente, a los bastante frecuentes y engorronan
cuales será muy difícil seguirles el hilo. Ahora considerablemente los hilos realmente
que menciono la palabra hilo, os comento interesantes de los grupos.
Recuerda que en color verde tenemos las el comando se ha realizado con éxito.
ordenes de conexión (ejecución del programa - 3xx Las que empiezan por 3 indican que el
Telnet y conexión a un Servidor Remoto), en comando es correcto y que podemos continuar
color rojo tenemos las respuestas del servidor el proceso.
y en azul los comandos que nosotros le - 4xx Las que empiezan por 4 indican que el
enviamos al Servidor Remoto una vez nos comando es correcto, pero que no se puede
hemos conectado mediante Telnet). ejecutar por algún motivo.
- 5xx Las que empiezan por 5 indican que el
comando es incorrecto, no está implementado,
! IMPORTANTE: o que hay algún problema en el servidor.
IMPORTANTE:
IMPORTANTE: Servidores de News que no funcionan. Dentro de cada uno de los 5 tipos básicos de
Usaremos este servidor (news.mad.ttd.net) para el ejemplo. respuestas, existe a su vez otra clasificación,
Si no te funcionase correctamente utiliza el servidor gratuito en función del segundo dígito:
mencionado al principio de este artículo (dp-
news.maxwell.syr.edu) y, por si acaso, tienes listas - x0x Se refiere a cuestiones acerca de la
de servidores en http://www.newzbot.com (sírvete tu propia conexión o de la configuración en
mismo ;). general.
- x1x Se refiere a cuestiones sobre los
grupos.
- x2x Se refiere a cuestiones acerca de los
artículos.
! ¿No sabes que ...
- x3x Se refiere al mecanismo de
IMPORTANTE: distribución de artículos y grupos.
¿No sabes qué es TELNET? Malo, malo
eso significa - x4x Se refiere a la publicación de artículos.
que no has seguido nuestra revista :) - x8x Se refiere a cualquier función propia
de un software específico, que no forme parte
Hemos liberado muchos artículos en nuestra Web del estándar.
(www.hackxcrack.com), si quieres empezar a trabajar con - x9x Reservado para funciones de
Telnet nada mejor que descargarte el Artículo RAW 1 / depuración.
POP 3 del número 7 de PC PASO A PASO y pegarle un
vistazo. Así, por ejemplo, una respuesta del tipo 11x
nos informará acerca del estado de nuestra
Que lo disfrutes!!! conexión, una respuesta del tipo 24x nos
indicará que la publicación de un artículo ha
tenido éxito, y una respuesta del tipo 58x nos
Al igual que en otros muchos protocolos, todas indicará que el software que corre en el servidor
las respuestas del servidor comienzan no tiene implementado el comando no estándar
siempre por un código numérico de respuesta que se ha solicitado.
de 3 dígitos.
Todo esto lo cuento ahora porque, nada más
Existen 5 tipos básicos de respuestas: conectar, el servidor nos enviará un código de
respuesta que típicamente (si todo va bien)
- 1xx Las respuestas cuyo código empieza será uno de estos dos:
por 1 son de carácter informativo.
- 2xx Las que empiezan por 2 indican que -200 Servidor preparado.
- 201 Servidor preparado, pero que sepas Donde grupo es el nombre del grupo al que
que no puedes publicar artículos a través de se refiere esa línea, último es el número
este servidor. asignado dentro de ese grupo al último artículo
publicado, primero es el número asignado al
En general, para nuestras pruebas nos servirá primer artículo publicado (y que, por supuesto,
cualquiera de los dos tipos, pero cuando aún no ha caducado y se conserva en la base
lleguemos al punto de experimentar con las de datos del servidor), y publicar indica si en
funciones de publicación de artículos (por ese grupo está permitido publicar artículos (y),
supuesto, si son pruebas, tendremos que
o si es de sólo lectura (n).
hacerlas en algún grupo destinado a ello, como
por ejemplo alt.test), necesitaremos un
Si último es menor que primero (lo cual sería
servidor que nos responda con código 200 al
conectar. absurdo) significa que no hay ningún artículo
en ese grupo.
SLAVE
HELP
Lo primero que nos interesará será ver la lista Si el servidor acepta la conexión de servidores
de grupos que tiene el servidor. Para ello esclavos, responderá con algo como esto:
ejecutamos el comando:
202 slave status noted
LIST
No he hecho pruebas suficientes como para
A lo cual el servidor nos responderá con hacer una estadística, pero sospecho que
tropecientas líneas, cada una de las cuales muchos servidores pasarán del tema, por lo
tendrá el formato: que no sé hasta que punto puede ser útil este
grupo último primero publicar comando.
Éste es un ejemplo del comando que pregunta Significa que en el servidor no se ha creado
por los nuevos grupos: ningún grupo nuevo desde la fecha y hora
especificados.
NEWGROUPS 040110 133005
Si recordamos lo que conté acerca de los códigos
El primer parámetro es la fecha, en el de respuesta, comprobamos que tiene sentido
formato YYMMDD, es decir, los dos primeros que se asigne el código 231 a esta respuesta,
dígitos identifican el año (¿os suena el famoso ya que las respuestas 2xx corresponden a
problema del año 2000 por representar años comandos ejecutados con éxito, y las
con sólo 2 cifras?...), los dos siguientes el mes, respuestas x3x se refieren a cuestiones acerca
y los dos últimos el día del mes. del mecanismo de distribución de artículos y
grupos entre servidores y, por supuesto, el
En el ejemplo, la fecha especificada es el 10 comando NEWGROUPS es uno de los utilizados
de Enero del año 2004. en la distribución de grupos.
Cuando nos interese algún artículo de la lista Si no somos un servidor, si no un usuario normal,
que nos proporcionó el servidor, lo solicitaremos probablemente no habremos utilizado el
con el comando: comando NEWNEWS, por lo que no
conoceremos el Message-ID correspondiente a
ARTICLE <27358342@n1.news.lco.es> cada mensaje del grupo que estamos leyendo.
Por tanto, no podríamos utilizar el comando
Donde el parámetro es el Message-ID ARTICLE en la forma que lo hemos visto.
correspondiente a ese artículo.
Por suerte, el comando ARTICLE permite que
Con esto terminamos los comandos que se le pase como parámetro, en lugar de un
describen la interacción típica entre dos Message-ID, el número asignado a ese artículo
servidores NNTP para la distribución de grupos dentro del grupo. Por ejemplo, para ver el
y artículos. A continuación veremos otros mensaje 3 del grupo que acabamos de
comandos (o variaciones de los ya vistos), que seleccionar con el comando GROUP
son los que suele utilizar un usuario normal al
(alt.sex.aliens), haremos:
conectar con un servidor NNTP.
ARTICLE 3
3.2.9. Seleccionando un grupo
El servidor podrá darnos cualquiera de estas
Lo más habitual es que un usuario trabaje en respuestas:
cada momento con un único grupo. Por ejemplo,
lo típico será visualizar seguidos todos los - 220 Nos da el Message-ID del artículo
mensajes nuevos de un mismo grupo que nos para futuras referencias y, a continuación, nos
interesen, luego quizá publicar un artículo en transmite el mensaje completo.
ese mismo grupo, etc. Para indicar al servidor - 221 - Nos da el Message-ID pero, a
el grupo con el que vas a trabajar: continuación, sólo nos transmite la cabecera
del mensaje. El cuerpo del mensaje podremos
GROUP alt.sex.aliens solicitarlo a continuación, tal y como explicaré
más tarde.
A lo cual el servidor nos responderá con un - 222 Nos da el Message-ID pero, a
código 411 si el grupo no existe, o bien con continuación, sólo nos transmite el cuerpo del
algo como esto: mensaje sin cabecera. La cabecera podremos
solicitarla a continuación, tal y como explicaré
211 20 3 21 alt.sex.aliens más tarde.
- 223 Sólo nos da el Message-ID. Si, a
Donde el código 211 nos indica que el comando continuación, queremos que nos transmita el
ha sido ejecutado con éxito, y a partir de ahora mensaje completo, podremos utilizar el comando
nuestro grupo de trabajo será alt.sex.aliens ARTICLE <message-id> o, si sólo nos
(indicado como último parámetro). Además, interesa una de las dos partes del mensaje
nos da como primer parámetro el número (cabecera o cuerpo) podremos utilizar los
total de artículos en ese grupo (20), el comandos que explicaré más tarde.
número correspondiente al primer artículo - 412 Indica que no hay ningún grupo
que hay en el servidor para ese grupo (3), y seleccionado, debido a que no utilizamos
el número del último artículo (21).
previamente un comando GROUP, por lo que grupo favorito esos días, lo que sin duda hará
el servidor no sabe a qué artículo nos estamos internamente nuestro cliente es solicitar al
refiriendo. servidor las cabeceras de todos los artículos
- 423 Nos dice que no existe artículo secuencialmente. Al tener las cabeceras (con
asignado al número especificado como el comando HEAD), podrá mostrarnos de un
parámetro (3) en el grupo seleccionado. vistazo algunos datos básicos, como el asunto
- 430 Nos dice que no existe ese artículo. o el remitente del mensaje. Una vez que
tenemos la lista de cabeceras simplificadas ya
3.2.11. ¿Cómo ver la cabecera de podemos escoger aquellos artículos que
un artículo? queremos ir leyendo.
GROUP alt.sex.aliens
HEAD 3
Todo este sistema para recorrer los artículos 3.2.14. Fijando la posición inicial
en realidad no es muy práctico en muchas del puntero
ocasiones.
Lo primero que habrá que hacer para recorrer
Por ejemplo, cuando hace varios días que no
una lista de artículos mediante un puntero será
visitamos Usenet y conectamos con nuestro
fijar el puntero en su posición inicial.
cliente de news para descargar todos los
Hay varias formas de hacer esto. Por ejemplo,
artículos que hayan sido publicados en nuestro
Fig 7.- Estado del puntero Pos ale, ya hemos visto el primer artículo, y
tras ejecutar STAT 3. queremos ver el siguiente de la lista:
¡Ojo! Que hay que tener dos
NEXT
cosas en cuenta. En primer
lugar, que el comando STAT
Así de sencillo. Con esto hemos fijado el puntero
sólo modifica el puntero de
en la siguiente posición dentro de la lista de
artículo si se usa como
artículos del grupo en el que estamos trabajando.
parámetro el número de artículo
dentro del grupo, tal y como
hemos hecho aquí, pero no si Si estábamos ya en el último artículo y no existe
se utiliza como parámetro un Message-ID (tal un siguiente, el servidor nos responderá con
y como dice en el RFC, no sirve para nada un error 421. Si no, nos responderá con un
usar STAT con Message-ID, aunque no debería código 223, indicándonos además el Message-
dar ningún error). En segundo lugar, hay que ID del artículo al que apunta ahora el puntero.
tener siempre en mente que los comandos
ARTICLE, HEAD, y BODY también modifican
Fig 8.- Estado del puntero
el puntero de artículo, siempre que sean usados después de ejecutar un
con números de artículo en lugar de con NEXT.
Message-ID. Por tanto, si queremos tener
controlado el puntero de artículo, tendremos 3.2.16. Vuelta atrás
que tener mucho ojo a la hora de usar estos
comandos. También tenemos la
posibilidad de avanzar hacia
Ahora que tenemos el puntero fijado en el
atrás en lugar de hacia alante:
artículo 3, ¿cómo podemos ver el artículo sin
modificar el puntero y sin tener que usar un
LAST
Message-ID (en cuyo caso todo esto no tendría
ningún sentido)? Pues utilizando la última
En este caso la respuesta de error será el código
variante de los versátiles comandos ARTICLE,
422 en caso de que estuviésemos ya en el
HEAD, y BODY:
primer artículo y no hubiese uno previo.
ARTICLE
Fig 9.- Estado del puntero Si al servidor le mola, nos responderá con un
después de ejecutar un código 340, invitándonos a que enviemos a
LAST.
continuación el artículo (recordemos que los
códigos 3xx nos informan de que un comando
3.2.17. Publicando un
ha sido ejecutado con éxito, y el servidor espera
artículo por tanto a que se complete un proceso con el
próximo paso).
Para el final hemos dejado la
que es sin duda una de las Si al servidor no le mola que publiquemos
funciones más importantes, artículos en ese grupo, nos responderá en
que es la publicación de cambio con un código 440, y ya no habrá más
nuestros propios artículos. que hacer.
Hay que tener en cuenta antes de nada que Por tanto, después del POST, si recibimos un
puede haber varios motivos por los cuales no código 340 simplemente tenemos que enviar
nos esté permitido publicar artículos. el artículo completo, con cabecera y cuerpo,
siguiendo el formato que explicaré ahora
En primer lugar, al conectar con el servidor mismito. :-)
éste nos tuvo que saludar con un código 200,
porque si lo hizo con un código 201 ya sabemos
3.2.18. ¡Adiós!
que podremos hacer cualquier cosa excepto
publicar nuestros propios artículos.
El último comando que falta por contar es el:
3.3.1. Cabecera del artículo fechas admitido por este estándar. Si, por
ejemplo, queremos especificar el 21 de
Las líneas de cabecera dan una serie de datos Noviembre del año 2003, a las 13:3005 según
imprescindibles, o no, acerca del artículo. el meridiano 0 (GMT):
Existen una serie de líneas de cabecera que
son obligatorias en todos los artículos, y Date: Fri, 21 Nov 03 13:30:05 GMT
son: From, Date, Newsgroups, Subject,
Message-ID, y Path. 3.3.1.3. Newsgroups:
A solicite la lista de artículos nuevos a un Este artículo se habrá publicado en los grupos
servidor B, y éste vea que en el Path de alt.sex.aliens, alt.sex.ganimedes, y
un artículo se encuentra el nombre del alt.sex.kripton pero, en cambio, las respuestas
servidor A, el servidor B sabrá entonces a ese artículo serán publicadas sólo en el grupo
que A conoce ya ese artículo, por lo que se especificado en la línea Followup-To, es decir,
ahorrará incluir ese artículo en la lista que en alt.sex.aliens.
facilitará al servidor A.
Esta es la forma correcta de publicar un artículo
cuando es realmente necesario hacerlo en varios
En el Path cada servidor va añadiendo su
grupos, ya que no se generará un crossposting,
nombre, separándolo de los demás con un
pues todas las respuestas quedarán en un único
signo !:
grupo.
Path:
Por supuesto, en los artículos construidos de
news.hackxcrack.com!n133.Lco.es!@ns
este modo es conveniente indicar en el texto
s.mad.ttd.es
del mensaje que aquellas personas que quieran
seguir el hilo de este artículo deberán hacerlo
Si el servidor news.hackxcrack.com solicitase
en el grupo alt.sex.aliens, ya que la mayoría
artículos nuevos a otro servidor, éste no incluiría
de la gente no suele ojear las cabeceras antes
en su lista de artículos nuevos aquellos que
de responder a un artículo. ;-)
tuviesen un Path como este, en el que se
encuentra ya el servidor news.hackxcrack.com.
3.3.1.8. References:
Un servidor malicioso podría sabotear la
distribución de artículos hacia un servidor si Cuando el artículo sea respuesta a otro artículo,
incluyese en el Path de los artículos que recibe deberá estar presente esta línea, que contendrá
la dirección del servidor al que quiere sabotear, como parámetro el Message-ID del artículo
aparte de la suya propia. original del cual es respuesta.
Para comentar algunas de las cabeceras Esta línea de cabecera se usa para una serie
opcionales (el artículo sería demasiado extenso de artículos especiales que contienen
si comentase todas), empezaré por esta, ya comandos de control para los servidores NNTP.
que es interesante por su relación con algunos
aspectos que hemos visto a lo largo del artículo. Los mensajes de control permiten varias
En concreto, puede ser útil para evitar el funciones, como cancelar la distribución de un
crossposting. artículo previamente publicado, avisar a otro
servidor de la creación o destrucción de un
Si tenemos, por ejemplo, un artículo que incluye grupo, etc.
estas dos líneas de cabecera:
Como ya dije cuando hablé del mecanismo de
Newsgroups: distribución de grupos y artículos, es más
alt.sex.aliens,alt.sex.ganimedes,alt.sex.kripton eficiente avisar de la creación de grupos nuevos
Followup-To: alt.sex.aliens según van apareciendo, en lugar de esperar a
que nos pregunten por ellos. La forma de
conseguirlo es mediante los comandos de Así que aquí os pongo una sesión completa de
control. ejemplo, y os voy comentando cada paso (los
comentarios irán en color negro). El servidor
La especificación detallada de estos comandos al que nos conectaremos será nsnmrro2-
de control la podéis encontrar en el RFC 1036, lo.nuria.telefonica-data.net
ya que el espacio para el artículo se me está
acabando ya. :-( Os dejo ya con esto, y espero veros el próximo
mes no sólo con un artículo, si no con dos! :-
3.3.2. Cuerpo del artículo O ¿Tenéis curiosidad? Pues esperad al próximo
mes, para ver de qué estoy hablando. ;-)
Por último, acerca el cuerpo del artículo sólo
he de mencionar un par de cosas. telnet nsnmrro2-lo.nuria.telefonica-
En primer lugar, como en NNTP para indicar data.net 119 (Nos conectamos al servidor)
el fin de un texto se utiliza una línea con un
único punto, si queremos, por algún extraño 200 nsnmrro2-lo.nuria.telefonica-data.net
motivo, que nuestro texto incluya una línea InterNetNews NNRP server INN 2.3.2
con un punto, tendremos que poner dos ready (posting ok). El servidor nos saluda
puntos en lugar de uno. Es decir, un texto con código 200, por lo que podemos utilizar
como este: este servidor para publicar artículos.
.. .
¿ GROUP alt.sex.aliens Seleccionamos este
--- grupo para trabajar con él
Será interpretado como:
211 77 14766 14847 alt.sex.aliens El
.. servidor nos informa de que el grupo
¿
--- seleccionado será a partir de ahora nuestro
grupo de trabajo. En el servidor hay 77 mensajes
(Se supone que es una cara). Ya que siempre almacenados en ese grupo, que van desde el
que hay dos puntos al comienzo de una línea número 14766 hasta el número 14847,
se contraen en uno solo, para distinguirlo del
punto simple que finalizaría el cuerpo del HEAD 14840 Queremos ver la cabecera del
mensaje. artículo 14840 del grupo alt.sex.aliens.
s.com!hermes.visi.com!news- Message-ID:
out.visi.com!petb <607b02db.0401071042.3f62ccf4@pos
e.visi.com!newsfeed2.dallas1.level3.ne ting.google.com> Esto ya no es opcional, ya
t!news.level3.com!postnews1.google.c que es el identificador de mensaje de este
om!not artículo. Vemos de nuevo que el artículo ha
-for-mail En esta línea vemos los servidores sido enviado a través de Google.
por los que ha circulado este artículo (al menos
hasta donde sabe éste servidor), para evitar NNTP-Posting-Host: 209.115.59.183 Otra
que sea distribuido una y otra vez a los mismos línea opcional que nos da la IP desde la que se
servidores. publicó el artículo. :-O
obligatoria Date ya informa de la fecha de BODY Esta vez vamos a pedir el cuerpo del
publicación? :-m artículo 14841.
NÚMERO 3: NÚMERO 4:
-PROXY: OCULTANDO NUESTRA IP. - CREA TU SEGUNDO TROYANO, INDETECTABLE E INMUNE A LOS ANTIVIRUS.
ASUMIENDO CONCEPTOS. CONOCIENDO EL RADMIN.
-PROXY: OCULTANDO NUESTRA IP. GESTIONANDO UNA SALA
ENCADENANDO PROXIES. DE ORDENADORES.
-PROXY: OCULTANDO NUESTRA IP. OCULTANDO EL RADMIN.
OCULTANDO TODOS NUESTROS PROGRAMAS TRAS LAS INSTALANDO EL RADMIN
CADENAS DE PROXIES. EN EQUIPOS REMOTOS.
-EL SERVIDOR DE HACKXCRACK: CONFIGURACIÓN Y MODO DE EMPLEO. - OCULTACIÓN DE IP POR NOMBRE DE DOMINIO.
-SALA DE PRACTICAS: EXPLICACIÓN. - CREA LETRAS DE IMPACTO PARA TUS DOCUMENTOS (LETRAS DE FUEGO).
-PRÁCTICA 1ª: SUBIENDO UN ARCHIVO A NUESTRO SERVIDOR. - CONSIGUE UNA IP FIJA.
-PRÁCTICA 2ª: MONTANDO UN DUMP CON EL SERV-U.
-PRÁCTICA 3ª: CODE/DECODE BUG. LÍNEA DE COMANDOS.
-PREGUNTAS Y DUDAS.
NÚMERO 6:
NÚMERO 5:
- PASA TUS PELICULAS A DIVX (STREAMING)
-HACK-OPINION: LA PIRATERÍA EN INTERNET. - PASA TUS PELICULAS A DIVX II (CODEC DIVX)
-ROOTKITS: LA PESADILLA DE CUALQUIER ADMINISTRADOR. - PUERTOS & SERVICIOS
-ROOTKITS: EL SR. NTROOT. - eMule: EL NUEVO REY DEL P2P
-WAREZ: APPZ, GAMEZ, MP3Z, DIVX, FTPZ, 0-DAY. - NUEVA SECCION: PROGRAMACION DESDE 0
-APRENDIENDO A COMPILAR PROGRAMAS. COMPILA TU PROPIO NETCAT. - CURSO DE VISUAL BASIC
-BUGS, ERRORES Y OTRAS FORMA DE JOD... - IPHXC: EL TERCER TROYANO DE HXC
-NETBIOS: ESTUDIO Y PENETRACIÓN DE SISTEMAS. - TENDENCIAS ACTUALES EN CODIGO MALICIOSO
-ASESINADOS POR LA LSSI. - OCULTACION DE FICHEROS. METODO STREAM (ads)
-LISTADO DE ORDENES PARA NETBIOS. - TRASTEANDO CON EL HARDWARE DE UNA LAN
-HACK-OPINION: PAGOS POR INTERNET SEGUROS YÁ.
NÚMERO 8:
NÚMERO 10:
NÚMERO 9:
- CURSO DE LINUX (Gestión de usuários)
- CURSO DE LINUX (Sistema de archivos) - APACHE + MySQL + PHP=Trio de Ases
- APACHE: COMPARTE ARCHIVOS MEDIANTE WEB. - CURSO DE VISUAL BASIC: ACCESO A DATOS(II)
- CURSO DE VISUAL BASIC: MI 1ª DLL \ ACCESO A - XML: El futuro de la trasferencia de datos
DATOS - SERIE RAW: DCC
- PORT SCANING: NMAP
- SERIE RAW: IRC
NÚMERO 11: NÚMERO 12:
- Curso de linux: programacion - Curso de linux: programacion C.
- Visual Basic: IIS bug exploit - Visual Basic: IIS bug exploit. Nuestro primer Scanner.
- Apache como proxy - APACHE: Configuralo de forma segura.
- Serie Raw: FTP - Serie Raw: FTP(II)
- Validacion XML: DTD - VALIDACION XML: DTD (II)
- Historia: Lady Augusta Ada Byron
NÚMERO 14:
NÚMERO 13: - Curso de linux: programacion C(III).
- Curso de linux: programacion C(II). - Visual Basic:Nuestro primer proyecto(II).
- Visual Basic:Nuestro primer proyecto. - Curso de PHP
- APACHE: Configuralo de forma segura. - Serie Raw: DNS.
- Serie Raw: HTTP. - CURSO XML: DOM(II).
- CURSO XML: DOM. - HIJACKING
C o n t r a R e e m b o l s o Giro Postal
Solo tienes que enviarnos un mail a preferente@hackxcrack.com Envíanos un GIRO POSTAL por valor de 45 EUROS a:
indicando: CALLE PERE MARTELL20, 2º 1ª.
- Nombre CP 43001 TARRAGONA
- Apellidos ESPAÑA
- Dirección Completa IMPORTANTE: En el TEXTO DEL GIRO escribe un mail de contacto
- Población o un número de Teléfono.
- Provincia
- Cógigo Postal Y enviarnos un mail a preferente@hackxcrack.com indicando:
- Mail de Contacto y/o Teléfono Contacto - Nombre
Es imprescindible que nos facilites un mail o teléfono de contacto. - Apellidos
- Tipo de Subscripción: CONTRAREEMBOLSO - Dirección Completa
- Número de Revista: - Población
Este será el número a partir del cual quieres subscribirte. Si deseas - Provincia
- Cógigo Postal
(por ejemplo) subscribirte a partir del número 5 (incluido), debes poner
un 5 y te enviaremos desde el 5 hasta el 15 (ambos incluidos) - Mail de Contacto y/o Teléfono Contacto
Es imprescindible que nos facilites un mail o teléfono de contacto.
APRECIACIONES: - Tipo de Subscripción: GIRO POSTAL
* Junto con el primer número recibirás el abono de 45 euros, precio - Número de Revista:
de la subscripción por 11 números (un año) y una carta donde se te Este será el número a partir del cual quieres subscribirte. Si deseas
indicará tu número de Cliente Preferente y justificante/factura de la (por ejemplo) subscribirte a partir del número 5 (incluido), debes poner
subscripción. un 5 y te enviaremos desde el 5 hasta el 15 (ambos incluidos)
* Puedes hacernos llegar estos datos POR MAIL,tal como te hemos
indicado; rellenando el formulario de nuestra WEB APRECIACIONES:
(www.hackxcrack.com) o enviándonos una carta a la siguiente dirección: * Junto con el primer número recibirás una carta donde se te indicará
CALLE PERE MARTELL Nº20, 2º-1ª tu número de Cliente Preferente y justificante/factura de la subscripción.
CP 43001 TARRAGONA * Puedes hacernos llegar estos datos POR MAIL,tal como te hemos
ESPAÑA indicado; o enviándonos una carta a la siguiente dirección:
* Cualquier consulta referente a las subscripciones puedes enviarla CALLE PERE MARTELL Nº20, 2º-1ª
por mail a preferente@hackxcrack.com CP 43001 TARRAGONA
ESPAÑA
* Cualquier consulta referente a las subscripciones puedes enviarla
por mail a preferente@hackxcrack.com