SlideShare una empresa de Scribd logo
1 de 68
Descargar para leer sin conexión
HACK X CRACK:              T C P / I P - - H E R R A M I E N TA S B A S I C A S

                            P
                            P
                            A
                            A
                            S
                            S
                            O
                            O
P A S Oa
P A    a
       a
       a
       a
       a
       a
       aa
        a
        a
        a
        a
        a                         3 SERVIDORES ON LINE PARA TUS PRACTICAS DE HACK

 NUMERO 18

 DESCUBRIMOS EL
POTENCIAL DEL XML
                                            TCP / IP: UDP
                                      PROTOCOLO DE DA AGRAMAS
                                         TOCOLO     DAT
                                            DE USUARIO




    LINUX
 COMUNICACION
ENTRE PROCESOS


PASO DE VARIABLES

 Nº 18 -- P.V.P. 4,5 EUROS
                    00018




  8 414090 202756

                                   LOS MEJORES ARTÍCULOS GRATIS EN NUESTRA WEB
   P C PA S O A PA S O : C R E A N D O F O R M U L A R I O S C O N P H P ! ! !
P
                              A
                              S
                              O
            aa
     P A S Oaa
            aa
            a
            a
            aa
             a
             a
             a
             a
             a
             a
             aa


EDITORIAL: EDITOTRANS S.L.                      Director de la Publicación
                                                J. Sentís
C.I.F:     B43675701
PERE MARTELL Nº 20, 2º - 1ª                     E-mail contacto
43001 TARRAGONA (ESPAÑA)                        director@hackxcrack.com
Director Editorial                              Diseño gráfico:
I. SENTIS                                       J. M. Velasco
E-mail contacto
director@editotrans.com                         E-mail contacto:
Título de la publicación
Los Cuadernos de HACK X CRACK.                  grafico@hackxcrack.com
Nombre Comercial de la publicacíón
PC PASO A PASO                                  Redactores
Web: www.hackxcrack.com                         AZIMUT, ROTEADO, FASTIC, MORDEA, FAUSTO,
Dirección: PERE MARTELL Nº 20, 2º - 1ª.         ENTROPIC, MEIDOR, HASHIMUIRA, BACKBONE,
            43001 TARRAGONA (ESPAÑA)
                                                ZORTEMIUS, AK22, DORKAN, KMORK, MAILA,
                                                TITINA, SIMPSIM... ... ... ... ...
¿Quieres insertar publicidad en PC PASO A Contacto redactores
PASO? Tenemos la mejor relación precio-difusión redactores@hackxcrack.com
del mercado editorial en España. Contacta con
nosotros!!!                                     Colaboradores
                                                Mas de 130 personas: de España, de Brasil, de
Director de Marketing                           Argentina, de Francia, de Alemania, de Japón y
Sr. Miguel Mellado                              algún Estadounidense.
Tfno. directo: 652 495 607
Tfno. oficina: 877 023 356
E-mail: miguel@editotrans.com                   E-mail contacto
                                                colaboradores@hackxcrack.com
                                                Imprime
                                                I.G. PRINTONE S.A. Tel 91 808 50 15
                                                DISTRIBUCIÓN:
                                                SGEL, Avda. Valdeparra 29 (Pol. Ind.)
                                                28018 ALCOBENDAS (MADRID)
                                                Tel 91 657 69 00 FAX 91 657 69 28
                                                WEB: www.sgel.es

                                                TELÉFONO DE ATENCIÓN AL CLIENTE: 977 22 45 80
                                                Petición de Números atrasados y Suscripciones (Srta. Genoveva)

                                                HORARIO DE ATENCIÓN:                DE 9:30 A 13:30
                                                                                   (LUNES A VIERNES)
                                                © Copyright Editotrans S.L.
                                                NUMERO 18 -- PRINTED IN SPAIN
                                                PERIOCIDAD MENSUAL
                                                Deposito legal: B.26805-2002
                                                Código EAN:      8414090202756
EDITORIAL
      el tiempo y las promesas
Grandes cambios se han sucedido en las últimas semanas
en este país. No, no me refiero al cambio de gobierno, eso
es lo de menos… lo importante son los cambios sociales,
esos que hacen de nosotros quienes realmente somos.            4   EDIT ORIAL

                                                               5   Cur so de PHP: Mane jo de F or mularios W eb
Hace tiempo, en el Foro de Hack x Crack se creó un hilo
                                                               11 XB O X (IV): Con vier t ela en un centr o multimedia
donde hablamos sobre el futuro de la humanidad. Unos,
pesimistas, argumentaban que el hombre acabaría                16 Pr ogramación bajo linux: Memoria com par tida
destruyendo su entorno y a sí mismos… otros, optimistas,       22 Cur so de T CP/IP (II) UDP
creían que en el ser humano sería lo suficientemente
                                                               40 Cur so XML: XSL
inteligente como para superar las adversidades de la
evolución.                                                     50 La r ealidad de los vir us inf or máticos


Yo no conozco el futuro, ignoro lo que le depara el futuro
a la humanidad, pero SI SE QUE EL FONDO DEL SER
                                                               10 Ser vidor HXC : Modo de em pleo.
HUMANO ES BUENO.
                                                               21 Colabora con noso tr os.
¿Argumento? Muy simple, la realidad. En Marzo pude             38 Descarga nues tr os logos y melodias.
ver como unos hombres y mujeres que acababan de salvarse
                                                               38 Ganador SUSE LINUX
de la muerte, volvían al peligro para salvar a otros hombres
y mujeres que ni tan siquiera conocían. Y pude ver como        39 Suscripciones.
otros hombres y mujeres que podrían haberse quedado a          65 Númer os atrasados.
salvo en sus casas, optaron por enfrentarse al peligro para
ayudar a sus semejantes.

Tengo la certeza de que el hombre, en su interior más
profundo, es bueno. Eso me da esperanza y fuerzas para
seguir adelante, fuerza para creer que unos pocos jamás
podrán doblegar a la mayoría… y la mayoría es buena, la
mayoría somos héroes, la mayoría sacamos de nuestro
interior lo mejor que tenemos en los momentos más
difíciles.

No olvidemos nunca a quienes han dejado de vivir para
regalarnos la vida al resto.

GRACIAS...
Curso de PHP
      Manejo de formularios web


                - FORMULARIOS EN PHP: Trabajaremos con los datos.
                - Enviaremos datos de una página a otra,
                - Los recogeremos y finalmente los trataremos.


            En la navegación web intervienen los                Si nos fijamos, veremos que las variables no
            siguientes elementos:                               poseen el símbolo $ delante. Esto se debe a
                       Un Cliente (Navegador Web)               que en realidad este modo de pasar variables
                       Un Servidor Web                          es común a todos los lenguajes (ASP, PHP,
                                                                JSP,...)
                       Una Petición (Request)
                       Una Respuesta (Response)
                                                                Las variables las recibe la página destino del
                                                                enlace, y ya podemos trabajar directamente
            En pocas palabras, un cliente (Navegador
                                                                con ellas; pero no siempre se definen
            Web) realiza peticiones (Request) a un
                                                                automáticamente las variables recibidas por
            Servidor Web que responde (Response) las
                                                                parámetro en las páginas Web, depende de
            páginas web que están almacenadas en él.
                                                                una variable de configuración de PHP:
                                                                register_globals, que tiene que estar
            Normalmente cuando se desarrollan páginas
                                                                activada para que así sea.
            Web, es necesario que los datos recogidos
            en un primer momento se “arrastren” entre
                                                                A continuación vamos a explicar esto en un
            las diferentes páginas mientras nos sean
                                                                ejemplo. Tenemos dos páginas, registro1.php
            necesarios.
                                                                y registro2.php, que siguen los pasos para
                                                                un registro simple de usuarios.
            Un ejemplo muy claro de esto es un sistema
            de registro de usuarios, todos nos hemos
                                                                <HTML>
            registrado en algún portal o algún “site”, y
                                                                <HEAD>
            para realizar el registro completo hay que
                                                                <TITLE>Registro Paso 1</TITLE>
            realizarlo por pasos, donde cada paso es una
                                                                </HEAD>
            página Web diferente y los datos obtenidos
                                                                <BODY>
            en la primera página se deben mantener
                                                                 <FORM NAME=”formRegistro1”>
            hasta la finalización del registro.
                                                                 <TABLE BORDER=”1”>
                                                                  <TR>
            Variables a través de la URL                           <TD>Nombre:</TD>
                                                                   <TD><INPUT TYPE=”TEXT” NAME=”NOMBRE” VALUE=””></TD>
            Para pasar las variables de una página PHP            </TR>
            a otra, lo podemos hacer introduciendo dicha          <TR>
            variable dentro del enlace hipertexto de la            <TD>Apellidos:</TD>
            página destino.                                        <TD><INPUT TYPE=”TEXT” NAME=”APELLIDOS” VALUE=””></TD>
                                                                  </TR>
            La sintaxis sería la siguiente:                       <TR>
                                                                   <TD>Email:</TD>
 <a href="destino.php?var1=valor1&var2=valor2&...">enlace</a>      <TD><INPUT TYPE=”TEXT” NAME=”EMAIL” VALUE=””></TD>
                                                                  </TR>


PC PASO A PASO Nº 18                                                                                             Página 5
Programación PHP - Programación PHP - Programación PHP - Programación PHP




 </TABLE>
 </FORM>
   <A HREF="javascript:window.location.ref. = 'registro2.php?nombre='
+ document.formRegistro1.NOMBRE.value + '&apellidos=' +
document.formRegistro1.APELLIDOS.value + '&email=' +
document.formRegistro1.EMAIL.value">Enviar</A>
</BODY>
</HTML>



                                                                        Si nos fijamos en la barra de dirección del
                                                                        navegador de la imagen anterior, en la URL
                                                                        de la página aparecen las variables junto al
                                                                        valor que les hemos rellenado en el formulario.

                                                                        $HTTP_GET_VARS

                                                                        También es posible recopilar en una variable
                                                                        tipo array el conjunto de variables que han
                                                                        sido enviadas al script por este método a
                                                                        partir de la variable de sistema
                                                                        $HTTP_GET_VARS, que es un array asociativo.

                                                                        <HTML>
                                                                        <HEAD>
                                                                        <TITLE>Registro Paso 2</TITLE>
                                                                        </HEAD>
                                                                        <BODY>
<HTML>
                                                                         Usuario Registrado:
<HEAD>
                                                                         <TABLE BORDER=”1”>
<TITLE>Registro Paso 2</TITLE>
                                                                          <TR>
</HEAD>
                                                                            <TD>Nombre:</TD>
<BODY>
                                                                            <TD><? print($HTTP_GET_VARS["nombre"]);?></TD>
 Usuario Registrado:
                                                                          </TR>
 <TABLE BORDER=”1”>
                                                                          <TR>
  <TR>
                                                                            <TD>Apellidos:</TD>
    <TD>Nombre:</TD>
                                                                            <TD><? print($HTTP_GET_VARS["apellidos"]);?></TD>
    <TD><?= $nombre;?></TD>
                                                                          </TR>
  </TR>
                                                                          <TR>
  <TR>
                                                                            <TD>Email:</TD>
    <TD>Apellidos:</TD>
                                                                            <TD><? print($HTTP_GET_VARS["email"]);?></TD>
    <TD><?= $apellidos;?></TD>
                                                                          </TR>
  </TR>
                                                                         </TABLE>
  <TR>
                                                                        </BODY>
    <TD>Email:</TD>
                                                                        </HTML>
    <TD><?= $email;?></TD>
  </TR>                                                                 Aunque podamos recoger variables que se
 </TABLE>                                                               definen directamente en nuestra página,
</BODY>                                                                 resulta más seguro utilizar $HTTP_GET_VARS
</HTML>                                                                 por dos razones:


 Página 6                                                                                                   PC PASO A PASO Nº 18
Programación PHP - Programación PHP - Programación PHP - Programación PHP




               La primera es que así nos aseguramos que                  <TR>
             esa variable viene realmente de la URL                       <TD>Nombre:</TD>
                                                                          <TD><INPUT TYPE=”TEXT” NAME=”NOMBRE” VALUE=””></TD>
               La segunda, que así nuestro código será
                                                                         </TR>
             más claro cuando lo volvamos a leer, porque
                                                                         <TR>
             quedará especificado que esa variable
                                                                          <TD>Apellidos:</TD>
             estamos       recibiéndola         por     la   URL.
                                                                          <TD><INPUT TYPE=”TEXT” NAME=”APELLIDOS” VALUE=””></TD>
                                                                         </TR>
             $_GET                                                       <TR>
                                                                          <TD>Email:</TD>
             A partir de la versión 4.1.0 de PHP se ha                    <TD><INPUT TYPE=”TEXT” NAME=”EMAIL” VALUE=””></TD>
             introducido el array asociativo $_GET, que                  </TR>
             es idéntico a $HTTP_GET_VARS, aunque un                     <TR>
             poco más corto de escribir.                                   <TD COLSPAN=”2” ALIGN=”CENTER”>
                                                                           <INPUT TYPE=”SUBMIT” NAME=”enviar” VALUE=”Enviar”>
             Variables a través de Formularios                             </TD>
                                                                         </TR>
             El proceso es similar al explicado para las                </TABLE>
             URLs, pero en esta ocasión el envió de                     </FORM>
             variables de una página PHP a otra no se                  </BODY>
             realiza a través de la URL, si no enviándolas             </HTML>
             a través de un formulario.

             Al igual que en las variables a través de la
             URL, las variables que se procesan a través
             del envío de formularios no siempre se definen
             automáticamente, ello depende de una
             va r i a b l e d e c o n f i g u ra c i ó n d e P H P :
             register_globals, que tiene que estar
             activada para conseguir que las variables se
             definan automáticamente.

             Para ver el funcionamiento del procesamiento
             de variable a través de los formularios vamos
             a realizar el mismo ejemplo que en el apartado
             anterior.

             Tenemos dos páginas, registro1.php y
             registro2.php, que siguen los pasos para un
             registro simple de usuarios.

<HTML>                                                                 Como podemos ver, el código es exactamente
<HEAD>                                                                 igual al del ejemplo de procesamiento de
<TITLE>Registro Paso 1</TITLE>                                         variables a través de la URL, en lo único que
</HEAD>                                                                se diferencia es en la línea de definición del
<BODY>                                                                 formulario:
 <FORM NAME=”formRegistro1” ACTION=”registro2.php”
                                                                       <FORM NAME=”formRegistro1” ACTION=”registro2.php” METHOD=”POST”
METHOD=”POST” >
                                                                       >
 <TABLE BORDER=”1”>


 PC PASO A PASO Nº 18                                                                                                    Página 7
Programación PHP - Programación PHP - Programación PHP - Programación PHP




                                                              Si ejecutamos el código anterior no recibiremos
               y en el botón que realiza el envío:            las variables en registro2.php ¿porqué? PHP
                                                              distingue entre mayúsculas y minúsculas, es
 <INPUT TYPE=”SUBMIT” NAME=”enviar” VALUE=”Enviar”>           CASE-SENSITIVE, por lo que las variables
                                                              $nombre, $apellidos y $email son nuevas para
               Vamos a prestar especial atención a la línea   el y no tienen ningún valor.
               en la que se define el formulario, ACTION
               nos indica la página destino y METHOD, nos     El siguiente código es el correcto:
               indica el método (GET o POST) utilizado para
               el envío del formulario.                       <HTML>
                                                              <HEAD>
               Si METHOD es igual a GET las variables del     <TITLE>Registro Paso 2</TITLE>
               formulario se envían a través de la URL, y     </HEAD>
               si METHOD es igual a POST, el envío de         <BODY>
               variables no es visible a través de la URL.     Usuario Registrado:
                                                               <TABLE BORDER=”1”>
               ¿Cuál es el mejor a utilizar? Pues esto
                                                                <TR>
               dependerá del caso concreto en el que nos
                                                                  <TD>Nombre:</TD>
               encontremos, pero siempre queda mucho
                                                                  <TD><?= $NOMBRE;?></TD>
               más elegante y seguro que las variables no
                                                                </TR>
               estén visibles en la URL. Además la longitud
                                                                <TR>
               de cadena permitida en la URL es de 255,
                                                                  <TD>Apellidos:</TD>
               así que es aconsejable si se van a rellenar
                                                                  <TD><?= $APELLIDOS;?></TD>
               muchos datos que en METHOD utilizado sea
                                                                </TR>
               POST.
                                                                <TR>
                                                                  <TD>Email:</TD>
<HTML>
                                                                  <TD><?= $EMAIL;?></TD>
<HEAD>
                                                                </TR>
<TITLE>Registro Paso 2</TITLE>                                 </TABLE>
</HEAD>                                                       </BODY>
<BODY>                                                        </HTML>
 Usuario Registrado:
 <TABLE BORDER=”1”>
  <TR>
   <TD>Nombre:</TD>
   <TD><?= $nombre;?></TD>
  </TR>
  <TR>
   <TD>Apellidos:</TD>
   <TD><?= $apellidos;?></TD>
  </TR>
  <TR>
   <TD>Email:</TD>
   <TD><?= $email;?></TD>
  </TR>                                                       Como podemos observar en la imagen anterior,
 </TABLE>                                                     las variables no están visibles en la URL de la
</BODY>                                                       página, pero esto cambiaría si el METHOD
</HTML>                                                       utilizado fuese GET.


 Página 8                                                                                           PC PASO A PASO Nº 18
Programación PHP - Programación PHP - Programación PHP - Programación PHP




          $HTTP_POST_VARS                                de la URL y la segunda, que así nuestro
                                                         códigoserá más claro cuando lo volvamos a
          También es posible recopilar en una variable   leer, porque quedará especificado que esa
          tipo array el conjunto de variables que han    variable estamos recibiéndola por la URL
          sido enviadas al script por este método a
          partir de la variable de sistema               $_POST
          $HTTP_POST_VARS, que es un array
          asociativo.                                    A partir de PHP 4.1.0 se pueden recoger las
                                                         variables de formulario utilizando también el
          La sintaxis es la siguiente:                   array asociativo $_POST, que es el mismo que
                                                         $HTTP_POST_VARS, pero más corto de escribir.
                   $HTTP_POST_VARS["nombre"]
                                                         En el próximo número…
          Aunque podamos recoger variables que se
          definen directamente en nuestra página,        En el próximo número comenzaremos a
          resulta más seguro utilizar $HTTP_POST_VARS    programar sockets, programar socket nos
          por dos razones, la primera que así nos        permitirá hacer un emulador de Telnet, hacer
          aseguramos que esa variable viene realmente    un FTP, ... y todo gracias al PHP ;)




PC PASO A PASO Nº 18                                                                                     Página 9
SERVIDOR DE HXC
                                               MODO DE EMPLEO

- Hack x Crack      ha habilitado tres
servidores para que puedas realizar las                                                                 Explicamos esto porque la mayoría, seguro que piensa en
                                                                                                        un Servidor Web como en algo extraño que no saben ni
prácticas de hacking.                                                                                   donde está ni como se accede. Bueno, pues ya sabes dónde
                                                                                                        se encuentran la mayoría de IIS (en Inetpub) y cuál es
- Las IPs de los servidores de hacking las                                                              la página por defecto (Inetpubwwwrootdefault.htm). Y
encontrarás en EL FORO de la revista                                                                    ahora, piensa un poco… … ¿Cuál es uno de los objetivos de
( w w w . h a c k x c r a c k . c o m ) . Una vez en el foro entra                                      un hacker que quiere decirle al mundo que ha hackeado
en la zona COMUNICADOS DE HACK X CRACK (arriba del                                                      u n a We b ? P u e s e s t á c l a r o, e l o b j e t i vo e s c a m b i a r ( o s u s t i t u i r )
todo) y verás varios comunicados relacionados con los                                                   el archivo default.html por uno propio donde diga “hola,
servidores. No ponemos las IP aquí porque es bueno                                                      soy DIOS y he hackeado esta Web” (eso si es un lamer ;)
acostumbrarte a entrar en el foro y leer los comunicados.
Si hay alguna incidencia o cambio de IP o lo que sea, se                                                A partir de ese momento, cualquiera que acceda a ese
comunicará en EL FORO.                                                                                  s e r v i d o r, v e r á e l d e f a u l t . h t m m o d i f i c a d o p a r a v e r g ü e n z a d e l
                                                                                                        “site” hackeado. Esto es muy genérico pero os dará una
                                                                                                        idea de cómo funciona esto de hackear Webs ;)
- Actualmente tienen el BUG del Code /
D e c o d e . La forma de “explotar” este bug la explicamos                                             - Cuando accedas a nuestro servidor mediante el CODE /
extensamente en los números 2 y 3. Lo dejaremos así por                                                 DECODE BUG, crea un directorio con tu nombre (el que mas
un tiempo (bastante tiempo ;) Nuestra intención es ir                                                   te guste, no nos des tu DNI) en la unidad d: a ser
habilitando servidores a medida que os enseñemos distintos                                              posible y a partir de ahora utiliza ese directorio para hacer
tipos de Hack.                                                                                          t u s p r á c t i c a s . Ya s a b e s , s u b i r n o s p r o g r a m i t a s y p r a c t i c a r
                                                                                                        con ellos :) ... ... ¿cómo? ¿que no sabes crear directorios
- En los Servidores corre el Windows 2000 con el IIS
de Servidor Web. No hemos parcheado ningún bug, ni                                                      mediante el CODE/DECODE BUG... repasa los números 2 y
t a n s i q u i e ra e l R P C y p o r s u p u e s t o t a m p o c o h e m o s i n s t a l a d o        tres de Hack x Crack ;p
n i n g ú n S e r v i c e Pa c k . Pa ra q u i e n p i e n s e q u e e s o e s u n e r r o r
(lógico si tenemos en cuenta que el RPC provoca una caída                                               Puedes crearte tu directorio donde quieras, no es necesario
completa del sistema), solo decirte que AZIMUT ha                                                       que sea en d:mellamojuan. Tienes total libertad!!! Una
configurado un firewall desde cero que evita el bug del                                                 i d e a  e s    c r e a r l o , p o r   e j e m p l o , e n
RPC, (bloqueo de los puertos 135 (tcp/udp), 137 (udp),                                                  d:xxxsystem32default10019901mellamojuan (ya irás
138 (udp), 445 (tcp), 593 (tcp)). La intención de todo esto                                             aprendiendo que cuanto mas oculto mejor :)
es, precisamente, que puedas practicar tanto con el
CODE/DECODE como con cualquier otro “bug” que conozcas
(y hay cientos!!!). Poco a poco iremos cambiando la                                                     Es posiblemente la primera vez que tienes la oportunidad
c o n f i g u ra c i ó n e n f u n c i ó n d e l a e x p e r i e n c i a , l a i d e a e s t e n e r    de investigar en un servidor como este sin cometer un delito
los Servidores lo menos parcheados posibles                                                 pero        (nosotros te dejamos y por lo tanto nadie te perseguirá).
mantenerlos operativos las 24 horas del día. Por todo ello                                              Aprovecha la oportunidad!!! e investiga mientras dure esta
y debido a posibles cambios de configuración, no olvides                                                iniciativa (esperemos que muchos años).
visitar el foro (Zona Comunicados) antes de “penetrar” en
nuestros servidores.                                                                                    - En este momento tenemos mas de 600 carpetas de peña
                                                                                                        que, como tu, está practicando. Así que haznos caso y crea
- Cada Servidor             tiene dos unidades (discos duros duros):                                    t u p r o p i a c a r p e t a d o n d e t r a b a j a r.
* La unidad c:              --> Con 40GB y Raíz del Sistema
* La unidad d:              --> Con 40GB
* La unidad e:              --> CD-ROM

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 ;)
Serie Xbox Life (IV)
        Convirtiendo nuestra Xbox en un
                centro Multimedia.


          - ¿Podemos ver películas en DivX con la XBOX?
          - ¿Y escuchar musica en formato MP3?
          - ¿Y visualizar fotos?

          Aquí estamos un mes más, antes de todo           Pues muy sencillo, dependiendo del lector que
          quiero agradecer a los que apoyan esta serie,    tengamos, podremos usar CD´s, CD-RW, DVD
          es muy grato ver recompensado el esfuerzo.       y determinadas marcas de cada uno de éstos.
          GRACIAS.
                                                           Samsung:
          Este mes vamos a descubrir los distintos         Este lector es el
          lectores DVD que tiene la consola Xbox y         mejor, lee lo que
          vamos a instalar y configurar unos programas     le metas, tanto
          que nos permitan ver películas DivX, escuchar    CD´s        como
          MP3, ver fotos, incluso ahorrarnos el tener      D V D ´ s         y
          que comprar el Kit DVD para ver las películas    prácticamente de
          en este formato.                                 cualquier marca.
                                                           En la imagen de
          Como es de costumbre en esta serie, os voy       arriba podéis ver
          a detallar lo que necesitamos para hacer todas   cómo es la
          estas cosas.                                     bandeja de este
                                                           lector, así podréis
          Lo que necesitamos:                              saber qué lector
            Xbox con mod chip.                             lleva vuestra
            Evox instalado en nuestra consola              consola        sin
            Media Center (la versión más reciente)         necesidad de
                                                           abrirla.
            DVDX2.
            ZXBTOOLS (Ultima versión).
                                                           Philips:
            Pc Preparado.
                                                           Este lector es el
                                                           segundo si los
          Todos los programas los podréis encontrar en
                                                           ordenamos de
          la Web de la revista (www.hackxcrack.com).
                                                           mejor a peor. Lee
                                                           algunos CD´s y
          Los DVD de XBOX:                                 DVD´s           de
                                                           m a r c a s
          Algunos de vosotros sabréis ya que hay 3         conocidas,
          fabricantes distintos de lectores para esta      siempre y cuando
          consola, para quien no lo sepa, las marcas       se calibre la lente
          son Samsung, Thompson y Philips.                 para que los lea,
                                                           ya que el láser encargado de leer los CD´s
          Os podéis estar preguntando, ¿para qué os        está tan bajo de potencia que no es capaz de
          cuento esto?                                     leerlos.


PC PASO A PASO Nº 18                                                                                       Página 11
Programación PHP - Programación PHP - Programación PHP - Programación PHP




            El calibrar la lente lleva sus riesgos, ya que    consola para manejaros por los menús, pero os habréis
                                                              ahorrado 30€.
            le acortas la vida y en muchos casos, si se
            hace mal, puede dejar de funcionar.               Instalando y Configurando El Xbox Media
                                                              Center:
            Thompson:
                                                              Lo descargamos de la web, lo descomprimimos en una
                                        Este podríamos
                                                              carpeta y veremos esto:
                                        decir que es el
                                        peor, ya que no
                                        lee CD´s, solo
                                        CD-RW y de
                                        lagunas marcas
                                        como VERBATIM.

                                    Con los DVD
                                    también tenemos
                                    el     mismo
            problema y lo más aconsejable es usar los
            de marca PRIMCO.
                                                              Nos metemos en la carpeta “xbmc-2004-01-02” y veremos
            Instalando DVDX2:                                 esto:

            Nos lo descargamos de la Web y lo
            descomprimimos en una carpeta del pc.
            Veremos dos archivos: el dvdx_v2.0.iso y
            dvdx2.txt.

            El txt lo podemos borrar, sólo trae información
            de quien lo creó.

            Extraemos dvdx_v2.0.iso con el ZXBTOOLS
            (como os enseñé el mes pasado) y tendremos
            una carpeta llamada “Media” y un archivo          Editamos con el bloc de notas el archivo “XboxMediaCenter.xml”.
            llamado “default.xbe”.                            Aquí os digo os enseño cómo he configurado el archivo,
                                                              lo configuramos a nuestro gusto (lo que está en negrita
            Ahora tenemos que pasar la carpeta y el           es la explicación):
            archivo al HD de la consola. Si tenéis
            configurado el evox como expliqué                 <xboxmediacenter>
            anteriormente, copiáis todo a la carpeta MP
            que creamos en el artículo de Evolution X. Si     #Skin que cargará al iniciar el programa, lo dejamos
            no fuera así, lo copiáis a la carpeta que         como está!#
            corresponda.
                                                               <skin>MediaCenter</skin>
            La transferencia la hacemos por FTP. Copiamos
            todo, reiniciamos la consola y lo veremos en      #Dirección IP, Máscara subred, Puerta de enlace por
            el apartado donde los hayáis copiado (en mi       defecto, Nombre del server (Dejad en blanco si
            caso Media Players).                              queréis usar los valores del Evolution X) !#

            Nos preparamos unas palomitas, arrancamos          <ipadres>-</ipadres>
            el DVDX2, metemos la película y a disfrutar.       <netmask>-</netmask>
            Con esto tendréis que usar el mando de la          <defaultgateway>-</defaultgateway>


Página 12                                                                                          PC PASO A PASO Nº 18
Programación PHP - Programación PHP - Programación PHP - Programación PHP




 <nameserver>192.168.0.1</nameserver>                         #Ruta donde guarda el contenido destinado a la
<CDDBIpAdres>194.97.4.18</CDDBIpAdres>                       memoria caché de los álbumes de fotos (lo dejamos
<CDDBEnabled>yes</CDDBEnabled>                               como está) !#

#Determina las unidades del hd de la consola que              <albums>$HOMEalbums</albums>
se puede usar !#
                                                             #Lo dejemos como esta, son los valores del mando !#
 <useFDrive>yes</useFDrive>
 <useGDrive>no</useGDrive>                                    <delays>
                                                                <remote>
 #Valores del servidor proxy!#
                                                                 <move>220</move>
 <httpproxy>-</httpproxy>                                        <repeat>300</repeat>
 <httpproxyport>-</httpproxyport>                               </remote>
#Servidor remoto que nos dará la fecha y hora!#                 <controller>
                                                                 <move>220</move>
<timeserver>207.46.248.43</timeserver>                           <repeat>220</repeat>
                                                                </controller>
#El dashboard que arrancará al salir!#                        </delays>

<dashboard>C:evoxdash.xbe</dashboard>                        # Aquí podemos especificar los iconos que se
                                                             mostrarán en cada apartado !#
#Directorios alternativos para los subtítulos de las
                                                              #Para los archivos !#
películas, no os olvidéis de crear esta carpeta !#

<subtitles>$HOMEsubtitles</subtitles>                        <filetypeicons>
                                                               <xbe>defaultProgram.png</xbe>
 #Lo dejamos como está !#                                     </filetypeicons>
 <startwindow>0</startwindow>
                                                               #Esta es la configuración base del menú, es decir
#Extensiones de las fots, Videos y Sonidos que               lo que vamos a ver en el programa, en cada sección.
queremos que acepte. Si falta alguna, agregadla!#            Podemos agregar o quitar la que queramos, en name
                                                             ponemos el nombre que queramos y en path ponemos
<pictureextensions>.png|.jpg|.jpeg|.bmp|.gif|.ico|.tif|.ti
                                                             la ruta a la carpeta, por ejemplo, he quitado el acceso
ff|.tga|.pcx</pictureextensions>
                                                             a c: y os aconsejo que hagáis lo mismo.!#
<musicextensions>.m4a|.flac|.ac3|.aac|.nfo|.pls|.rm|.
mpa|.wav|.wma|.ogg|.mp3|.mp2|.m3u</musicextensions>          #Configuración para Mis programas#

<videoextensions>.nfo|.rm|.m3u|.ifo|.mov|.qt|.divx|.xv
id|.bivx|.vob|.pva|.wmv|.asf|.asx|.ogm|.m2v|.avi|.bin|.      <myprograms>
dat|.mpg|.mpeg|.mkv|.avc|.vp3|.svq3|.nuv|.viv|.dv|.fli         <bookmark>
</videoextensions>                                              <name>Programas en E:</name>
                                                                <path>E:apps</path>
 <!-- path where xbmc should store its thumbnails !#
                                                               </bookmark>
<thumbnails>$HOMEthumbs</thumbnails>                          <bookmark>
                                                                <name> Programas en F:</name>
 #Directorio donde almacenará los atajos (lo dejamos            <path>F:apps</path>
como está !#                                                   </bookmark>
                                                               <bookmark>
<shortcuts>$HOMEshortcuts</shortcuts>
                                                                <name>Programas en DVD </name>
 #Ruta donde guarda el contenido destinado a la                 <path>D:</path>
memoria caché (lo dejamos como está) !#                        </bookmark>
                                                             </myprograms>
 <imdb>$HOMEimdb</imdb>


 PC PASO A PASO Nº 18                                                                                   Página 13
Programación PHP - Programación PHP - Programación PHP - Programación PHP




 #Configuración para las fotos !#                        #Mis archivos !#

 <pictures>                                              #Más de lo mismo, venga, a configurar !#
  <default></default>
 <bookmark>                                              <files>
   <name>Fotos E </name>                                   <bookmark>
   <path>E:fotos</path>                                    <name>E :</name>
  </bookmark>                                                <path>E:</path>
  <bookmark>
                                                           </bookmark>
   <name>Fotos F:</name>
                                                           <bookmark>
   <path>F:fotos</path>
                                                             <name>F: drive</name>
  </bookmark>
                                                             <path>F:</path>
  <bookmark>
   <name>Fotos en DVD</name>                               </bookmark>
   <path>D:</path>                                      <bookmark>
  </bookmark>                                                <name>DVD</name>
                                                             <path>D:</path>
#Ahora llega lo interesante, estos apartado son para       </bookmark>
hacer stemig o lo que es lo mismo, pillar los archivos     <bookmark>
en este caso las fotos del PC, por medio del cable           <name>SMB</name>
RJ-45, y aquí se pueden definir los valores. Podéis                <path>smb://192.168.0.1/archivos/</path>
quitar los que no uséis; yo solo uso el SMB, que más       </bookmark>
adelante os explicaré cómo se configura. A partir de
                                                          </files>
aquí quitaré los demás !#

  <bookmark>
                                                          # Mi música !#
   <name>XNS</name>
   <path>xns://192.168.0.1:1400/</path>
                                                          <music>
  </bookmark>
                                                           <default></default>
  <bookmark>
                                                           <bookmark>
   <name>XBMS</name>
   <path>xbms://192.168.0.1:1400/</path>                     <name>Musica E: </name>
  </bookmark>                                                <path>E:MP3</path>
                                                           </bookmark>
#Aquí está la configuración del strem por SMB,             <bookmark>
dependiendo de cómo hayáis compartido la carpeta             <name>Musica F:</name>
en el pc, se configura de una manara o de otra!#             <path>F:MP3</path>
                                                           </bookmark>
<bookmark>                                                 <bookmark>
   <name>SMB</name>                                          <name>MP3 DVD</name>
                                                             <path>D:</path>
#Este es un ejemplo
                                                           </bookmark>
smb://dominio;Usuario:contraseña@servidor/carp
                                                           <bookmark>
eta compartida !#
                                                             <name>SMB</name>
#Así tengo configurado el mío !#
                                                               <path>smb://192.168.0.1/mp3/</path>
                                                         </bookmark>
<path>smb://192.168.0.1/fotos/</path>
                                                          </music>
</bookmark>
 </pictures>


 Página 14                                                                               PC PASO A PASO Nº 18
Programación PHP - Programación PHP - Programación PHP - Programación PHP




 #Mis videos !#                                            Pinchamos en la pestaña compartir,
                                                           seleccionamos la casilla “Compartir esta carpeta
 <video>                                                   en la red”, cambiamos el nombre si ya esta
  <default></default>                                      ocupado y aceptamos.
<bookmark>
                                                           Esto lo hacemos con todas las carpetas que
    <name>Viedos E:</name>
                                                           hemos puesto en los apartados de SMB.
    <path>E:videos</path>
  </bookmark>
                                                           Pues ya está todo. Pasamos todo lo que hay
  <bookmark>
                                                           en esta carpeta a su carpeta correspondiente
    <name>Videos F:</name>                                 del HD de la consola, lo arrancamos y a
    <path>F:videos</path>                                disfrutar.
  </bookmark>
  <bookmark>                                               Con un poco de investigación os haréis con el
    <name>Videos DVD</name>                                control de todo, es muy sencillo e intuitivo.
    <path>D:</path>
  </bookmark>                                              El mes que viene jugaremos online GRATIS.
    <name>SMB</name>                                       Hasta entonces.
<path>smb://192.168.0.1/videos/</path>    </bookmark>
                                                           Salu2.
 </video>
</xboxmediacenter>


Ya se ha acabado la configuración, así que guardamos los
cambios, y salimos del bloc de notas.

Ahora tenemos que compartir las carpetas en nuestro PC
para que a través de la red podamos cargar películas o
escuchar
música.

En Windows XP se haría de la siguiente manera:

Abrimos el explorador
de Windows, nos
situamos encima de
la carpeta que
queremos compartir,
por ejemplo el de
videos, pinchamos
con el botón derecho
sobre la carpeta y
pinchamos         en
propiedades:




 PC PASO A PASO Nº 18                                                                                         Página 15
ProgramaciOn en GNU/LiNUX
                            Memoria Compartida
                          el_chaman. Luis U. Rodríguez Paniagua

                           - Intercambio de datos entre procesos                       - pipes
                           - Memoria compartida                                        - sockets
                           - Colas de mensajes



            1. Presentación                                         2.1. Solicitud                   de      memoria
                                                                    compartida
            En el presente artículo veremos como es
            posible intercambiar datos entre dos procesos.          La primera operación que debemos aprender
            Dispondremos de tres mecanismos básicos:                es la necesaria para solicitar una zona de
            Memoria compartida, colas de mensajes y                 memoria compartida. La manera de hacer
                                                                    esto es mediante la función:
            empleo de pipes y sockets. Analizaremos en
            el presente artículo las dos primeras formas.           #include <sys/types.h>
                                                                    #include <sys/ipc.h>

            2. Memoria compartida.                                  #include <sys/shm.h>
                                                                    int shmget(key_t key, int size, int shmflg);
            Este será el método más rápido de comunicar
            dos procesos entre sí. Consiste en hacer que            Retorna: -1 en caso de error, o el identificador
            dos procesos compartan una zona común de                de la zona de memoria compartida en otro
            memoria de manera que los dos procesos                  caso.

            podrán leer y escribir en dicha zona de                 shmget reserva una zona de memoria de
            memoria.                                                tamaño size bytes devolviendo un identificador
                                                                    que nos permitirá manejar dicha zona de
            Esto, que en teoría es sencillo de entender,
                                                                    memoria. El objetivo de key es similar al visto
            a la hora de llevarlo a la práctica se complica
                                                                    en la llamada de semáforos semget (es decir,
            un poco. Cada vez que ejecutamos un proceso,            pasar una clave única que servirá en nuestro
            este tiene asociada una parte de la memoria             caso para identificar de manera única la zona
            exclusivamente para él. Ahí será donde guarde           de memoria asociada a nuestro proceso).
            sus   datos   ( va r i a b l e s ,   pila,   etc...).
                                                                    En cuanto a shmflag será una máscara de bits
            Si en alguna ocasión este proceso intenta               que indicarán el modo de adquisición del
            acceder a una zona de memoria a la que no               identificador devuelto por shmget:
            tiene acceso u otro proceso intenta acceder
                                                                      Si el bit IPC_CREAT está activo, la zona
            a la memoria reservada para este proceso,               compartida de memoria se creará a no ser
            se estará produciendo una violación de                  que haya sido creada por otros procesos.
            segmenteto con lo cual el programa fallará.
                                                                       Si los bits IPC_CREAT e IPC_EXCL están
            El encargado de controlar esto es el S.O., y            activos simultáneamente, la llamada a shmget
            afortunadamente en nuestro caso, este                   falla en caso de que la memoria compartida
            dispone de la interfaz adecuada que nos                 hubiese sido reservada previamente.
            permitirá crear zonas de memoria especiales
                                                                      Además de estos valores podremos indicar
            que podrán ser compartidas entre varios
                                                                    los permisos: 0400 (lectura para el usuario),
            procesos.
                                                                    0200 (modificación para el usuario), 0060


Página 16                                                                                                          PC PASO A PASO Nº 18
Curso de linux - Memoria compartida - Curso de linux - Memoria compartida - Curso de linux




          (permiso de lectura y modificación para el                                struct shmid_ds {
                                                                                               struct ipc_perm shm_perm; /* Estructura de permisos */
          grupo) y 0006 (permiso de lectura y                                                  int shm_segsz; /* Tamaño del área de memoria (bytes) */
                                                                                               time_t shm_atime;      /* last attach time */
          modificación para el resto de los usuarios).
                                                                                               time_t shm_dtime;      /* last detach time */
                                                                                               time_t shm_ctime;      /* last change time */
          Para crear una zona de memoria compartida                                            unsigned short shm_cpid; /* pid of creator */
          de 1KByte (1024 bytes) con permisos de                                               unsigned short shm_lpid; /* pid of last operator */
                                                                                               short shm_nattch;      /* no. of current attaches */
          e s c r i t u ra l e c t u ra s ó l o p a ra u s u a r i o                           ...
          teclearíamos:                                                                   };
           int shmid;                                                                     struct ipc_perm {
               ...                                                                           key_t key;
                                                                                             ushort uid; /* owner euid and egid */
               if (( shmid = shmget(IPC_PRIVATE, 1024, IPC_CREAT | 0600 )) == -1)            ushort gid;
               {                                                                             ushort cuid; /* creator euid and egid */
                                                                                             ushort cgid;
                      fprintf(stderr, " ERROR al reservar memoria compartidan");              ushort mode; /* lower 9 bits of access modes */
               }                                                                               ushort seq; /* sequence number */
                                                                                          };
               ....


          2.2.           Control                de         memoria                    IPC_SET Inicializa algunos de los campos
          compartida                                                                  de la estructura de control de la memoria
                                                                                      compartida. El valor de estos campos se
          Una vez que hemos reservado una zona de                                     toma de la estructura referenciada por *buf.
          memoria compartida, podemos realizar
                                                                                      IPC_RMID Elimina la zona de memoria
          diversas operaciones de control sobre dicha                                 asociada al identificador shmid. Si esta zona
          zona con el fin de establecer distintos atributos                           de memoria compartida está siendo usada
          de la misma. Estas operaciones de control                                   por varios procesos, no se elimina hasta
          las realizará la función shmctl.                                            que todos los procesos liberen esta zona de
                                                                                      memoria compartida.
          La declaración de esta función es:
              #include <sys/types.h>                                                  SHM_LOCK Bloquea en memoria el
                                                                                      segmento identificado por shmid impidiendo
              #include <sys/ipc.h>
                                                                                      el intercambio sobre él. Esta operación sólo
              #include <sys/shm.h>
                                                                                      puede ser realizada por el superusuario.
              int shmctl(int shmid, int cmd, struct shmid_ds *buf);
                                                                                      SHM_UNLOCK. Desbloquea en memoria el
          Retorna 0 en caso de éxito y -1 en caso de                                  segmento identificado por shmid. Esta
          error.                                                                      operación sólo la puede realizar el
                                                                                      superusuario.
          shmid es el identificador de memoria
          compartida sobre el que vamos a operar.                                   2.3. Operaciones con memoria
          cmd es la operación de control que queremos
                                                                                    compartida
          realizar. Este parámetro puede tomar los                                  Para poder usar una zona de memoria
          siguientes valores:                                                       compartida que previamente hemos creado,
                                                                                    esta debe ligarse al espacio de direcciones de
            IPC_STAT Lee el estado de la estructura de                              memoria asignadas a nuestro proceso. La
            control de la memoria y lo devuelve a través                            forma en la que vamos a poder ligar o desligar
            de la zona de memoria apuntada por *buf.                                una zona de memoria compartida al espacio
            La estructura de esta zona de memoria es:                               de direcciones de nuestro proceso es mediante
                                                                                    el empleo de las funciones shmat y shmdt.


PC PASO A PASO Nº 18                                                                                                                                     Página 17
Curso de linux - Memoria compartida - Curso de linux - Memoria compartida - Curso de linux




               #include <sys/types.h>                                     #include <stdio.h>
               #include <sys/ipc.h>                                       #include <stdlib.h>
               #include <sys/shm.h>                                       #include <sys/types.h>
                                                                          #include <sys/ipc.h>
               void *shmat(int shmid, const void *shmaddr, int shmflg);   #include <sys/shm.h>
                                                                          #include <sys/sem.h>
            shmat es la función encargada de ligar una
            zona de memoria compartida al espacio de
            direcciones de memoria local del proceso.                     int main(int argc, char *argv[])
                                                                          {
            Retorna: la dirección a la que está unida la
            zona de memoria compartida. -1 en caso de                          int shmid, i, semid, estado, pid;
            error.                                                             struct sembuf operaciones;
                                                                               char *mensaje;
            Los parámetros que recibe son: shmid que
            será el identificador de la zona de memoria                        key_t clave;
            compartida a enlazar. shmaddr será la
            dirección virtual donde queremos que nuestro                       //
            proceso "vea" la zona de memoria compartida.                       // Zona de cración de memoria compartida
            Como esto lo debe asignar el núcleo, puede
                                                                               //
            que no siempre se nos devuelva el puntero
                                                                               // Creación de la memoria compartida
            apuntando a shmaddr, por lo que se suele
            poner este parámetro a 0 y dejar la                                // Primero la clave de recurso IPC
            responsabilidad al S.O.                                            if( (clave = ftok("shm.c",'K'))==-1)
                                                                               {
            En cuanto a shmflg, se trata de una máscara
            de bits que indica el modo de acceso a                                  fprintf(stderr," Error al crear la claven");
            memoria. Si queremos hacer un acceso de                                 return -1;
            sólo lectura, indicaremos, por ejemplo,                            }
            SHM_RDONLY (Más información en la página                           // Ahora la memoria compartida. Tamaño: 1024 caracteres
            de manual correspondiente).
                                                                               if( (shmid=shmget(clave, 1024 * sizeof(char), IPC_CREAT | 0600))==-1)
            La función encargada de desligar la zona de                        {
            memoria compartida es shmdt:                                            fprintf(stderr," Error al crear segmento de memoria compartidan");
               #include <sys/types.h>                                               return -1;
               #include <sys/ipc.h>                                            }
               #include <sys/shm.h>                                            // Ahora debemos enlazar la zona de memoria compartida con la
                                                                               // memoria local del proceso.
               int shmdt(const void *shmaddr);                                 if( (mensaje=(char *)shmat(shmid, 0, 0))==-1)
            Retorna: 0 en caso de éxito, -1 en caso de                         {
            error.                                                                  fprintf(stderr," Error al ligar la memoria compartidan");
            Esta función recibirá como único parámetro:                             return -1;
            shmaddr que es el puntero que señala a la
            zona de memoria compartida a desligar.                             }

            2.4. Ejemplo de uso                                                // Comienza el lanzamiento de procesos
            En este primer ejemplo vamos a hacer que                           //
            un proceso hijo llene un vector de caracteres
                                                                               if((pid=fork())==-1)
            con una frase. A continuación el proceso
            padre, espera a que termine el hijo y lee                          {
            dicho vector:                                                           // Escribimos en la memoria compartida

Página 18                                                                                                               PC PASO A PASO Nº 18
Curso de linux - Memoria compartida - Curso de linux - Memoria compartida - Curso de linux




            fprintf(stderr, "Error al lanzar proceso hijon");                          int main(int argc, char *argv[])
            return -1;                                                                  {
       }
                                                                                             int shmid, i, estado;
       if (pid != 0) // Somos el padre                                                       struct sembuf operaciones;
       {                                                                                     char *mensaje, buffer[80];
            // leemos de la memoria compartida                                               key_t clave;
            // Esperamos a que termine el proceso hijo
            wait(&i);                                                                        //
            for(i=0;i<1024;i++)                                                              // Zona de creación de memoria compartida
            printf("%c-", mensaje[i]);                                                       //
            return 0;                                                                        // Creación de la memoria compartida
       }                                                                                     // Primero la clave de recurso IPC
       else // Somos el hijo                                                                 if( (clave = ftok("shm.c",'K'))==-1)
       {                                                                                     {
            // Escribimos algo                                                                     fprintf(stderr," Error al crear la claven");
            strncpy(mensaje, "Hola, esto es una prueba de memoria compartida", 1024);              return -1;
            return 0;                                                                        }
       }                                                                                    // Ahora la memoria compartida. Tamaño: 1024 caracteres
                                                                                             if( (shmid=shmget(clave, 1024 * sizeof(char), IPC_CREAT | 0600))==-1)

       // Limpieza de memoria compartida                                                     {
       if((shmdt(mensaje))==-1)                                                                    fprintf(stderr," Error al crear segmento de memoria compartidan");

       {                                                                                           return -1;
            fprintf(stderr," Error al desaligar memoria compartidan");                      }
       }                                                                                    // Ahora debemos enlazar la zona de memoria compartida
       return 0;                                                                            // con la memoria local del proceso.

}                                                                                            if( (mensaje=(char *)shmat(shmid, 0, 0))==-1)
                                                                                             {
                    Pero es en los siguientes ejemplos donde
                                                                                                   fprintf(stderr," Error al ligar la memoria compartidan");
                    muestra un poco más de potencia el empleo
                                                                                                   return -1;
                    de la memoria compartida. Imaginemos que
                    tenemos dos programas cuyo código es el                                  }
                    siguiente:
//                                                                                           // Comienza el lanzamiento de procesos
// Servidor que muestra lo que escribe el cliente                                            //
// Compilar con: gcc shm_s.c -o shm_s                                                        printf("n Lectorn");
//                                                                                           do{
#include <stdio.h>                                                                                 for(i=0;i<80;i++)
#include <stdlib.h>                                                                                       printf("%c",mensaje[i]);
#include <sys/types.h>                                                                             printf("n");
#include <sys/ipc.h>                                                                               sleep(1);
#include <sys/shm.h>
#include <sys/sem.h>                                                                         }while(mensaje[0]!='0');



     PC PASO A PASO Nº 18                                                                                                                                                Página 19
Curso de linux - Memoria compartida - Curso de linux - Memoria compartida - Curso de linux




       // Limpieza de memoria compartida                                           {
       if((shmdt(mensaje))==-1)                                                         fprintf(stderr," Error al crear segmento de memoria compartidan");
       {                                                                                  return -1;
            fprintf(stderr," Error al desaligar memoria compartidan");            }
       }                                                                           // Ahora debemos enlazar la zona de memoria compartida con la
       return 0;                                                                   // memoria local del proceso.
}                                                                                  if( (mensaje=(char *)shmat(shmid, 0, 0))==-1)
                                                                                   {
                      El servidor examina el buffer de memoria
                                                                                          fprintf(stderr," Error al ligar la memoria compartidan");
                      compartida cada segundo e imprime su
                      contenido.                                                          return -1;
                                                                                   }
                      El cliente será el encargado de llenar dicho
                      buffer:
                                                                                   // Comienza el lanzamiento de procesos
//
                                                                                   //
// Cliente que escribe lo que mostrará el servidor
                                                                                   printf("n Escriba 0 para salirn");
// Compilar con: gcc shm_c.c -o shm_c
                                                                                   do{
//
                                                                                          printf("n > ");
#include <stdio.h>
                                                                                          i=0;
#include <stdlib.h>
                                                                                          do
#include <sys/types.h>
                                                                                          {
#include <sys/ipc.h>
                                                                                          fscanf(stdin, "%c", &mensaje[i]);
#include <sys/shm.h>
                                                                                          i++;
#include <sys/sem.h>
                                                                                          }while(mensaje[i-1]!=10);
                                                                                          //scanf("%s", buffer);
int main(int argc, char *argv[])
                                                                                          //strncpy(mensaje, buffer, 80);
{
                                                                                          for(j=i;j<1024;j++)
       int shmid, i,j, estado;
                                                                                                 mensaje[j]=' '; // rellenamos el resto del buffer
       struct sembuf operaciones;
                                                                                                                 // con espacios
       char *mensaje, buffer[80];
                                                                                   }while(mensaje[0]!='0');
       key_t clave;

                                                                                   // Limpieza de memoria compartida
       //
                                                                                   if((shmdt(mensaje))==-1)
       // Zona de cración de memoria compartida
                                                                                   {
       //
                                                                                          fprintf(stderr," Error al desaligar memoria compartidan");
       // Creación de la memoria compartida
                                                                                   }
       // Primero la clave de recurso IPC
                                                                                   return 0;
       if( (clave = ftok("shm.c",'K'))==-1)
                                                                               }
       {
            fprintf(stderr," Error al crear la claven");                                          Una vez compilados estos programas, en dos
                                                                                                   terminales distintos, abrimos primero un
            return -1;                                                                             cliente y escribimos algo:
       }                                                                       luis@leonov:~/articulos/articulo11_el_chaman/code$ ./shm_c
       // Ahora la memoria compartida. Tamaño: 1024 caracteres                 Escriba 0 para salir
       if( (shmid=shmget(clave, 1024 * sizeof(char), IPC_CREAT | 0600))==-1)   > hola


     Página 20                                                                                                                PC PASO A PASO Nº 18
Curso de linux - Memoria compartida - Curso de linux - Memoria compartida - Curso de linux




             Y en otro terminal ejecutamos el servidor:



luis@leonov:~/articulos/articulo11_el_chaman/code$ ./shm_s
Lector
hola

             A partir de este momento cada cosa que
             escribamos en el cliente será mostrado en el
             servidor cada segundo.

             Estos dos programas aún se pueden mejorar
             un poco de manera que, por ejemplo, el
             servidor sólo muestre algo cuando el buffer
             está lleno (vaciándolo por ejemplo tras recibir
             el último dato o sincronizando los procesos
             mediante semáforos). Dejo a los lectores el
             practicar con estos ejercicios.
CURSO DE TCP/IP (2ª Entrega)
            EL PROTOCOLO DE TRANSPORTE                                                         UDP
        (PROTOCOLO DE DA AGRAMAS DE USUARIO)
                        T


             - Vamos a descubrir las herramientas necesarias para "crear" paquetes de red
             - Empezaremos a desgranar las capas de red
             - Trataremos el Protocolo de Datagramas de Usuario



             1.      INTRODUCCIÓN                             el protocolo UDP, pero en futuras lecciones
                                                              exprimiremos al máximo las herramientas
             Espero que no os perdieseis el primer artículo   para hacer maravillas con las demás capas de
             del curso de TCP/IP (Transmisión Control         protocolos: TCP, IP, ARP (Address Resolution
             Protocol / Internet Protocol --- Protocolo de    Protocol --- Protocolo de Resolución de
             Control de Transmisión / Protocolo de            Direcciones), etc.
             Internet), porque voy a asumir que habéis        Empezaré explicando a grandes rasgos el
             comprendido a grandes rasgos el concepto         mecanismo de transporte de un paquete UDP
             de capas de protocolos, y el mecanismo básico    a través de Internet para luego detallar las
             de transporte de paquetes de datos a través      cabeceras UDP y, por último, veremos todo
             de Internet (o cualquier otra red TCP/IP).       esto de forma práctica utilizando unas
                                                              herramientas que nos permiten construir

  !         NOTA DE PC PASO A PASO / HXC
                                                              paquetes UDP desde cero (los llamados “raw
                                                              sockets”).

  Para todos aquellos que no tienen la primera entrega del    Pero, antes de empezar, he de aclararos un
  curso de TCP / IP publicada en el número 17 de PC PASO      asunto. Supongo que algunos de vosotros os
                                                              preguntareis qué ha pasado con la serie RAW.
  A PASO, hemos decidido pasarla a formato PDF y liberarla
                                                              Mis intenciones no eran de ninguna manera
  en la Web de la revista (www.hackxcrack.com).
                                                              sustituir la serie RAW por el curso de TCP/IP,
                                                              si no desarrollar ambos en paralelo. Pero es
  También aprovechamos esta “nota” para indicar
                                                              increíble de qué manera pueden conspirar
  a nuestros lectores que todos los artículos                 juntas las circunstancias de la vida para
  liberados y los programas que mencionamos                   cambiar por completo tu rumbo cuando menos
  en los artículos están disponibles en la sección            te lo esperas. En poco más de un mes me han
  ARTÍCULOS LIBERADOS Y DESCARGAS de la                       surgido una serie de problemas de todo tipo
  Web.                                                        (familiares, personales, de salud, laborales,
                                                              y académicos) por los cuales ahora (y sin
             Para esta primera “lección” he escogido un       plazo definido) dispongo de muchísimo menos
             protocolo muy sencillo, el protocolo UDP (User   tiempo.
             Datagram Protocol --- Protocolo de               He barajado un poco mis posibilidades, y creo
             Datagramas de Usuario), para así poder           que lo que puedo permitirme de momento es
             extenderme más en explicaros algunas             continuar sólo con el curso de TCP/IP, aunque
             herramientas que nos pueden ser útiles a lo      no descarto publicar algún otro artículo de la
             largo de todo el curso. De momento, estas        serie RAW algún mes que consiga juntar algo
             herramientas las utilizaremos para manejar       más de tiempo. Con esto lo que os quiero


Página 22                                                                                       PC PASO A PASO Nº 18
Curso de TCP/IP (2) - UDP - Curso de TCP/IP (2) - UDP - Curso de TCP/IP (2) - UDP




             decir es que no os prometo nada con respecto       protocolo DNS. Vamos a utilizar este protocolo
             a la serie RAW, pero que haré lo que esté en       como ejemplo para ver qué ocurre desde que
             mi mano para que no termine aquí, aunque           un cliente solicita una consulta DNS a un
             haya que avanzar ahora mucho más despacio.         servidor, hasta que éste cliente recibe la
                                                                respuesta pertinente. Os aconsejo que leáis
             Gracias por vuestra comprensión. ;-)               el artículo sobre DNS de la serie RAW, que se
                                                                encuentra en el número 14 de la revista,
  !          NOTA EDITORIAL                                     aunque voy a empezar haciendo una
                                                                introducción sobre este protocolo.


  Para los nuevos lectores, simplemente decir que la serie
  de artículos denominada “SERIE RAW” ha estado presente
  en casi todos los números de esta publicación y ha                !       NOTA DE PC PASO A PASO / HXC:
  constituido uno de los pilares de la misma.
                                                                   El artículo SERIE RAW: DNS mencionado por el autor ha
  La Serie RAW ya nos ha aportado conocimientos sobre los          sido liberado y está disponible en nuestra Web:
  Protocolos más importantes y desde hace mucho tiempo             www.hackxcrack.com
  se nos ha reclamado el inicio de un curso de TCP / IP.
  Finalmente, desde el anterior número 17 por fin ese curso
  ha llegado.                                                   2.1. LAS CAPAS DE UDP/IP

  Tal y como nos describe el autor, esperamos poder hacer       Os recuerdo que el protocolo DNS es el que
  más entregas de la Serie Raw en futuros números, pero de      nos permite utilizar las famosas URLs en lugar
  forma más dilatada en el tiempo. Mientras tanto disfrutemos   de direcciones IP. Es decir, nos permite escribir
  de este excelente curso de TCP / IP, una serie de artículos   en nuestro navegador http://www.google.com
  ampliamente reclamada y esperada por nuestros lectores.       en lugar de tener que escribir
                                                                http://216.239.39.99, que es la dirección IP
                                                                de Google.


             2.  FUNCIONAMIENTO DEL                             Para conseguir esto, existen repartidos por el
             PROTOCOLO UDP                                      mundo una serie de servidores encargados
                                                                de traducir URLs a IPs, e IPs a URLs. Nuestros
                                                                PCs se comunicarán con alguno de estos
             Los que os perdisteis la introducción de este
                                                                servidores cada vez que quieran utilizar una
             curso no tenéis que preocuparos, ya que este
                                                                URL, para obtener así su IP correspondiente.
             primer punto resume en cierto modo lo que
                                                                Esta comunicación se lleva a cabo a través
             expliqué entonces. Aún así, os recomiendo
                                                                del protocolo DNS.
             que leáis la introducción, ya que aquí voy a
             resumir en un par de páginas lo que allí
                                                                Cuando escribimos en nuestro navegador una
             explicaba en más de 20 páginas.
                                                                URL, por ejemplo http://neworder.box.sk,
                                                                nuestro sistema enviará una consulta DNS a
             Para los que sí que leísteis la introducción,
                                                                un servidor, indicando en la consulta el nombre
             este punto creo que os puede ayudar a aclarar
                                                                que desea traducir (en este caso
             las ideas a modo de resumen.
                                                                neworder.box.sk, ya que el prefijo http:// es
                                                                sólo una indicación al navegador sobre el
             A lo largo de la serie RAW os expliqué varios
                                                                protocolo a utilizar, pero no forma parte del
             protocolos que funcionaban sobre TCP, pero
                                                                nombre que deseamos traducir).
             sólo uno que funcionase sobre UDP: el


PC PASO A PASO Nº 18                                                                                                Página 23
Curso de TCP/IP (2) - UDP - Curso de TCP/IP (2) - UDP - Curso de TCP/IP (2) - UDP




                                                                En segundo lugar, sabiendo que en Internet
                                                              todas las máquinas están conectadas entre sí
                                                              mediante una compleja red de cables y
                                                              conexiones inalámbricas, es lógico pensar que
                                                              será necesario conocer el camino a recorrer
                                                              en toda esa maraña de cables para enlazar
                                                              ambas máquinas entre sí.

                                                                 En tercer lugar, el cliente necesitará conocer
                                                              la dirección IP del servidor DNS, ya que sólo
                                                              conociendo la dirección IP de una máquina
            El servidor DNS nos enviará una respuesta         puedes acceder a ella a través de Internet.
            que contendrá la IP correspondiente a ese
            nombre.                                              En cuarto lugar, tiene que existir algún
                                                              mecanismo que le indique al servidor que la
                                                              consulta que le estamos haciendo es una
                                                              consulta DNS, y no de cualquier otro tipo. Por
                                                              ejemplo, el servidor DNS podría ser al mismo
                                                              tiempo un servidor Web, y un servidor de
                                                              correo electrónico. Por tanto, tiene que existir
                                                              un mecanismo que le permita distinguir qué
                                                              clientes solicitan servicios DNS, cuáles
                                                              solicitan servicios Web, y cuáles solicitan
                                                              servicios de correo eletrónico.

            Gracias a esto, a continuación nuestro            A grandes rasgos, son cuatro los problemas
            navegador podrá acceder a la máquina que          que hemos encontrado para conseguir llevar
            contiene la página Web que deseamos visitar,      a cabo esta comunicación. Y, por supuesto,
            ya que sólo puede existir una comunicación        no es coincidencia que sean cuatro las capas
            directa entre dos máquinas si cada una conoce     de protocolos utilizadas en una comunicación
            la dirección IP de la otra.                       UDP: capa física, capa de enlace, capa de
                                                              red, y capa de transporte.
            Ahora vamos a pensar un poco en cómo se
            podría conseguir todo este mecanismo del          Si no fuese gracias a la existencia de estas 4
            DNS, en el cual un cliente solicita un nombre     capas diferenciadas, el protocolo DNS debería
            a un servidor, y el servidor le responde con      encargarse por sí sólo de solucionar todos
            la IP correspondiente. ¿Qué problemas se nos      estos problemas. Es decir, el protocolo DNS
            presentan a la hora de llevar a cabo este         debería tener sus propias conexiones físicas
            proceso aparentemente tan sencillo? Pensadlo      entre máquinas, sus mecanismos para
            un poco, y después mirad la lista de problemas    encontrar un camino entre todas las máquinas
            a salvar que os pongo a continuación, para        que están conectadas simultáneamente, sus
            ver si habéis llegado a las mismas                propias direcciones IP, y sus propios
            conclusiones:                                     mecanismos para diferenciarse de
                                                              otros servicios (como la Web o el correo
              En primer lugar, por supuesto, hay que          electrónico).
            conseguir que ambas máquinas (cliente y
                                                              Esto convertiría al aparentemente sencillo
            servidor) tengan una conexión física, ya
                                                              protocolo DNS en un sistema de una
            sea por cables, por radio, o por cualquier otro
                                                              complejidad inabarcable, y lo mismo ocurriría
            medio físico que les permita establecer una
                                                              con cualquier otro protocolo que tuviese que
            comunicación bidireccional.


Página 24                                                                                          PC PASO A PASO Nº 18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18
Hxc18

Más contenido relacionado

Similar a Hxc18 (20)

Hxc13
Hxc13Hxc13
Hxc13
 
Hxc17
Hxc17Hxc17
Hxc17
 
Hxc22
Hxc22Hxc22
Hxc22
 
Hxc10
Hxc10Hxc10
Hxc10
 
Hxc11
Hxc11Hxc11
Hxc11
 
Hx c18
Hx c18Hx c18
Hx c18
 
Hxc9
Hxc9Hxc9
Hxc9
 
Hxc2
Hxc2Hxc2
Hxc2
 
Los diablos hacen el show!
Los diablos hacen el show! Los diablos hacen el show!
Los diablos hacen el show!
 
Users+263 +issuu
Users+263 +issuuUsers+263 +issuu
Users+263 +issuu
 
Hxc8
Hxc8Hxc8
Hxc8
 
El grupo informático • la piratería no existe, por juan gómez jurado aportes
El grupo informático • la piratería no existe, por juan gómez jurado   aportesEl grupo informático • la piratería no existe, por juan gómez jurado   aportes
El grupo informático • la piratería no existe, por juan gómez jurado aportes
 
Hx c19
Hx c19Hx c19
Hx c19
 
Zapatero empieza a dar señales de vida.
Zapatero empieza a dar señales de vida.Zapatero empieza a dar señales de vida.
Zapatero empieza a dar señales de vida.
 
Baquia Entrevista Sergio Garasa, Director general mundo ofertas 10nov09
Baquia Entrevista Sergio Garasa, Director general mundo ofertas 10nov09Baquia Entrevista Sergio Garasa, Director general mundo ofertas 10nov09
Baquia Entrevista Sergio Garasa, Director general mundo ofertas 10nov09
 
Chips neuromórficos
Chips neuromórficosChips neuromórficos
Chips neuromórficos
 
Hxc3
Hxc3Hxc3
Hxc3
 
1 p decimo rmb
1 p decimo rmb1 p decimo rmb
1 p decimo rmb
 
Franquicias Hoy nº 172, Mayo 2011
Franquicias Hoy nº 172, Mayo 2011Franquicias Hoy nº 172, Mayo 2011
Franquicias Hoy nº 172, Mayo 2011
 
Maestros
MaestrosMaestros
Maestros
 

Más de rubenroa

Estudios epidemiologicos
Estudios epidemiologicosEstudios epidemiologicos
Estudios epidemiologicosrubenroa
 
Efectividad de la vacunacion Covid-19 en variante delta
Efectividad de la vacunacion Covid-19 en variante deltaEfectividad de la vacunacion Covid-19 en variante delta
Efectividad de la vacunacion Covid-19 en variante deltarubenroa
 
Causalidad
CausalidadCausalidad
Causalidadrubenroa
 
Evaluacion de tecnologias sanitarias
Evaluacion de tecnologias sanitariasEvaluacion de tecnologias sanitarias
Evaluacion de tecnologias sanitariasrubenroa
 
Epidemiologia
Epidemiologia Epidemiologia
Epidemiologia rubenroa
 
Pediatrics 2008 jul 122(1) 143 8, figure-1
Pediatrics 2008 jul 122(1) 143 8, figure-1Pediatrics 2008 jul 122(1) 143 8, figure-1
Pediatrics 2008 jul 122(1) 143 8, figure-1rubenroa
 
Introducción análisis farmacoepidemiológico sss&farma-taller15jun2011
Introducción análisis farmacoepidemiológico sss&farma-taller15jun2011Introducción análisis farmacoepidemiológico sss&farma-taller15jun2011
Introducción análisis farmacoepidemiológico sss&farma-taller15jun2011rubenroa
 
Maceira sss&farma-taller15jun2011
Maceira sss&farma-taller15jun2011Maceira sss&farma-taller15jun2011
Maceira sss&farma-taller15jun2011rubenroa
 
Datos cohorte chilena sida (1)
Datos cohorte chilena sida (1)Datos cohorte chilena sida (1)
Datos cohorte chilena sida (1)rubenroa
 
Kappos fingolimod moa-clin_results_vfinal_buenosaires1a
Kappos fingolimod moa-clin_results_vfinal_buenosaires1aKappos fingolimod moa-clin_results_vfinal_buenosaires1a
Kappos fingolimod moa-clin_results_vfinal_buenosaires1arubenroa
 
Uso Racional de Medicamentos
Uso Racional de MedicamentosUso Racional de Medicamentos
Uso Racional de Medicamentosrubenroa
 
tabaquismo
tabaquismotabaquismo
tabaquismorubenroa
 
Sesion ppt -2641_
Sesion ppt -2641_Sesion ppt -2641_
Sesion ppt -2641_rubenroa
 
Auditoria em
Auditoria emAuditoria em
Auditoria emrubenroa
 
Indice tobillo brazo
Indice tobillo brazoIndice tobillo brazo
Indice tobillo brazorubenroa
 
indice tobillo brazo
indice tobillo brazoindice tobillo brazo
indice tobillo brazorubenroa
 
Epistemología y paradigmas
Epistemología y paradigmasEpistemología y paradigmas
Epistemología y paradigmasrubenroa
 
Vertigo acv
Vertigo acvVertigo acv
Vertigo acvrubenroa
 
Apendicectomia
ApendicectomiaApendicectomia
Apendicectomiarubenroa
 

Más de rubenroa (20)

Estudios epidemiologicos
Estudios epidemiologicosEstudios epidemiologicos
Estudios epidemiologicos
 
Efectividad de la vacunacion Covid-19 en variante delta
Efectividad de la vacunacion Covid-19 en variante deltaEfectividad de la vacunacion Covid-19 en variante delta
Efectividad de la vacunacion Covid-19 en variante delta
 
Causalidad
CausalidadCausalidad
Causalidad
 
Evaluacion de tecnologias sanitarias
Evaluacion de tecnologias sanitariasEvaluacion de tecnologias sanitarias
Evaluacion de tecnologias sanitarias
 
Epidemiologia
Epidemiologia Epidemiologia
Epidemiologia
 
Pediatrics 2008 jul 122(1) 143 8, figure-1
Pediatrics 2008 jul 122(1) 143 8, figure-1Pediatrics 2008 jul 122(1) 143 8, figure-1
Pediatrics 2008 jul 122(1) 143 8, figure-1
 
Introducción análisis farmacoepidemiológico sss&farma-taller15jun2011
Introducción análisis farmacoepidemiológico sss&farma-taller15jun2011Introducción análisis farmacoepidemiológico sss&farma-taller15jun2011
Introducción análisis farmacoepidemiológico sss&farma-taller15jun2011
 
Maceira sss&farma-taller15jun2011
Maceira sss&farma-taller15jun2011Maceira sss&farma-taller15jun2011
Maceira sss&farma-taller15jun2011
 
Datos cohorte chilena sida (1)
Datos cohorte chilena sida (1)Datos cohorte chilena sida (1)
Datos cohorte chilena sida (1)
 
Ferinject
FerinjectFerinject
Ferinject
 
Kappos fingolimod moa-clin_results_vfinal_buenosaires1a
Kappos fingolimod moa-clin_results_vfinal_buenosaires1aKappos fingolimod moa-clin_results_vfinal_buenosaires1a
Kappos fingolimod moa-clin_results_vfinal_buenosaires1a
 
Uso Racional de Medicamentos
Uso Racional de MedicamentosUso Racional de Medicamentos
Uso Racional de Medicamentos
 
tabaquismo
tabaquismotabaquismo
tabaquismo
 
Sesion ppt -2641_
Sesion ppt -2641_Sesion ppt -2641_
Sesion ppt -2641_
 
Auditoria em
Auditoria emAuditoria em
Auditoria em
 
Indice tobillo brazo
Indice tobillo brazoIndice tobillo brazo
Indice tobillo brazo
 
indice tobillo brazo
indice tobillo brazoindice tobillo brazo
indice tobillo brazo
 
Epistemología y paradigmas
Epistemología y paradigmasEpistemología y paradigmas
Epistemología y paradigmas
 
Vertigo acv
Vertigo acvVertigo acv
Vertigo acv
 
Apendicectomia
ApendicectomiaApendicectomia
Apendicectomia
 

Último

El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 

Último (20)

El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 

Hxc18

  • 1. HACK X CRACK: T C P / I P - - H E R R A M I E N TA S B A S I C A S P P A A S S O O P A S Oa P A a a a a a a aa a a a a a 3 SERVIDORES ON LINE PARA TUS PRACTICAS DE HACK NUMERO 18 DESCUBRIMOS EL POTENCIAL DEL XML TCP / IP: UDP PROTOCOLO DE DA AGRAMAS TOCOLO DAT DE USUARIO LINUX COMUNICACION ENTRE PROCESOS PASO DE VARIABLES Nº 18 -- P.V.P. 4,5 EUROS 00018 8 414090 202756 LOS MEJORES ARTÍCULOS GRATIS EN NUESTRA WEB P C PA S O A PA S O : C R E A N D O F O R M U L A R I O S C O N P H P ! ! !
  • 2.
  • 3. P A S O aa P A S Oaa aa a a aa a a a a a a aa EDITORIAL: EDITOTRANS S.L. Director de la Publicación J. Sentís C.I.F: B43675701 PERE MARTELL Nº 20, 2º - 1ª E-mail contacto 43001 TARRAGONA (ESPAÑA) director@hackxcrack.com Director Editorial Diseño gráfico: I. SENTIS J. M. Velasco E-mail contacto director@editotrans.com E-mail contacto: Título de la publicación Los Cuadernos de HACK X CRACK. grafico@hackxcrack.com Nombre Comercial de la publicacíón PC PASO A PASO Redactores Web: www.hackxcrack.com AZIMUT, ROTEADO, FASTIC, MORDEA, FAUSTO, Dirección: PERE MARTELL Nº 20, 2º - 1ª. ENTROPIC, MEIDOR, HASHIMUIRA, BACKBONE, 43001 TARRAGONA (ESPAÑA) ZORTEMIUS, AK22, DORKAN, KMORK, MAILA, TITINA, SIMPSIM... ... ... ... ... ¿Quieres insertar publicidad en PC PASO A Contacto redactores PASO? Tenemos la mejor relación precio-difusión redactores@hackxcrack.com del mercado editorial en España. Contacta con nosotros!!! Colaboradores Mas de 130 personas: de España, de Brasil, de Director de Marketing Argentina, de Francia, de Alemania, de Japón y Sr. Miguel Mellado algún Estadounidense. Tfno. directo: 652 495 607 Tfno. oficina: 877 023 356 E-mail: miguel@editotrans.com E-mail contacto colaboradores@hackxcrack.com Imprime I.G. PRINTONE S.A. Tel 91 808 50 15 DISTRIBUCIÓN: SGEL, Avda. Valdeparra 29 (Pol. Ind.) 28018 ALCOBENDAS (MADRID) Tel 91 657 69 00 FAX 91 657 69 28 WEB: www.sgel.es TELÉFONO DE ATENCIÓN AL CLIENTE: 977 22 45 80 Petición de Números atrasados y Suscripciones (Srta. Genoveva) HORARIO DE ATENCIÓN: DE 9:30 A 13:30 (LUNES A VIERNES) © Copyright Editotrans S.L. NUMERO 18 -- PRINTED IN SPAIN PERIOCIDAD MENSUAL Deposito legal: B.26805-2002 Código EAN: 8414090202756
  • 4. EDITORIAL el tiempo y las promesas Grandes cambios se han sucedido en las últimas semanas en este país. No, no me refiero al cambio de gobierno, eso es lo de menos… lo importante son los cambios sociales, esos que hacen de nosotros quienes realmente somos. 4 EDIT ORIAL 5 Cur so de PHP: Mane jo de F or mularios W eb Hace tiempo, en el Foro de Hack x Crack se creó un hilo 11 XB O X (IV): Con vier t ela en un centr o multimedia donde hablamos sobre el futuro de la humanidad. Unos, pesimistas, argumentaban que el hombre acabaría 16 Pr ogramación bajo linux: Memoria com par tida destruyendo su entorno y a sí mismos… otros, optimistas, 22 Cur so de T CP/IP (II) UDP creían que en el ser humano sería lo suficientemente 40 Cur so XML: XSL inteligente como para superar las adversidades de la evolución. 50 La r ealidad de los vir us inf or máticos Yo no conozco el futuro, ignoro lo que le depara el futuro a la humanidad, pero SI SE QUE EL FONDO DEL SER 10 Ser vidor HXC : Modo de em pleo. HUMANO ES BUENO. 21 Colabora con noso tr os. ¿Argumento? Muy simple, la realidad. En Marzo pude 38 Descarga nues tr os logos y melodias. ver como unos hombres y mujeres que acababan de salvarse 38 Ganador SUSE LINUX de la muerte, volvían al peligro para salvar a otros hombres y mujeres que ni tan siquiera conocían. Y pude ver como 39 Suscripciones. otros hombres y mujeres que podrían haberse quedado a 65 Númer os atrasados. salvo en sus casas, optaron por enfrentarse al peligro para ayudar a sus semejantes. Tengo la certeza de que el hombre, en su interior más profundo, es bueno. Eso me da esperanza y fuerzas para seguir adelante, fuerza para creer que unos pocos jamás podrán doblegar a la mayoría… y la mayoría es buena, la mayoría somos héroes, la mayoría sacamos de nuestro interior lo mejor que tenemos en los momentos más difíciles. No olvidemos nunca a quienes han dejado de vivir para regalarnos la vida al resto. GRACIAS...
  • 5. Curso de PHP Manejo de formularios web - FORMULARIOS EN PHP: Trabajaremos con los datos. - Enviaremos datos de una página a otra, - Los recogeremos y finalmente los trataremos. En la navegación web intervienen los Si nos fijamos, veremos que las variables no siguientes elementos: poseen el símbolo $ delante. Esto se debe a Un Cliente (Navegador Web) que en realidad este modo de pasar variables Un Servidor Web es común a todos los lenguajes (ASP, PHP, JSP,...) Una Petición (Request) Una Respuesta (Response) Las variables las recibe la página destino del enlace, y ya podemos trabajar directamente En pocas palabras, un cliente (Navegador con ellas; pero no siempre se definen Web) realiza peticiones (Request) a un automáticamente las variables recibidas por Servidor Web que responde (Response) las parámetro en las páginas Web, depende de páginas web que están almacenadas en él. una variable de configuración de PHP: register_globals, que tiene que estar Normalmente cuando se desarrollan páginas activada para que así sea. Web, es necesario que los datos recogidos en un primer momento se “arrastren” entre A continuación vamos a explicar esto en un las diferentes páginas mientras nos sean ejemplo. Tenemos dos páginas, registro1.php necesarios. y registro2.php, que siguen los pasos para un registro simple de usuarios. Un ejemplo muy claro de esto es un sistema de registro de usuarios, todos nos hemos <HTML> registrado en algún portal o algún “site”, y <HEAD> para realizar el registro completo hay que <TITLE>Registro Paso 1</TITLE> realizarlo por pasos, donde cada paso es una </HEAD> página Web diferente y los datos obtenidos <BODY> en la primera página se deben mantener <FORM NAME=”formRegistro1”> hasta la finalización del registro. <TABLE BORDER=”1”> <TR> Variables a través de la URL <TD>Nombre:</TD> <TD><INPUT TYPE=”TEXT” NAME=”NOMBRE” VALUE=””></TD> Para pasar las variables de una página PHP </TR> a otra, lo podemos hacer introduciendo dicha <TR> variable dentro del enlace hipertexto de la <TD>Apellidos:</TD> página destino. <TD><INPUT TYPE=”TEXT” NAME=”APELLIDOS” VALUE=””></TD> </TR> La sintaxis sería la siguiente: <TR> <TD>Email:</TD> <a href="destino.php?var1=valor1&var2=valor2&...">enlace</a> <TD><INPUT TYPE=”TEXT” NAME=”EMAIL” VALUE=””></TD> </TR> PC PASO A PASO Nº 18 Página 5
  • 6. Programación PHP - Programación PHP - Programación PHP - Programación PHP </TABLE> </FORM> <A HREF="javascript:window.location.ref. = 'registro2.php?nombre=' + document.formRegistro1.NOMBRE.value + '&apellidos=' + document.formRegistro1.APELLIDOS.value + '&email=' + document.formRegistro1.EMAIL.value">Enviar</A> </BODY> </HTML> Si nos fijamos en la barra de dirección del navegador de la imagen anterior, en la URL de la página aparecen las variables junto al valor que les hemos rellenado en el formulario. $HTTP_GET_VARS También es posible recopilar en una variable tipo array el conjunto de variables que han sido enviadas al script por este método a partir de la variable de sistema $HTTP_GET_VARS, que es un array asociativo. <HTML> <HEAD> <TITLE>Registro Paso 2</TITLE> </HEAD> <BODY> <HTML> Usuario Registrado: <HEAD> <TABLE BORDER=”1”> <TITLE>Registro Paso 2</TITLE> <TR> </HEAD> <TD>Nombre:</TD> <BODY> <TD><? print($HTTP_GET_VARS["nombre"]);?></TD> Usuario Registrado: </TR> <TABLE BORDER=”1”> <TR> <TR> <TD>Apellidos:</TD> <TD>Nombre:</TD> <TD><? print($HTTP_GET_VARS["apellidos"]);?></TD> <TD><?= $nombre;?></TD> </TR> </TR> <TR> <TR> <TD>Email:</TD> <TD>Apellidos:</TD> <TD><? print($HTTP_GET_VARS["email"]);?></TD> <TD><?= $apellidos;?></TD> </TR> </TR> </TABLE> <TR> </BODY> <TD>Email:</TD> </HTML> <TD><?= $email;?></TD> </TR> Aunque podamos recoger variables que se </TABLE> definen directamente en nuestra página, </BODY> resulta más seguro utilizar $HTTP_GET_VARS </HTML> por dos razones: Página 6 PC PASO A PASO Nº 18
  • 7. Programación PHP - Programación PHP - Programación PHP - Programación PHP La primera es que así nos aseguramos que <TR> esa variable viene realmente de la URL <TD>Nombre:</TD> <TD><INPUT TYPE=”TEXT” NAME=”NOMBRE” VALUE=””></TD> La segunda, que así nuestro código será </TR> más claro cuando lo volvamos a leer, porque <TR> quedará especificado que esa variable <TD>Apellidos:</TD> estamos recibiéndola por la URL. <TD><INPUT TYPE=”TEXT” NAME=”APELLIDOS” VALUE=””></TD> </TR> $_GET <TR> <TD>Email:</TD> A partir de la versión 4.1.0 de PHP se ha <TD><INPUT TYPE=”TEXT” NAME=”EMAIL” VALUE=””></TD> introducido el array asociativo $_GET, que </TR> es idéntico a $HTTP_GET_VARS, aunque un <TR> poco más corto de escribir. <TD COLSPAN=”2” ALIGN=”CENTER”> <INPUT TYPE=”SUBMIT” NAME=”enviar” VALUE=”Enviar”> Variables a través de Formularios </TD> </TR> El proceso es similar al explicado para las </TABLE> URLs, pero en esta ocasión el envió de </FORM> variables de una página PHP a otra no se </BODY> realiza a través de la URL, si no enviándolas </HTML> a través de un formulario. Al igual que en las variables a través de la URL, las variables que se procesan a través del envío de formularios no siempre se definen automáticamente, ello depende de una va r i a b l e d e c o n f i g u ra c i ó n d e P H P : register_globals, que tiene que estar activada para conseguir que las variables se definan automáticamente. Para ver el funcionamiento del procesamiento de variable a través de los formularios vamos a realizar el mismo ejemplo que en el apartado anterior. Tenemos dos páginas, registro1.php y registro2.php, que siguen los pasos para un registro simple de usuarios. <HTML> Como podemos ver, el código es exactamente <HEAD> igual al del ejemplo de procesamiento de <TITLE>Registro Paso 1</TITLE> variables a través de la URL, en lo único que </HEAD> se diferencia es en la línea de definición del <BODY> formulario: <FORM NAME=”formRegistro1” ACTION=”registro2.php” <FORM NAME=”formRegistro1” ACTION=”registro2.php” METHOD=”POST” METHOD=”POST” > > <TABLE BORDER=”1”> PC PASO A PASO Nº 18 Página 7
  • 8. Programación PHP - Programación PHP - Programación PHP - Programación PHP Si ejecutamos el código anterior no recibiremos y en el botón que realiza el envío: las variables en registro2.php ¿porqué? PHP distingue entre mayúsculas y minúsculas, es <INPUT TYPE=”SUBMIT” NAME=”enviar” VALUE=”Enviar”> CASE-SENSITIVE, por lo que las variables $nombre, $apellidos y $email son nuevas para Vamos a prestar especial atención a la línea el y no tienen ningún valor. en la que se define el formulario, ACTION nos indica la página destino y METHOD, nos El siguiente código es el correcto: indica el método (GET o POST) utilizado para el envío del formulario. <HTML> <HEAD> Si METHOD es igual a GET las variables del <TITLE>Registro Paso 2</TITLE> formulario se envían a través de la URL, y </HEAD> si METHOD es igual a POST, el envío de <BODY> variables no es visible a través de la URL. Usuario Registrado: <TABLE BORDER=”1”> ¿Cuál es el mejor a utilizar? Pues esto <TR> dependerá del caso concreto en el que nos <TD>Nombre:</TD> encontremos, pero siempre queda mucho <TD><?= $NOMBRE;?></TD> más elegante y seguro que las variables no </TR> estén visibles en la URL. Además la longitud <TR> de cadena permitida en la URL es de 255, <TD>Apellidos:</TD> así que es aconsejable si se van a rellenar <TD><?= $APELLIDOS;?></TD> muchos datos que en METHOD utilizado sea </TR> POST. <TR> <TD>Email:</TD> <HTML> <TD><?= $EMAIL;?></TD> <HEAD> </TR> <TITLE>Registro Paso 2</TITLE> </TABLE> </HEAD> </BODY> <BODY> </HTML> Usuario Registrado: <TABLE BORDER=”1”> <TR> <TD>Nombre:</TD> <TD><?= $nombre;?></TD> </TR> <TR> <TD>Apellidos:</TD> <TD><?= $apellidos;?></TD> </TR> <TR> <TD>Email:</TD> <TD><?= $email;?></TD> </TR> Como podemos observar en la imagen anterior, </TABLE> las variables no están visibles en la URL de la </BODY> página, pero esto cambiaría si el METHOD </HTML> utilizado fuese GET. Página 8 PC PASO A PASO Nº 18
  • 9. Programación PHP - Programación PHP - Programación PHP - Programación PHP $HTTP_POST_VARS de la URL y la segunda, que así nuestro códigoserá más claro cuando lo volvamos a También es posible recopilar en una variable leer, porque quedará especificado que esa tipo array el conjunto de variables que han variable estamos recibiéndola por la URL sido enviadas al script por este método a partir de la variable de sistema $_POST $HTTP_POST_VARS, que es un array asociativo. A partir de PHP 4.1.0 se pueden recoger las variables de formulario utilizando también el La sintaxis es la siguiente: array asociativo $_POST, que es el mismo que $HTTP_POST_VARS, pero más corto de escribir. $HTTP_POST_VARS["nombre"] En el próximo número… Aunque podamos recoger variables que se definen directamente en nuestra página, En el próximo número comenzaremos a resulta más seguro utilizar $HTTP_POST_VARS programar sockets, programar socket nos por dos razones, la primera que así nos permitirá hacer un emulador de Telnet, hacer aseguramos que esa variable viene realmente un FTP, ... y todo gracias al PHP ;) PC PASO A PASO Nº 18 Página 9
  • 10. SERVIDOR DE HXC MODO DE EMPLEO - Hack x Crack ha habilitado tres servidores para que puedas realizar las Explicamos esto porque la mayoría, seguro que piensa en un Servidor Web como en algo extraño que no saben ni prácticas de hacking. donde está ni como se accede. Bueno, pues ya sabes dónde se encuentran la mayoría de IIS (en Inetpub) y cuál es - Las IPs de los servidores de hacking las la página por defecto (Inetpubwwwrootdefault.htm). Y encontrarás en EL FORO de la revista ahora, piensa un poco… … ¿Cuál es uno de los objetivos de ( w w w . h a c k x c r a c k . c o m ) . Una vez en el foro entra un hacker que quiere decirle al mundo que ha hackeado en la zona COMUNICADOS DE HACK X CRACK (arriba del u n a We b ? P u e s e s t á c l a r o, e l o b j e t i vo e s c a m b i a r ( o s u s t i t u i r ) todo) y verás varios comunicados relacionados con los el archivo default.html por uno propio donde diga “hola, servidores. No ponemos las IP aquí porque es bueno soy DIOS y he hackeado esta Web” (eso si es un lamer ;) acostumbrarte a entrar en el foro y leer los comunicados. Si hay alguna incidencia o cambio de IP o lo que sea, se A partir de ese momento, cualquiera que acceda a ese comunicará en EL FORO. s e r v i d o r, v e r á e l d e f a u l t . h t m m o d i f i c a d o p a r a v e r g ü e n z a d e l “site” hackeado. Esto es muy genérico pero os dará una idea de cómo funciona esto de hackear Webs ;) - Actualmente tienen el BUG del Code / D e c o d e . La forma de “explotar” este bug la explicamos - Cuando accedas a nuestro servidor mediante el CODE / extensamente en los números 2 y 3. Lo dejaremos así por DECODE BUG, crea un directorio con tu nombre (el que mas un tiempo (bastante tiempo ;) Nuestra intención es ir te guste, no nos des tu DNI) en la unidad d: a ser habilitando servidores a medida que os enseñemos distintos posible y a partir de ahora utiliza ese directorio para hacer tipos de Hack. t u s p r á c t i c a s . Ya s a b e s , s u b i r n o s p r o g r a m i t a s y p r a c t i c a r con ellos :) ... ... ¿cómo? ¿que no sabes crear directorios - En los Servidores corre el Windows 2000 con el IIS de Servidor Web. No hemos parcheado ningún bug, ni mediante el CODE/DECODE BUG... repasa los números 2 y t a n s i q u i e ra e l R P C y p o r s u p u e s t o t a m p o c o h e m o s i n s t a l a d o tres de Hack x Crack ;p n i n g ú n S e r v i c e Pa c k . Pa ra q u i e n p i e n s e q u e e s o e s u n e r r o r (lógico si tenemos en cuenta que el RPC provoca una caída Puedes crearte tu directorio donde quieras, no es necesario completa del sistema), solo decirte que AZIMUT ha que sea en d:mellamojuan. Tienes total libertad!!! Una configurado un firewall desde cero que evita el bug del i d e a e s c r e a r l o , p o r e j e m p l o , e n RPC, (bloqueo de los puertos 135 (tcp/udp), 137 (udp), d:xxxsystem32default10019901mellamojuan (ya irás 138 (udp), 445 (tcp), 593 (tcp)). La intención de todo esto aprendiendo que cuanto mas oculto mejor :) es, precisamente, que puedas practicar tanto con el CODE/DECODE como con cualquier otro “bug” que conozcas (y hay cientos!!!). Poco a poco iremos cambiando la Es posiblemente la primera vez que tienes la oportunidad c o n f i g u ra c i ó n e n f u n c i ó n d e l a e x p e r i e n c i a , l a i d e a e s t e n e r de investigar en un servidor como este sin cometer un delito los Servidores lo menos parcheados posibles pero (nosotros te dejamos y por lo tanto nadie te perseguirá). mantenerlos operativos las 24 horas del día. Por todo ello Aprovecha la oportunidad!!! e investiga mientras dure esta y debido a posibles cambios de configuración, no olvides iniciativa (esperemos que muchos años). visitar el foro (Zona Comunicados) antes de “penetrar” en nuestros servidores. - En este momento tenemos mas de 600 carpetas de peña que, como tu, está practicando. Así que haznos caso y crea - Cada Servidor tiene dos unidades (discos duros duros): t u p r o p i a c a r p e t a d o n d e t r a b a j a r. * La unidad c: --> Con 40GB y Raíz del Sistema * La unidad d: --> Con 40GB * La unidad e: --> CD-ROM 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 ;)
  • 11. Serie Xbox Life (IV) Convirtiendo nuestra Xbox en un centro Multimedia. - ¿Podemos ver películas en DivX con la XBOX? - ¿Y escuchar musica en formato MP3? - ¿Y visualizar fotos? Aquí estamos un mes más, antes de todo Pues muy sencillo, dependiendo del lector que quiero agradecer a los que apoyan esta serie, tengamos, podremos usar CD´s, CD-RW, DVD es muy grato ver recompensado el esfuerzo. y determinadas marcas de cada uno de éstos. GRACIAS. Samsung: Este mes vamos a descubrir los distintos Este lector es el lectores DVD que tiene la consola Xbox y mejor, lee lo que vamos a instalar y configurar unos programas le metas, tanto que nos permitan ver películas DivX, escuchar CD´s como MP3, ver fotos, incluso ahorrarnos el tener D V D ´ s y que comprar el Kit DVD para ver las películas prácticamente de en este formato. cualquier marca. En la imagen de Como es de costumbre en esta serie, os voy arriba podéis ver a detallar lo que necesitamos para hacer todas cómo es la estas cosas. bandeja de este lector, así podréis Lo que necesitamos: saber qué lector Xbox con mod chip. lleva vuestra Evox instalado en nuestra consola consola sin Media Center (la versión más reciente) necesidad de abrirla. DVDX2. ZXBTOOLS (Ultima versión). Philips: Pc Preparado. Este lector es el segundo si los Todos los programas los podréis encontrar en ordenamos de la Web de la revista (www.hackxcrack.com). mejor a peor. Lee algunos CD´s y Los DVD de XBOX: DVD´s de m a r c a s Algunos de vosotros sabréis ya que hay 3 conocidas, fabricantes distintos de lectores para esta siempre y cuando consola, para quien no lo sepa, las marcas se calibre la lente son Samsung, Thompson y Philips. para que los lea, ya que el láser encargado de leer los CD´s Os podéis estar preguntando, ¿para qué os está tan bajo de potencia que no es capaz de cuento esto? leerlos. PC PASO A PASO Nº 18 Página 11
  • 12. Programación PHP - Programación PHP - Programación PHP - Programación PHP El calibrar la lente lleva sus riesgos, ya que consola para manejaros por los menús, pero os habréis ahorrado 30€. le acortas la vida y en muchos casos, si se hace mal, puede dejar de funcionar. Instalando y Configurando El Xbox Media Center: Thompson: Lo descargamos de la web, lo descomprimimos en una Este podríamos carpeta y veremos esto: decir que es el peor, ya que no lee CD´s, solo CD-RW y de lagunas marcas como VERBATIM. Con los DVD también tenemos el mismo problema y lo más aconsejable es usar los de marca PRIMCO. Nos metemos en la carpeta “xbmc-2004-01-02” y veremos Instalando DVDX2: esto: Nos lo descargamos de la Web y lo descomprimimos en una carpeta del pc. Veremos dos archivos: el dvdx_v2.0.iso y dvdx2.txt. El txt lo podemos borrar, sólo trae información de quien lo creó. Extraemos dvdx_v2.0.iso con el ZXBTOOLS (como os enseñé el mes pasado) y tendremos una carpeta llamada “Media” y un archivo Editamos con el bloc de notas el archivo “XboxMediaCenter.xml”. llamado “default.xbe”. Aquí os digo os enseño cómo he configurado el archivo, lo configuramos a nuestro gusto (lo que está en negrita Ahora tenemos que pasar la carpeta y el es la explicación): archivo al HD de la consola. Si tenéis configurado el evox como expliqué <xboxmediacenter> anteriormente, copiáis todo a la carpeta MP que creamos en el artículo de Evolution X. Si #Skin que cargará al iniciar el programa, lo dejamos no fuera así, lo copiáis a la carpeta que como está!# corresponda. <skin>MediaCenter</skin> La transferencia la hacemos por FTP. Copiamos todo, reiniciamos la consola y lo veremos en #Dirección IP, Máscara subred, Puerta de enlace por el apartado donde los hayáis copiado (en mi defecto, Nombre del server (Dejad en blanco si caso Media Players). queréis usar los valores del Evolution X) !# Nos preparamos unas palomitas, arrancamos <ipadres>-</ipadres> el DVDX2, metemos la película y a disfrutar. <netmask>-</netmask> Con esto tendréis que usar el mando de la <defaultgateway>-</defaultgateway> Página 12 PC PASO A PASO Nº 18
  • 13. Programación PHP - Programación PHP - Programación PHP - Programación PHP <nameserver>192.168.0.1</nameserver> #Ruta donde guarda el contenido destinado a la <CDDBIpAdres>194.97.4.18</CDDBIpAdres> memoria caché de los álbumes de fotos (lo dejamos <CDDBEnabled>yes</CDDBEnabled> como está) !# #Determina las unidades del hd de la consola que <albums>$HOMEalbums</albums> se puede usar !# #Lo dejemos como esta, son los valores del mando !# <useFDrive>yes</useFDrive> <useGDrive>no</useGDrive> <delays> <remote> #Valores del servidor proxy!# <move>220</move> <httpproxy>-</httpproxy> <repeat>300</repeat> <httpproxyport>-</httpproxyport> </remote> #Servidor remoto que nos dará la fecha y hora!# <controller> <move>220</move> <timeserver>207.46.248.43</timeserver> <repeat>220</repeat> </controller> #El dashboard que arrancará al salir!# </delays> <dashboard>C:evoxdash.xbe</dashboard> # Aquí podemos especificar los iconos que se mostrarán en cada apartado !# #Directorios alternativos para los subtítulos de las #Para los archivos !# películas, no os olvidéis de crear esta carpeta !# <subtitles>$HOMEsubtitles</subtitles> <filetypeicons> <xbe>defaultProgram.png</xbe> #Lo dejamos como está !# </filetypeicons> <startwindow>0</startwindow> #Esta es la configuración base del menú, es decir #Extensiones de las fots, Videos y Sonidos que lo que vamos a ver en el programa, en cada sección. queremos que acepte. Si falta alguna, agregadla!# Podemos agregar o quitar la que queramos, en name ponemos el nombre que queramos y en path ponemos <pictureextensions>.png|.jpg|.jpeg|.bmp|.gif|.ico|.tif|.ti la ruta a la carpeta, por ejemplo, he quitado el acceso ff|.tga|.pcx</pictureextensions> a c: y os aconsejo que hagáis lo mismo.!# <musicextensions>.m4a|.flac|.ac3|.aac|.nfo|.pls|.rm|. mpa|.wav|.wma|.ogg|.mp3|.mp2|.m3u</musicextensions> #Configuración para Mis programas# <videoextensions>.nfo|.rm|.m3u|.ifo|.mov|.qt|.divx|.xv id|.bivx|.vob|.pva|.wmv|.asf|.asx|.ogm|.m2v|.avi|.bin|. <myprograms> dat|.mpg|.mpeg|.mkv|.avc|.vp3|.svq3|.nuv|.viv|.dv|.fli <bookmark> </videoextensions> <name>Programas en E:</name> <path>E:apps</path> <!-- path where xbmc should store its thumbnails !# </bookmark> <thumbnails>$HOMEthumbs</thumbnails> <bookmark> <name> Programas en F:</name> #Directorio donde almacenará los atajos (lo dejamos <path>F:apps</path> como está !# </bookmark> <bookmark> <shortcuts>$HOMEshortcuts</shortcuts> <name>Programas en DVD </name> #Ruta donde guarda el contenido destinado a la <path>D:</path> memoria caché (lo dejamos como está) !# </bookmark> </myprograms> <imdb>$HOMEimdb</imdb> PC PASO A PASO Nº 18 Página 13
  • 14. Programación PHP - Programación PHP - Programación PHP - Programación PHP #Configuración para las fotos !# #Mis archivos !# <pictures> #Más de lo mismo, venga, a configurar !# <default></default> <bookmark> <files> <name>Fotos E </name> <bookmark> <path>E:fotos</path> <name>E :</name> </bookmark> <path>E:</path> <bookmark> </bookmark> <name>Fotos F:</name> <bookmark> <path>F:fotos</path> <name>F: drive</name> </bookmark> <path>F:</path> <bookmark> <name>Fotos en DVD</name> </bookmark> <path>D:</path> <bookmark> </bookmark> <name>DVD</name> <path>D:</path> #Ahora llega lo interesante, estos apartado son para </bookmark> hacer stemig o lo que es lo mismo, pillar los archivos <bookmark> en este caso las fotos del PC, por medio del cable <name>SMB</name> RJ-45, y aquí se pueden definir los valores. Podéis <path>smb://192.168.0.1/archivos/</path> quitar los que no uséis; yo solo uso el SMB, que más </bookmark> adelante os explicaré cómo se configura. A partir de </files> aquí quitaré los demás !# <bookmark> # Mi música !# <name>XNS</name> <path>xns://192.168.0.1:1400/</path> <music> </bookmark> <default></default> <bookmark> <bookmark> <name>XBMS</name> <path>xbms://192.168.0.1:1400/</path> <name>Musica E: </name> </bookmark> <path>E:MP3</path> </bookmark> #Aquí está la configuración del strem por SMB, <bookmark> dependiendo de cómo hayáis compartido la carpeta <name>Musica F:</name> en el pc, se configura de una manara o de otra!# <path>F:MP3</path> </bookmark> <bookmark> <bookmark> <name>SMB</name> <name>MP3 DVD</name> <path>D:</path> #Este es un ejemplo </bookmark> smb://dominio;Usuario:contraseña@servidor/carp <bookmark> eta compartida !# <name>SMB</name> #Así tengo configurado el mío !# <path>smb://192.168.0.1/mp3/</path> </bookmark> <path>smb://192.168.0.1/fotos/</path> </music> </bookmark> </pictures> Página 14 PC PASO A PASO Nº 18
  • 15. Programación PHP - Programación PHP - Programación PHP - Programación PHP #Mis videos !# Pinchamos en la pestaña compartir, seleccionamos la casilla “Compartir esta carpeta <video> en la red”, cambiamos el nombre si ya esta <default></default> ocupado y aceptamos. <bookmark> Esto lo hacemos con todas las carpetas que <name>Viedos E:</name> hemos puesto en los apartados de SMB. <path>E:videos</path> </bookmark> Pues ya está todo. Pasamos todo lo que hay <bookmark> en esta carpeta a su carpeta correspondiente <name>Videos F:</name> del HD de la consola, lo arrancamos y a <path>F:videos</path> disfrutar. </bookmark> <bookmark> Con un poco de investigación os haréis con el <name>Videos DVD</name> control de todo, es muy sencillo e intuitivo. <path>D:</path> </bookmark> El mes que viene jugaremos online GRATIS. <name>SMB</name> Hasta entonces. <path>smb://192.168.0.1/videos/</path> </bookmark> Salu2. </video> </xboxmediacenter> Ya se ha acabado la configuración, así que guardamos los cambios, y salimos del bloc de notas. Ahora tenemos que compartir las carpetas en nuestro PC para que a través de la red podamos cargar películas o escuchar música. En Windows XP se haría de la siguiente manera: Abrimos el explorador de Windows, nos situamos encima de la carpeta que queremos compartir, por ejemplo el de videos, pinchamos con el botón derecho sobre la carpeta y pinchamos en propiedades: PC PASO A PASO Nº 18 Página 15
  • 16. ProgramaciOn en GNU/LiNUX Memoria Compartida el_chaman. Luis U. Rodríguez Paniagua - Intercambio de datos entre procesos - pipes - Memoria compartida - sockets - Colas de mensajes 1. Presentación 2.1. Solicitud de memoria compartida En el presente artículo veremos como es posible intercambiar datos entre dos procesos. La primera operación que debemos aprender Dispondremos de tres mecanismos básicos: es la necesaria para solicitar una zona de Memoria compartida, colas de mensajes y memoria compartida. La manera de hacer esto es mediante la función: empleo de pipes y sockets. Analizaremos en el presente artículo las dos primeras formas. #include <sys/types.h> #include <sys/ipc.h> 2. Memoria compartida. #include <sys/shm.h> int shmget(key_t key, int size, int shmflg); Este será el método más rápido de comunicar dos procesos entre sí. Consiste en hacer que Retorna: -1 en caso de error, o el identificador dos procesos compartan una zona común de de la zona de memoria compartida en otro memoria de manera que los dos procesos caso. podrán leer y escribir en dicha zona de shmget reserva una zona de memoria de memoria. tamaño size bytes devolviendo un identificador que nos permitirá manejar dicha zona de Esto, que en teoría es sencillo de entender, memoria. El objetivo de key es similar al visto a la hora de llevarlo a la práctica se complica en la llamada de semáforos semget (es decir, un poco. Cada vez que ejecutamos un proceso, pasar una clave única que servirá en nuestro este tiene asociada una parte de la memoria caso para identificar de manera única la zona exclusivamente para él. Ahí será donde guarde de memoria asociada a nuestro proceso). sus datos ( va r i a b l e s , pila, etc...). En cuanto a shmflag será una máscara de bits Si en alguna ocasión este proceso intenta que indicarán el modo de adquisición del acceder a una zona de memoria a la que no identificador devuelto por shmget: tiene acceso u otro proceso intenta acceder Si el bit IPC_CREAT está activo, la zona a la memoria reservada para este proceso, compartida de memoria se creará a no ser se estará produciendo una violación de que haya sido creada por otros procesos. segmenteto con lo cual el programa fallará. Si los bits IPC_CREAT e IPC_EXCL están El encargado de controlar esto es el S.O., y activos simultáneamente, la llamada a shmget afortunadamente en nuestro caso, este falla en caso de que la memoria compartida dispone de la interfaz adecuada que nos hubiese sido reservada previamente. permitirá crear zonas de memoria especiales Además de estos valores podremos indicar que podrán ser compartidas entre varios los permisos: 0400 (lectura para el usuario), procesos. 0200 (modificación para el usuario), 0060 Página 16 PC PASO A PASO Nº 18
  • 17. Curso de linux - Memoria compartida - Curso de linux - Memoria compartida - Curso de linux (permiso de lectura y modificación para el struct shmid_ds { struct ipc_perm shm_perm; /* Estructura de permisos */ grupo) y 0006 (permiso de lectura y int shm_segsz; /* Tamaño del área de memoria (bytes) */ time_t shm_atime; /* last attach time */ modificación para el resto de los usuarios). time_t shm_dtime; /* last detach time */ time_t shm_ctime; /* last change time */ Para crear una zona de memoria compartida unsigned short shm_cpid; /* pid of creator */ de 1KByte (1024 bytes) con permisos de unsigned short shm_lpid; /* pid of last operator */ short shm_nattch; /* no. of current attaches */ e s c r i t u ra l e c t u ra s ó l o p a ra u s u a r i o ... teclearíamos: }; int shmid; struct ipc_perm { ... key_t key; ushort uid; /* owner euid and egid */ if (( shmid = shmget(IPC_PRIVATE, 1024, IPC_CREAT | 0600 )) == -1) ushort gid; { ushort cuid; /* creator euid and egid */ ushort cgid; fprintf(stderr, " ERROR al reservar memoria compartidan"); ushort mode; /* lower 9 bits of access modes */ } ushort seq; /* sequence number */ }; .... 2.2. Control de memoria IPC_SET Inicializa algunos de los campos compartida de la estructura de control de la memoria compartida. El valor de estos campos se Una vez que hemos reservado una zona de toma de la estructura referenciada por *buf. memoria compartida, podemos realizar IPC_RMID Elimina la zona de memoria diversas operaciones de control sobre dicha asociada al identificador shmid. Si esta zona zona con el fin de establecer distintos atributos de memoria compartida está siendo usada de la misma. Estas operaciones de control por varios procesos, no se elimina hasta las realizará la función shmctl. que todos los procesos liberen esta zona de memoria compartida. La declaración de esta función es: #include <sys/types.h> SHM_LOCK Bloquea en memoria el segmento identificado por shmid impidiendo #include <sys/ipc.h> el intercambio sobre él. Esta operación sólo #include <sys/shm.h> puede ser realizada por el superusuario. int shmctl(int shmid, int cmd, struct shmid_ds *buf); SHM_UNLOCK. Desbloquea en memoria el Retorna 0 en caso de éxito y -1 en caso de segmento identificado por shmid. Esta error. operación sólo la puede realizar el superusuario. shmid es el identificador de memoria compartida sobre el que vamos a operar. 2.3. Operaciones con memoria cmd es la operación de control que queremos compartida realizar. Este parámetro puede tomar los Para poder usar una zona de memoria siguientes valores: compartida que previamente hemos creado, esta debe ligarse al espacio de direcciones de IPC_STAT Lee el estado de la estructura de memoria asignadas a nuestro proceso. La control de la memoria y lo devuelve a través forma en la que vamos a poder ligar o desligar de la zona de memoria apuntada por *buf. una zona de memoria compartida al espacio La estructura de esta zona de memoria es: de direcciones de nuestro proceso es mediante el empleo de las funciones shmat y shmdt. PC PASO A PASO Nº 18 Página 17
  • 18. Curso de linux - Memoria compartida - Curso de linux - Memoria compartida - Curso de linux #include <sys/types.h> #include <stdio.h> #include <sys/ipc.h> #include <stdlib.h> #include <sys/shm.h> #include <sys/types.h> #include <sys/ipc.h> void *shmat(int shmid, const void *shmaddr, int shmflg); #include <sys/shm.h> #include <sys/sem.h> shmat es la función encargada de ligar una zona de memoria compartida al espacio de direcciones de memoria local del proceso. int main(int argc, char *argv[]) { Retorna: la dirección a la que está unida la zona de memoria compartida. -1 en caso de int shmid, i, semid, estado, pid; error. struct sembuf operaciones; char *mensaje; Los parámetros que recibe son: shmid que será el identificador de la zona de memoria key_t clave; compartida a enlazar. shmaddr será la dirección virtual donde queremos que nuestro // proceso "vea" la zona de memoria compartida. // Zona de cración de memoria compartida Como esto lo debe asignar el núcleo, puede // que no siempre se nos devuelva el puntero // Creación de la memoria compartida apuntando a shmaddr, por lo que se suele poner este parámetro a 0 y dejar la // Primero la clave de recurso IPC responsabilidad al S.O. if( (clave = ftok("shm.c",'K'))==-1) { En cuanto a shmflg, se trata de una máscara de bits que indica el modo de acceso a fprintf(stderr," Error al crear la claven"); memoria. Si queremos hacer un acceso de return -1; sólo lectura, indicaremos, por ejemplo, } SHM_RDONLY (Más información en la página // Ahora la memoria compartida. Tamaño: 1024 caracteres de manual correspondiente). if( (shmid=shmget(clave, 1024 * sizeof(char), IPC_CREAT | 0600))==-1) La función encargada de desligar la zona de { memoria compartida es shmdt: fprintf(stderr," Error al crear segmento de memoria compartidan"); #include <sys/types.h> return -1; #include <sys/ipc.h> } #include <sys/shm.h> // Ahora debemos enlazar la zona de memoria compartida con la // memoria local del proceso. int shmdt(const void *shmaddr); if( (mensaje=(char *)shmat(shmid, 0, 0))==-1) Retorna: 0 en caso de éxito, -1 en caso de { error. fprintf(stderr," Error al ligar la memoria compartidan"); Esta función recibirá como único parámetro: return -1; shmaddr que es el puntero que señala a la zona de memoria compartida a desligar. } 2.4. Ejemplo de uso // Comienza el lanzamiento de procesos En este primer ejemplo vamos a hacer que // un proceso hijo llene un vector de caracteres if((pid=fork())==-1) con una frase. A continuación el proceso padre, espera a que termine el hijo y lee { dicho vector: // Escribimos en la memoria compartida Página 18 PC PASO A PASO Nº 18
  • 19. Curso de linux - Memoria compartida - Curso de linux - Memoria compartida - Curso de linux fprintf(stderr, "Error al lanzar proceso hijon"); int main(int argc, char *argv[]) return -1; { } int shmid, i, estado; if (pid != 0) // Somos el padre struct sembuf operaciones; { char *mensaje, buffer[80]; // leemos de la memoria compartida key_t clave; // Esperamos a que termine el proceso hijo wait(&i); // for(i=0;i<1024;i++) // Zona de creación de memoria compartida printf("%c-", mensaje[i]); // return 0; // Creación de la memoria compartida } // Primero la clave de recurso IPC else // Somos el hijo if( (clave = ftok("shm.c",'K'))==-1) { { // Escribimos algo fprintf(stderr," Error al crear la claven"); strncpy(mensaje, "Hola, esto es una prueba de memoria compartida", 1024); return -1; return 0; } } // Ahora la memoria compartida. Tamaño: 1024 caracteres if( (shmid=shmget(clave, 1024 * sizeof(char), IPC_CREAT | 0600))==-1) // Limpieza de memoria compartida { if((shmdt(mensaje))==-1) fprintf(stderr," Error al crear segmento de memoria compartidan"); { return -1; fprintf(stderr," Error al desaligar memoria compartidan"); } } // Ahora debemos enlazar la zona de memoria compartida return 0; // con la memoria local del proceso. } if( (mensaje=(char *)shmat(shmid, 0, 0))==-1) { Pero es en los siguientes ejemplos donde fprintf(stderr," Error al ligar la memoria compartidan"); muestra un poco más de potencia el empleo return -1; de la memoria compartida. Imaginemos que tenemos dos programas cuyo código es el } siguiente: // // Comienza el lanzamiento de procesos // Servidor que muestra lo que escribe el cliente // // Compilar con: gcc shm_s.c -o shm_s printf("n Lectorn"); // do{ #include <stdio.h> for(i=0;i<80;i++) #include <stdlib.h> printf("%c",mensaje[i]); #include <sys/types.h> printf("n"); #include <sys/ipc.h> sleep(1); #include <sys/shm.h> #include <sys/sem.h> }while(mensaje[0]!='0'); PC PASO A PASO Nº 18 Página 19
  • 20. Curso de linux - Memoria compartida - Curso de linux - Memoria compartida - Curso de linux // Limpieza de memoria compartida { if((shmdt(mensaje))==-1) fprintf(stderr," Error al crear segmento de memoria compartidan"); { return -1; fprintf(stderr," Error al desaligar memoria compartidan"); } } // Ahora debemos enlazar la zona de memoria compartida con la return 0; // memoria local del proceso. } if( (mensaje=(char *)shmat(shmid, 0, 0))==-1) { El servidor examina el buffer de memoria fprintf(stderr," Error al ligar la memoria compartidan"); compartida cada segundo e imprime su contenido. return -1; } El cliente será el encargado de llenar dicho buffer: // Comienza el lanzamiento de procesos // // // Cliente que escribe lo que mostrará el servidor printf("n Escriba 0 para salirn"); // Compilar con: gcc shm_c.c -o shm_c do{ // printf("n > "); #include <stdio.h> i=0; #include <stdlib.h> do #include <sys/types.h> { #include <sys/ipc.h> fscanf(stdin, "%c", &mensaje[i]); #include <sys/shm.h> i++; #include <sys/sem.h> }while(mensaje[i-1]!=10); //scanf("%s", buffer); int main(int argc, char *argv[]) //strncpy(mensaje, buffer, 80); { for(j=i;j<1024;j++) int shmid, i,j, estado; mensaje[j]=' '; // rellenamos el resto del buffer struct sembuf operaciones; // con espacios char *mensaje, buffer[80]; }while(mensaje[0]!='0'); key_t clave; // Limpieza de memoria compartida // if((shmdt(mensaje))==-1) // Zona de cración de memoria compartida { // fprintf(stderr," Error al desaligar memoria compartidan"); // Creación de la memoria compartida } // Primero la clave de recurso IPC return 0; if( (clave = ftok("shm.c",'K'))==-1) } { fprintf(stderr," Error al crear la claven"); Una vez compilados estos programas, en dos terminales distintos, abrimos primero un return -1; cliente y escribimos algo: } luis@leonov:~/articulos/articulo11_el_chaman/code$ ./shm_c // Ahora la memoria compartida. Tamaño: 1024 caracteres Escriba 0 para salir if( (shmid=shmget(clave, 1024 * sizeof(char), IPC_CREAT | 0600))==-1) > hola Página 20 PC PASO A PASO Nº 18
  • 21. Curso de linux - Memoria compartida - Curso de linux - Memoria compartida - Curso de linux Y en otro terminal ejecutamos el servidor: luis@leonov:~/articulos/articulo11_el_chaman/code$ ./shm_s Lector hola A partir de este momento cada cosa que escribamos en el cliente será mostrado en el servidor cada segundo. Estos dos programas aún se pueden mejorar un poco de manera que, por ejemplo, el servidor sólo muestre algo cuando el buffer está lleno (vaciándolo por ejemplo tras recibir el último dato o sincronizando los procesos mediante semáforos). Dejo a los lectores el practicar con estos ejercicios.
  • 22. CURSO DE TCP/IP (2ª Entrega) EL PROTOCOLO DE TRANSPORTE UDP (PROTOCOLO DE DA AGRAMAS DE USUARIO) T - Vamos a descubrir las herramientas necesarias para "crear" paquetes de red - Empezaremos a desgranar las capas de red - Trataremos el Protocolo de Datagramas de Usuario 1. INTRODUCCIÓN el protocolo UDP, pero en futuras lecciones exprimiremos al máximo las herramientas Espero que no os perdieseis el primer artículo para hacer maravillas con las demás capas de del curso de TCP/IP (Transmisión Control protocolos: TCP, IP, ARP (Address Resolution Protocol / Internet Protocol --- Protocolo de Protocol --- Protocolo de Resolución de Control de Transmisión / Protocolo de Direcciones), etc. Internet), porque voy a asumir que habéis Empezaré explicando a grandes rasgos el comprendido a grandes rasgos el concepto mecanismo de transporte de un paquete UDP de capas de protocolos, y el mecanismo básico a través de Internet para luego detallar las de transporte de paquetes de datos a través cabeceras UDP y, por último, veremos todo de Internet (o cualquier otra red TCP/IP). esto de forma práctica utilizando unas herramientas que nos permiten construir ! NOTA DE PC PASO A PASO / HXC paquetes UDP desde cero (los llamados “raw sockets”). Para todos aquellos que no tienen la primera entrega del Pero, antes de empezar, he de aclararos un curso de TCP / IP publicada en el número 17 de PC PASO asunto. Supongo que algunos de vosotros os preguntareis qué ha pasado con la serie RAW. A PASO, hemos decidido pasarla a formato PDF y liberarla Mis intenciones no eran de ninguna manera en la Web de la revista (www.hackxcrack.com). sustituir la serie RAW por el curso de TCP/IP, si no desarrollar ambos en paralelo. Pero es También aprovechamos esta “nota” para indicar increíble de qué manera pueden conspirar a nuestros lectores que todos los artículos juntas las circunstancias de la vida para liberados y los programas que mencionamos cambiar por completo tu rumbo cuando menos en los artículos están disponibles en la sección te lo esperas. En poco más de un mes me han ARTÍCULOS LIBERADOS Y DESCARGAS de la surgido una serie de problemas de todo tipo Web. (familiares, personales, de salud, laborales, y académicos) por los cuales ahora (y sin Para esta primera “lección” he escogido un plazo definido) dispongo de muchísimo menos protocolo muy sencillo, el protocolo UDP (User tiempo. Datagram Protocol --- Protocolo de He barajado un poco mis posibilidades, y creo Datagramas de Usuario), para así poder que lo que puedo permitirme de momento es extenderme más en explicaros algunas continuar sólo con el curso de TCP/IP, aunque herramientas que nos pueden ser útiles a lo no descarto publicar algún otro artículo de la largo de todo el curso. De momento, estas serie RAW algún mes que consiga juntar algo herramientas las utilizaremos para manejar más de tiempo. Con esto lo que os quiero Página 22 PC PASO A PASO Nº 18
  • 23. Curso de TCP/IP (2) - UDP - Curso de TCP/IP (2) - UDP - Curso de TCP/IP (2) - UDP decir es que no os prometo nada con respecto protocolo DNS. Vamos a utilizar este protocolo a la serie RAW, pero que haré lo que esté en como ejemplo para ver qué ocurre desde que mi mano para que no termine aquí, aunque un cliente solicita una consulta DNS a un haya que avanzar ahora mucho más despacio. servidor, hasta que éste cliente recibe la respuesta pertinente. Os aconsejo que leáis Gracias por vuestra comprensión. ;-) el artículo sobre DNS de la serie RAW, que se encuentra en el número 14 de la revista, ! NOTA EDITORIAL aunque voy a empezar haciendo una introducción sobre este protocolo. Para los nuevos lectores, simplemente decir que la serie de artículos denominada “SERIE RAW” ha estado presente en casi todos los números de esta publicación y ha ! NOTA DE PC PASO A PASO / HXC: constituido uno de los pilares de la misma. El artículo SERIE RAW: DNS mencionado por el autor ha La Serie RAW ya nos ha aportado conocimientos sobre los sido liberado y está disponible en nuestra Web: Protocolos más importantes y desde hace mucho tiempo www.hackxcrack.com se nos ha reclamado el inicio de un curso de TCP / IP. Finalmente, desde el anterior número 17 por fin ese curso ha llegado. 2.1. LAS CAPAS DE UDP/IP Tal y como nos describe el autor, esperamos poder hacer Os recuerdo que el protocolo DNS es el que más entregas de la Serie Raw en futuros números, pero de nos permite utilizar las famosas URLs en lugar forma más dilatada en el tiempo. Mientras tanto disfrutemos de direcciones IP. Es decir, nos permite escribir de este excelente curso de TCP / IP, una serie de artículos en nuestro navegador http://www.google.com ampliamente reclamada y esperada por nuestros lectores. en lugar de tener que escribir http://216.239.39.99, que es la dirección IP de Google. 2. FUNCIONAMIENTO DEL Para conseguir esto, existen repartidos por el PROTOCOLO UDP mundo una serie de servidores encargados de traducir URLs a IPs, e IPs a URLs. Nuestros PCs se comunicarán con alguno de estos Los que os perdisteis la introducción de este servidores cada vez que quieran utilizar una curso no tenéis que preocuparos, ya que este URL, para obtener así su IP correspondiente. primer punto resume en cierto modo lo que Esta comunicación se lleva a cabo a través expliqué entonces. Aún así, os recomiendo del protocolo DNS. que leáis la introducción, ya que aquí voy a resumir en un par de páginas lo que allí Cuando escribimos en nuestro navegador una explicaba en más de 20 páginas. URL, por ejemplo http://neworder.box.sk, nuestro sistema enviará una consulta DNS a Para los que sí que leísteis la introducción, un servidor, indicando en la consulta el nombre este punto creo que os puede ayudar a aclarar que desea traducir (en este caso las ideas a modo de resumen. neworder.box.sk, ya que el prefijo http:// es sólo una indicación al navegador sobre el A lo largo de la serie RAW os expliqué varios protocolo a utilizar, pero no forma parte del protocolos que funcionaban sobre TCP, pero nombre que deseamos traducir). sólo uno que funcionase sobre UDP: el PC PASO A PASO Nº 18 Página 23
  • 24. Curso de TCP/IP (2) - UDP - Curso de TCP/IP (2) - UDP - Curso de TCP/IP (2) - UDP En segundo lugar, sabiendo que en Internet todas las máquinas están conectadas entre sí mediante una compleja red de cables y conexiones inalámbricas, es lógico pensar que será necesario conocer el camino a recorrer en toda esa maraña de cables para enlazar ambas máquinas entre sí. En tercer lugar, el cliente necesitará conocer la dirección IP del servidor DNS, ya que sólo conociendo la dirección IP de una máquina El servidor DNS nos enviará una respuesta puedes acceder a ella a través de Internet. que contendrá la IP correspondiente a ese nombre. En cuarto lugar, tiene que existir algún mecanismo que le indique al servidor que la consulta que le estamos haciendo es una consulta DNS, y no de cualquier otro tipo. Por ejemplo, el servidor DNS podría ser al mismo tiempo un servidor Web, y un servidor de correo electrónico. Por tanto, tiene que existir un mecanismo que le permita distinguir qué clientes solicitan servicios DNS, cuáles solicitan servicios Web, y cuáles solicitan servicios de correo eletrónico. Gracias a esto, a continuación nuestro A grandes rasgos, son cuatro los problemas navegador podrá acceder a la máquina que que hemos encontrado para conseguir llevar contiene la página Web que deseamos visitar, a cabo esta comunicación. Y, por supuesto, ya que sólo puede existir una comunicación no es coincidencia que sean cuatro las capas directa entre dos máquinas si cada una conoce de protocolos utilizadas en una comunicación la dirección IP de la otra. UDP: capa física, capa de enlace, capa de red, y capa de transporte. Ahora vamos a pensar un poco en cómo se podría conseguir todo este mecanismo del Si no fuese gracias a la existencia de estas 4 DNS, en el cual un cliente solicita un nombre capas diferenciadas, el protocolo DNS debería a un servidor, y el servidor le responde con encargarse por sí sólo de solucionar todos la IP correspondiente. ¿Qué problemas se nos estos problemas. Es decir, el protocolo DNS presentan a la hora de llevar a cabo este debería tener sus propias conexiones físicas proceso aparentemente tan sencillo? Pensadlo entre máquinas, sus mecanismos para un poco, y después mirad la lista de problemas encontrar un camino entre todas las máquinas a salvar que os pongo a continuación, para que están conectadas simultáneamente, sus ver si habéis llegado a las mismas propias direcciones IP, y sus propios conclusiones: mecanismos para diferenciarse de otros servicios (como la Web o el correo En primer lugar, por supuesto, hay que electrónico). conseguir que ambas máquinas (cliente y Esto convertiría al aparentemente sencillo servidor) tengan una conexión física, ya protocolo DNS en un sistema de una sea por cables, por radio, o por cualquier otro complejidad inabarcable, y lo mismo ocurriría medio físico que les permita establecer una con cualquier otro protocolo que tuviese que comunicación bidireccional. Página 24 PC PASO A PASO Nº 18