Haxcra17

Embed Size (px)

Citation preview

  • 8/14/2019 Haxcra17

    1/68

    HACK X CRACK: HACKEANDO SERVIDORES WINDOWS EN 40 SEGUNDOS :)

    PROGRAMACION DEL SISTEMA

    LOS MEJORES ARTCULOS GRATIS EN NUESTRA WEB

    PC PASO A PASO: TC P-IP NUNC A FUE TAN FACIL, ATREVETE!! !

    N 17 -- P.V.P. 4,5 EUROS

    TCPCP/IP:EL/IP:ELALMALMA DEDEINTERNETNTERNET

    WINDOWSINDOWSADVDVANCEDSERNCEDSERVERER:HACKEADO EN40 SEGUNDOS !!!HACKEADO EN40 SEGUNDOS !!!

    3 SERVIDORES ON LINE PARA TUS PRACTICAS DE HACK

    SEMAFOROSSEALESTUBERIASREDES

    MANEJANDOCADENAS DE TEXTO

    PARCHEA TUS JUEGOS

    PP

    AA

    SS

    OO

    PP A S O A S O

    PP

    AA

    SS

    OO

    PP A S O A S Oaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

    8 4 1 40 9 0 2 0 27 5 6

    71000

    DESDE CEROa

  • 8/14/2019 Haxcra17

    2/68

  • 8/14/2019 Haxcra17

    3/68

    EDITORIAL: EDITOTRANS S.L.C.I.F: B43675701PERE MARTELL N 20, 2 - 143001 TARRAGONA (ESPAA)

    Director EditorialI. SENTISE-mail [email protected]

    Ttulo de la publicacinLos Cuadernos de HACK X CRACK.Nombre Comercial de la publicacnPC PASO A PASOWeb: www.hackxcrack.comDireccin: PERE MARTELL N 20, 2 - 1.

    43001 TARRAGONA (ESPAA)

    Quieres insertar publicidad en PC PASO APASO? Tenemos la mejor relacin precio-difusindel mercado editorial en Espaa. Contacta connosotros!!!

    Director de MarketingSr. Miguel MelladoTfno. directo: 652 495 607Tfno. oficina: 877 023 356E-mail: [email protected]

    Director de la PublicacinJ. Sents

    E-mail [email protected]

    Diseo grfico:J. M. Velasco

    E-mail contacto:[email protected]

    RedactoresAZIMUT, ROTEADO, FASTIC, MORDEA, FAUSTO,ENTROPIC, MEIDOR, HASHIMUIRA, BACKBONE,ZORTEMIUS, AK22, DORKAN, KMORK, MAILA,TITINA, SIMPSIM... ... ... ... ...

    Contacto [email protected]

    ColaboradoresMas de 130 personas: de Espaa, de Brasil, de

    Argentina, de Francia, de Alemania, de Japn yalgn Estadounidense.

    E-mail [email protected]

    ImprimeI.G. PRINTONE S.A. Tel 91 808 50 15

    DISTRIBUCIN:SGEL, Avda. Valdeparra 29 (Pol. Ind.)28018 ALCOBENDAS (MADRID)Tel 91 657 69 00 FAX 91 657 69 28

    WEB: www.sgel.es

    TELFONO DE ATENCIN AL CLIENTE: 977 22 45 80Peticin de Nmeros atrasados y Suscripciones (Srta. Genoveva)

    HORARIO DE ATENCIN: DE 9:30 A 13:30(LUNES A VIERNES)

    Copyright Editotrans S.L.NUMERO 17 -- PRINTED IN SPAINPERIOCIDAD MENSUALDeposito legal: B.26805-2002Cdigo EAN: 8414090202756

    PP

    AA

    SS

    OO

    PP A S O A S Oaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

    a

  • 8/14/2019 Haxcra17

    4/68

    EDITORIALel tiempo y las promesas

    Otro mes, otro nmero de PC PASO A PASO //Los Cuadernos de Hack x Crack.

    Este nmero marca el inicio de una nueva pocapara esta revista. Los cambios se dejarn ver pocoa poco y el objetivo es ir cumpliendo algunas delas promesas que hicimos en anteriores entregas.

    Para empezar iniciamos este mes el Curso deTCP/IP, algo esperado por muchos lectores y queha costado mucho empezar. Espero sinceramenteque os guste, porque nunca se ha escrito sobreTCP / IP de la forma en que nosotros lo hemoshecho.

    Tambin se nos ha reclamado que hagamos textossencillos de hacking para los novatos. Muy bien,pues este mes te merendars cuantos servidores

    Windows quieras en 40 segundos :)

    Esperando poder cumplir contigo, nosesforzaremos cada mes en ser mejores ymantenernos en este mercado. Parece que Hackx Crack abri la veda de revistas de hackingpero seguimos convencidos de que solo una daalgo mas.

    Nosotros no nos conformamos con darte carnaza,queremos que APRENDAS como funcionan lascosas. Sabemos que es una lnea editorial peligrosa,nuestros lectores decidirn si merecemos seguiren el mercado los prximos aos.

    Gracias de nuevo a nuestros lectores, a nuestrossufridos colaboradores y a la pea del foro.

    GRACIAS A TODOS !!!!

    44 EDITEDITORIALORIAL

    5 Hack5 Hackea Wea Windows en 40 segundosindows en 40 segundos

    114 Pr4 Pr ogramacin bajo linux: El sisogramacin bajo linux: El sis tt ema IPC(II)ema IPC(II)

    331 Cur1 Curso de Tso de TCP/IPCP/IP

    56 Cur56 Curso de PHP: Maneso de PHP: Manejo de cadenas de tjo de cadenas de t ex tex too

    63 XB63 XBOOX (III): Cambia el disco durX (III): Cambia el disco duro de tu Xboo de tu Xbo xx

    113 Ganador del concur3 Ganador del concur so Suse Linux.so Suse Linux.

    554 Colabora con noso4 Colabora con noso trtr os .os .

    62 Ser62 Ser vidor HXvidor HXCC: Modo de em: Modo de empleo.pleo.

    66 Descarga nues66 Descarga nues trtr os logos y melodias.os logos y melodias.

    667 Suscripciones.7 Suscripciones.

    68 Nmer68 Nmeros atrasados.os atrasados.

  • 8/14/2019 Haxcra17

    5/68

    PC PASO A PASO N 17 Pgina 5

    1.- Presentacin.

    Antes que nada, saludo a todos los lectoresde esta fantstica revista. Ya est, tena que

    hacerlo, hace tiempo que la sigo cada mes yescribir este artculo es para m un verdaderohonor :)

    Para ir tomando contacto, decir que hace casi12 aos que me dedico a la informtica yempec, como muchos en esta profesin,arreglando equipos en una empresa deHardware. Vale, vale quizs no te interesemi vida, pero unos cuantos aos despus mecontrataron en otra empresa que se dedicabaa solucionar problemas informticos en

    multitud de Bancos de toda Espaa ya teintereso mas? Ja, ja solo decirte que estuveen esta empresa durante 3 aos y todavame da miedo ingresar dinero en una cuentabancaria ;p (por motivos obvios no dar msdetalles sobre mi vida ;p)

    Quizs te preguntes a qu viene todo estobueno, pues muy sencillo. Los bancos utilizanunos programas llamados ERPs. No esnecesario para este artculo saber nada sobrelos ERPs aunque ya se habl de ellos en

    anteriores nmeros de la revista, simplementerecordaros que son complejos programas queutilizan las GRANDES EMPRESAS y muchosgobiernos para mantenernos a todos bien

    controlados.

    Una vez estuve en un edificio de tres plantasque contena los equipos donde se albergabanlos datos de una gran multinacional en Espaa,hablo de tres plantas repletas de inmensos

    servidores de datos (quien no lo ha visto, nopuede ni imaginrselo que sensacin ).Esos servidores de datos son (valga laredundancia) los que sirven los datos a cajeros

    automticos, a los seores de la ventanilla delbanco y hoy en da los que gestionan tambinla banca on-line. Imaginad lo complejo quees el software encargado de todo eso (pueseso es un ERP).

    2.- La historia.

    Bueno, que me pierdo y no hemos ni tansiquiera empezado. Los ERPs conviven (cadavez ms) con los sistemas que todosconocemos, si, hablamos de Windows y, en

    este caso, hablaremos concretamente deWindows NT, Windows 2000 y Windows XP.

    En los Windows se instalan los CLIENTESERP y la mayora de directores de banco tienenun flamante equipo informtico con Windowsinstalado y desde el que consultan los datosde sus clientes.

    Un buen da (sobre las 16:00 horas) me llamel director de una pequea sucursal y me rog(se le notaba bastante desesperado) que me

    pasase por su oficina, que haba cambiado laclave del Ordenador y que quizs la anot malporque era incapaz de iniciar el Windows.

    Yo haca ya tres meses que ya no trabajabaen la empresa encargada de esto y me extraque me llamase a m. Le dije que llamase ala empresa y le enviaran a alguien. Me contestque no, que le haban enviado a un idiota(palabras textuales) que quera reinstalarle el

    Hackeando un Servidor Windows en40 SEGUNDOS!!!

    - Vamos a Iniciar una sesin en un PC con Windows NT, Windows 2000, Windows 2003 o

    Windows XP sin conocer el PASWWORD. Lo haremos con poderes de administrador de

    sistema. Pofremos incluso cambiar el PASWORD del Sistema ;)

  • 8/14/2019 Haxcra17

    6/68

    Pgina 6 PC PASO A PASO N 17

    sistema y que perdera sus datos personales(casi tres aos de contactos personales yesas cosas que los directores de banco guardanen sus equipos, si, desde pornografa hasta

    recetas de cocina, he visto de todo).

    Le coment que el protocolo de trabajo exigeque esto sea as, por motivos de seguridad.Pero el hombre estaba realmente desesperado,me repeta sin cesar que su agenda personalestaba all y que tena datos muy importantesque necesitaba para esa misma tarde.

    Le dije que le explicase todo eso a la empresa,que haba maneras de recuperar lainformacin; pero me respondi que, segn

    le haba asegurado el Director Tcnico, sihaba perdido la clave no haba manera deIniciar Sesin en el equipo, que lo mximoque poda hacer es sacar el disco duro y entres semanas (mas o menos) le dira si habapodido recuperar la informacin de su agenda.

    Me repiti (una y otra vez) que necesitabaacceder no solo a su agenda, sino a un montnde archivos personales y que no quera quenadie husmease (palabras textuales) en susarchivos.

    Vale, finalmente me convenci para que leechase un vistazo (nunca viene mal un directorde banco "amigo). Cog mis herramientasde trabajo (las mas, las que ahora osensear) y en poco menos de una hora yaestaba frente al director y su flamante PC.

    Iniciamos el equipo y apareci la tpicaventanita de Inicio de Sesin donde te pidela clave de usuario

    Probamos (durante 5 minutos) lo tpico, ponerla contrasea en maysculas y en minsculasy esas cosas con resultado negativo. Le insinuque poda intentar hackearle la cuenta

    consejo: insinua, pero nunca le digas a nadieque sabes hacerlo y que sabes perfectamenteque puedes solucionar su problema, si despusno funcionase te odiarn el resto de su vidapor dar falsas esperanzas.

    Me mir sorprendido, como si estuvieseplantendole algo de ciencia ficcin. Me estudicon una mirada inquieta y me preguntCuntas horas necesitas? le contest conuna sonrisa mientras introduca un disketteen el PC y lo reiniciaba.

    40 segundos despus, el director estabaabriendo su valiosa agenda electrnica y miayuda se vio recompensada con 50.000 pesetasde las de antes ;) Nunca he visto a nadietan. agradecido?... no su cara era deverdadera INCREDULIDAD.

    Eso es lo que aprenderemos a hacer hoy,entrar en cualquier Windows NT, 2000 o XPsin conocer la contrasea. De hecho, lo queharemos realmente es cambiar (o eliminar)

    la contrasea :)

    3.- PREPARANDO NUESTRAS

    ARMAS

    Vamos a preparar nuestras herramientaspara poder entrar en cualquier Windows

    He podido ver...!

    Hackear Windows en 40 segundos - Hackear Windows en 40 segundos

    He podido ver muchas veces que en bancos y empresas

    tienen PCs fcilmente accesibles por casi todo el mundo,por ejemplo personal de limpieza (e incluso clientes en lasala de espera).

    La gente cree que un PC que tiene una contrasea est

    protegido ahora veremos que CUALQUIERA puedeentrar en l: Queda todo el mundo avisado!!!

  • 8/14/2019 Haxcra17

    7/68

    PC PASO A PASO N 17 Pgina 7

    NT3.51, Windows NT4, Windows 2000,Windows XP y Windows Server 2003. Deboadvertir yo no considero esto una tcnica dehacking, de hecho, creo que todo

    administrador de sistemas debera conocerestas tcnicas.

    Primero iremos a la Web de esta revista(www.hackxcrack.com) , entraremos en laseccin Artculos Liberados y Descargas,pulsaremos sobre la revista nmero 17 y nosdescargaremos el archivo bd040116.zip

    Descomprimiremos el archivo bd040116.zipdonde queramos (nosotros lo haremos enC:\FDD1) y obtendremos tres curiososarchivos: bd040116.bin, install.bat yrawrite2.exe

    bd040116.bin: Esta es una imagen dediskette. Supongo que debes estar harto de

    grabar imgenes de CD con la extensin ISOo NRG, pues bien, por si no lo sabes, tambinexisten las imgenes de Diskettes :) ahora veremos que la diskettera (unidad a:)sirve para algo mas que estorbar :)

    rawrite2.exe: Este es el programa queutilizaremos para grabar la imagen deldiskette. Para grabar una imagen de CD

    utilizamos, por ejemplo, el Nero Burning ROM,pues bien, para grabar una imagen de disketteutilizaremos el rawrite :)

    install.bat: esto es un simple archivoejecutable que automticamente llamar alprograma rawrite2.exe para que nos copie laimagen bd040116.bin en un diskette.

    Para el que no lo sepa, el archivo install.bat(y cualquier bat) puede visualizarse y editarse,por ejemplo, con el bloc de notas de Windows.Venga, pulsamos el botn derecho del Mousesobre el archivo install.bat --> abrir con -->Bloc de Notas. Lo que veremos es esto:

    Quien est acostumbrado a la lnea decomandos sabe perfectamente lo que hacenesas instrucciones, ahora no vamos a ponernos

    a dar un curso de MS-DOS. Como ya hemosdicho, simplemente nos crear un diskette.

    Pues venga, vamos a grabar el diskettemgico.1.- Ponemos un diskette en la diskettera (je,

    je vale, vale, no me mates)2.- Picamos dos veces sobre el archivoinstall.bat y nos saldr esta pantallita

    Por si acaso...!

    Hackear Windows en 40 segundos - Hackear Windows en 40 segundos

    Por si acaso la Web de la revista no est ON LINE, al finalde este artculo os pondr otros sitios para descargaros losarchivos que utilizaremos ;)

  • 8/14/2019 Haxcra17

    8/68

    Pgina 8 PC PASO A PASO N 17

    3.- nos pide que introduzcamos el nombre dela imagen de FDD a grabar, pues muy fcil,escribimos bd040116.bin y pulsamos enter.

    4.- Ahora nos pregunta dnde vamos agrabarlo. No, no es que el programa sea tonto

    y no sepa donde est la diskettera lo quepasa es que podramos tener 2 o msdisketteras y claro, nos pregunta en cualqueremos grabarla. Pues venga, escribimosa: y pulsamos enter. Nos dir queintroduzcamos un diskette en la unidad a:(eso ya lo hicimos antes), por lo tantovolvemos a pulsar enter :)

    Empezar la grabacin del diskette ycuando acabe se cerrar la ventanitanegra :)

    5.- Listo!!! Saca el diskette y djalo amano.

    4.- UTILIZANDO NUESTRAS

    ARMAS:

    PASO 1:

    Ahora mismo tenemos un Diskette dearranque que iniciar una mini-versin deLinux. Pues venga, reiniciamos el PC conel diskette dentro y veremos que se iniciael Mini-Linux :)

    E l

    equipo, al iniciarse leer el diskette. Como eldiskette es de inicio empezar a cargar sucontenido, saldrn un montn de letras en lapantalla (en perfecto ingles, por supuesto) yfinalmente nos encontraremos con un listadode nuestros discos duros as como susparticiones y una invitacin a que elijamosuno de ellos SELECT:

    En nuestro caso, podemos ver que solo haencontrado un disco duro de 1610 Megas:Disks:

    Disk /dev/ide/host0/bus0/target0/lun0/disc:

    1610MB 1610612736 bytes

    Hackear Windows en 40 segundos - Hackear Windows en 40 segundos

    no cambiar ABSOLUTAMENTE NADA de tu PC hastaque YO TE LO DIGA.

    Llegar un momento en que el Mini-Linux escribir en tudisco duro y modificar tu sistema, PERO YO TE LOADVERTIR ANTES. De esta forma podrs cancelar la

    operacin si as lo deseas.Te recomiendo hacer esta practica completa en un pc antiguoque tengas por ah perdido o en una mquina virtual (si teinteresa eso de las mquinas virtuales quizs escriba un

    artculo sobre ello para el prximo nmero, estate atentoa la revista :) Te digo esto porque, aunque no tiene por qupasar nada malo, en la vida no puedes estar seguro de nada.Yo no me hago responsable de los destrozos que puedas

    causar en tu equipo ;p

    Advertencia!

    No tengas miedo, no cambiar ningn archivo de tu PC,

  • 8/14/2019 Haxcra17

    9/68

    PC PASO A PASO N 17 Pgina 9

    Y una particin de arranque (boot)NT partitions found:

    1 - /dev/ide/host0/bus0/target0/lun0

    /part1 1533MB Boot

    Lo que haremos con esta practica es cambiar(o borrar) la clave del Sistema OperativoWindows, es decir, modificaremos un archivodel Sistema Operativo Windows. Nuestramisin, por lo tanto, es encontrar la particindonde se aloja el Sistema Operativo Windows.

    Deberemos encontrar una particin dearranque BOOT, puesto que tenemos un 98%de posibilidades de que el Sistema OperativoWindows est en esa particin. En este caso

    es muy fcil, solo tenemos una particin y esde tipo BOOT. Pues ya est. Seguro que elSistema Operativo est ah, en la particin 1;p

    PASO 2:

    Pues venga, pulsamos la tecla 1 en nuestroteclado y despus la tecla enter.

    En este momento veremos que salen unoscuantos mensajes ms. Simplemente se nos

    informa de que el Mini-Linux est montandola particin seleccionada (en este caso laparticin 1) y de propina dos dice el sistemade archivos que contiene (en este caso NTFSversin 3).

    PASO 3:

    Ahora, como podemos ver en la imagen

    Este artculo...!

    Hackear Windows en 40 segundos - Hackear Windows en 40 segundos

    Este artculo no trata sobre discos duros, pero debemosaclarar algunos conceptos para los novatos :)

    Como todo el mundo sabe, el disco duro es donde se aloja

    el Sistema Operativo y cualquier archivo con el quetrabajemos. Podramos tener unos cuantos, aunque lo msnormal es que te encuentres solo uno o dos.

    Antes de poder utilizar un disco duro, hay que darle formato.Si tenemos (por ejemplo) un disco duro de 200GB,podramos crear en l una sola particin de 200GB o dosparticiones de 100GB e incluso 4 particiones de 50GB cada

    una. En este ltimo caso, en el Windows veramos quetenemos 4 discos duros (unidades c: d: e: y f:) peroREALMENTE tenemos un solo disco duro con 4particiones.

    De las particiones que tenemos, debe existir una que sea"de arranque" (BOOT). No hace falta profundizar mas enel tema, siendo bastante bestias diremos que la particin

    BOOT es donde est instalado la vase del Sistema Operativo.

    En este caso nuestro preciado diskette nos dice que tenemosun solo Disco Duro de 1610 MB y una sola particin de

    1533 MB que adems es de arranque (BOOT). Puesperfecto, ya sabemos que el Sistema Operativo est en lanica particin de arranque existente (la 1).

    Posiblemente te preguntes por qu el disco duro es de1610MB y la particin de 1533MB. No te preocupes,

    cuando formateamos siempre perdemos "capacidad" dedisco (no es el momento ahora de explicar eso).

    Para el que...!

    Para el que est muy verde, simplemente puntualizar queLINUX, antes de poder leer y escribir sobre una particin

    de un disco duro, debe "montarla" (hacerse con ella).Windows tambin lo hace, pero "en plan automtico" (ninos avisa ni nada).

    Linux nos ha dicho que el sistema de archivos es NTFS.Si eres muy novato no tendrs ni idea de lo que es eso,pero bueno cuando formateamos una particin podemoselegir entre varios sistemas de archivos, en Windows NT

    y Windows 2000 normalmente se selecciona el SistemaNTFS. Dejmoslo aqu vale?, o podra empezar un cursosobre Sistemas de Archivo que acabara durmindote :)

  • 8/14/2019 Haxcra17

    10/68

    anterior, nos est pidiendo que introduzcamosla ruta para poder acceder al registro delSistema Operativo Windows. Podemos verque por defecto nos insina que podra estar

    en la ruta winnt/system32/conf ig

    Esa es la RUTA POR DEFECTO que eligeWindows cuando se instala y queprcticamente nadie modifica. Tenemos un99% de posibilidades de que sea correcta :)

    Pues venga, pulsamos enter y nos aparecerun listado de archivos.

    Paso 4:

    Ahora nuestro diskette nos ofrece tresposibilidades. Vamos a dedicarnos a lo nuestroque es cambiar la clave del sistema, por lotanto seleccionaremos la primera: PasswordReset

    Pues venga, pulsamos 1 y despus la teclaenter.

    Paso 5:

    Ahora nos encontramos con unas cuantasopciones ms. Que diskette ms interesante

    no? Je, je bueno, vamos a lo nuestro, lasclaves. Como podemos ver debemosseleccionar la opcin 1: Edit user data andpassword.Pues venga, pulsamos 1 y despus enter

    Paso 6:

    Ahora tenemos ante nosotros el listadode usuarios del Sistema OperativoWindows. Podemos ver que esteS i s t ema t i ene 5 Usuar i o s :

    Administrador, Invitado, IUSR-EQUIPO1, IWAM-EQUIPO1 y TsInternetUser..

    Como nosotros somos muy ambiciosos, nosinteresa cambiar (o eliminar) la clave delusuario ms poderoso si, si como ya debessuponer, nos interesa el Administrador :)

    Nuestro diskette mgico yapresupone que queremos seradministradores, je, je as quetan solo deberemos pulsar enter(si quisisemos cambiar oeliminar- la clave de otro usuariodeberamos escribir el nombre deese usuario y pulsar enter)

    Pues venga, pulsamos enter ;p

    Paso 7:

    Ahora tenemos ante nosotros unos cuantos

    Pgina 10 PC PASO A PASO N 17

    Hackear Windows en 40 segundos - Hackear Windows en 40 segundos

  • 8/14/2019 Haxcra17

    11/68

    PC PASO A PASO N 17 Pgina 11

    datos respecto al usuario seleccionado, nohace falta explicarlo, no nos perdamos en elbosque (al menos no en este artculo), vamosa lo que nos interesa.

    Abajo del todo se nos pide que introduzcamosun nuevo password. Podemos poner un nuevopassword o simplemente poner un asterisco(*). Para asegurarnos pondremos un asteriscoy de esta forma lo que hacemos esBORRAR el password del Administrador,es decir, cuando reiniciemos el Windowsno necesitaremos introducir ningunaclave ;)

    Pues venga, ponemos un asteriscoy pulsamos enter

    Paso 8:

    Ahora nos pregunta si realmente queremoscambiar el password, le diremos que si. Puesvenga, pulsamos la tecla y y despusenter.

    - PERO no me dijiste que me avisarasantes de cambiar nada en mi ordenador?ERES UN CAP*U*LL*!!!

    Tranquilo que poco confas en m hay quever Todo lo que hemos hecho hasta ahoraha sido, por decirlo de alguna manera, enmodo simulacro.

    Ahora tenemos delante las ltimas opcines

    Paso 10:

    CUIDADO!!! LO QUE HAREMOS AHORA SI VAA MODIFICAR LOS ARCHIVOS DELORDENADOR DONDE ESTAS HACIENDO ESTAPRACTICA!!! TE DIJE QUE AVISARA ANTESVERDAD? PUES YA ESTAS AVISADO!!!

    Fjate en la imagen anterior, parece que ya has

    cambiado el password PERO NO ES VERDAD.Esahora cuando tienes la opcin para hacerlo.

    Ahora tenemos varias opciones, pero la que

    nos interesa es volver al men principal. Puesvenga, pulsamos la tecla de exclamacin! (SHIFT + 1) y despus enter.

    Nos aparecer el men principal de nuestrodiskette, fjate en la imagen siguiente:

    La opcin que EJECUTAR LOS CAMBIOS ENNUESTRO ORDENADOR es la ltima, la opcin

    q (quit). Pues venga, pulsamos latecla q y despus enter

    Nos encontraremos ante la ltima pantallita:

    Paso 11:

    Fjate en la pantalla anterior, nos estpidiendo que confirmemos que

    realmente queremos hacer los cambios.Estamos seguros? Pues claro que si.

    Pues venga, pulsamos la tecla y ydespus enter. En este instante semodificarn los archivos de tu PC y veremosel proceso en la pantalla.

    Por muy poco ingles que sepas, puedes verque todo ha funcionado por los OK que salen:)

    Hackear Windows en 40 segundos - Hackear Windows en 40 segundos

  • 8/14/2019 Haxcra17

    12/68

    Ya solo nos queda sacar el diskette del PCy reiniciar el equipo.

    5.- MISION CUMPLIDA!!!

    Nuestro equipo se iniciar normalmente y denuevo aparecer la ventanita para queintroduzcamos nuestra clave. PERO en estecaso no introduciremos ninguna contrasea,simplemente pulsaremos el botn ACEPTAR

    Si todo ha ido bien, y estoy un 98% segurode que si, Windows se iniciar sin quejarse;P

    6.- 40 segundos?... mentira si

    eres rpido puedes hacerlo en 10

    segundos!!!

    Como puedes ver, a lo largo del artculo tehemos resaltado en negrita los pasos a seguir,vamos a hacer una carrera de 10 segundos.Una vez introducido el diskette y reiniciadoel equipo:

    (segundo 1) pulsamos la tecla 1 ennuestro teclado y despus la tecla enter

    (segundo 2) pulsamos enter(segundo 3) pulsamos 1 y despus

    la tecla enter

    (segundo 4) pulsamos 1 y despusla tecla enter

    (segundo 5) pulsamos enter ;p

    (segundo 6) ponemos un asterisco ypulsamos enter

    (segundo 7) pulsamos la tecla y ydespus enter

    (segundo 8) pulsamos la tecla de

    exclamacin ! (SHIFT + 1) y pulsaremosenter

    (segundo 9) pulsamos la tecla q ydespus enter

    (segundo 10) pulsamos la tecla y ydespus enter

    7.- Mas cosas

    Y si el PC que quiero hackear no tiene

    diskettera? Y si solo tiene CD-ROM?

    Pues nada hombre, que tenemos solucionespara todo. Entonces te descargas el archivocd040116.zip desde www.hackxcrack.com.Al descomprimirlo te saldr una imagen ISOque podrs grabar con el NERO y ya tienes lomismo pero en CD. Adems, en este casotendrs tambin los drivers SCSI.

    Emmmm drivers SCSI?

    En este ejemplo, el PC vctima tena el disco

    duro conectado mediante IDE, pero puedesencontrarte sistemas que tienen los DiscosDuros conectados por SCSI. En ese caso elMini-Linux no podr ver esos discos durosporque necesitamos cargar el drivercorrespondiente. Si tienes la versin en CDtodo est incluido :)

    Hackear Windows en 40 segundos - Hackear Windows en 40 segundos

    IDE...!

    IDE (el que te encontrars en el 90% de los casos) y SCSI

    (muy caro y utilizado especialmente en servidores) son losdos sistemas de conexin de Disco Duro ms extendidos,y hace poco ha salido un nuevo sistema llamado SATA (laevolucin del IDE).

    Ya se que explicar esto as es como mnimo inexacto, perosi quieres mas informacin busca en GOOGLE(www.google.com).

    Pgina 12 PC PASO A PASO N 17

  • 8/14/2019 Haxcra17

    13/68

    PC PASO A PASO N 17 Pgina 13

    Y si el PC que quiero hackear solo tienediskettera pero los discos duros estnconectados por SCSI? ENTONCES QU!

    Nada hombre, no te sulfures je, je entonceste descargas el archivo sc040116.zip dewww.hackxcrack.com, lo descomprimes ymetes su contenido en otro diskette. Podrsutilizas ese diskette para cargar los driversSCSI.

    8.- Zona de Descarga y ampliacin

    de la informacin:Si, por el motivo que sea, los archivos aqumencionados no pudieses descargarlos dewww.hackxcrack .com, psate porhttp://home.eunet.no/~pnordahl/ntpasswd/

    Adems, encontrars bastante msinformacin (por si quieres ampliarconocimientos). Por supuesto en perfectoingles ;p Un saludo a todos y hasta laprxima y gracias por leerme ;)

    EL GANADOR DELSORTEO DE UNSUSE

    LINUX 9 DEL MES DE

    EneroES:

    Milagros Mateo

    Hackear Windows en 40 segundos - Hackear Windows en 40 segundos

  • 8/14/2019 Haxcra17

    14/68

    Pgina 14 PC PASO A PASO N 17

    1. Presentacin

    Una vez visto qu son los procesos y cmopodemos crearlos desde nuestros programas,el paso lgico que debemos dar es el estudiode como podemos hacer que los procesos secomuniquen entre s. Para poder tratar estetema de comunicacin entre procesostendremos que hacer hincapi en los siguientestemas:

    Seales

    El mecanismo de seales entre procesoses uno de los sistemas de comunicacinentre procesos ms elementales y bsicosdisponibles en los sistemas UNiX.

    Semforos

    Aunque los semforos no seanestr ictamente un mecanismo decomunicacin entre procesos, es muyimportante que los veamos, dado que nospermitirn manejar procesos concurrentesen recursos en los que la concurrencia noes manejada directamente por el S.O. Paraquien no sepa qu es la concurrencia, sirvapor ahora mostrarla como el problema quesurge en un entorno multiproceso cuando

    varios procesos desean accedersimultneamente a un mismo recurso(disco, memoria,etc...)

    Memoria Compartida

    Ser un mecanismo de comunicacin entreprocesos que permitir que estoscompartan una zona de memoria virtualde manera que puedan comunicarse entres mediante esta memoria comn. El acceso

    a esta memoria comn deber de sergestionado por el propio programador, porejemplo mediante semforos.

    Colas de Mensajes

    Las colas de mensajes sern unasestructuras de datos gestionadas por elncleo en la que podrn leer y escribirvarios procesos. A diferencia del mecanismoanterior donde el programador ser elresponsable de gestionar el acceso a lamemoria compartida, en las colas demensajes es el propio ncleo el encargadode resolver la concurrencia, por lo que sumanejo ser ms sencillo, aunque exigenusar mensajes previamente formateados.

    Tuberas

    Uno de los primeros sistemas decomunicacin disponible entre procesosUNiX y en otros sistemas operativos. Veroslas tuberas con nombre (named pipes) ylas tuberas sin nombre (unamed pipes).

    Comunicaciones en red

    Una vez que hayamos visto los mecanismosde comunicacin entre procesos locales,comenzaremos a estudiar cmo podremos

    comunicar procesos que estn situados enmquinas distintas.

    2. Seales

    2.1. Qu son las seales?

    Las seales son mecanismos de comunicaciny de manipulacin de procesos en UNiX, sibien el manejo de las mismas puede variar

    Programacion en GNU/LiNUXProgramacion del Sistema

    El Sistema I.P.C. (II)el_chaman. Luis U. Rodriguez Paniagua

    - Vamos a entrar de lleno en la esencia de Linux.

    - Estudiaremos las Seanes, Semforos, Tuberas, etc.

    - Cmo se comunican los precesos entre ellos? AVERIGUALO !!!

  • 8/14/2019 Haxcra17

    15/68

    ligeramente entre los distintos sabores UNiX( 4.3BSD, System V, POSIX, ...). Para efectosprcticos nos centraremos aqu en las sealesSystem V, que estn disponibles en todos los

    UNIX. Si alguien quiere profundizar en losdistintos tipos de seales, puede acudir a labibliografa suministrada en espaol al finaldel artculo [MRQUEZ].

    A pesar de que cualquier proceso puedemandar seales a cualquier otro proceso, lonormal es que sea el ncleo el queconstantemente est mandando determinadasseales a los distintos procesos indicando elestado del sistema y de la ejecucin delproceso (eventos).

    Este mecanismo de comunicacin consistiren el envo de un mensaje (llamado seal )a un determinado proceso con el fin deinformarle de alguna situacin especial.

    Las seales son asncronas. Esto quiere decirque cuando un proceso recibe una seal, elproceso la atiende inmediatamente dejandoaparte cualquier otra tarea que estuvieserealizando. La forma de atender esta sealser de tres maneras posibles:

    Ignorndola, as, con dos bemoles.

    Esto no ser siempre posible. Yaveremos que hay determinadasseales que no se pueden ignorarpor las buenas.

    Invocar a una rutina de tratamientode seal por defecto. Esta rutinaperteneciende al ncleo del S.O.realizar una determinada tarea enfuncin del tipo de seal queusualmente suele ser la terminacindel proceso de una manera ms o

    menos barroca.

    Invocar a una rutina de tratamientode seal hecha por el programador.

    2.2. Tipos de seal

    Para tener una lista completa de las sealesdisponibles en nuestro sistema, y al eventoque corresponde cada una de estas seales,

    podemos invocar a la pgina del manual correspondiente:man 7 signal ( ojo, el 7 indica que es la seccin 7 la quedebemos mirar, no la que se muestra por defecto que esla correspondiente a la funcin signaldel lenguaje C )

    obteniendo:SIGNAL(7) Manual del Programador de Linux SIGNAL(7)

    NOMBRE

    signal - lista de las seales disponibles

    DESCRIPCIN

    Linux permite el uso de las seales dadas a continuacin. Los nmeros

    de varias de las seales dependen de la arquitectura del sistema.

    Primero, las seales descritas en POSIX.1.

    Seal Valor Accin Comentario

    ----------------------------------------------------------------------

    SIGHUP 1 A Cuelgue detectado en la terminal de

    control o muerte del proceso de control

    SIGINT 2 A Interrupcin procedente del teclado

    SIGQUIT 3 C Terminacin procedente del teclado

    SIGILL 4 C Instruccin ilegal

    SIGABRT 6 C Seal de aborto procedente de abort(3)

    SIGFPE 8 C Excepcin de coma flotante

    SIGKILL 9 AEF Seal de matar

    SIGSEGV 11 C Referencia invlida a memoria

    SIGPIPE 13 A Tubera rota: escritura sin lectoresSIGALRM 14 A Seal de alarma de alarm(2)

    SIGTERM 15 A Seal de terminacin

    SIGUSR1 30,10,16 A Seal definida por usuario 1

    SIGUSR2 31,12,17 A Seal definida por usuario 2

    SIGCHLD 20,17,18 B Proceso hijo terminado o parado

    SIGCONT 19,18,25 Continuar si estaba parado

    SIGSTOP 17,19,23 DEF Parar proceso

    SIGTSTP 18,20,24 D Parada escrita en la tty

    SIGTTIN 21,21,26 D E. de la tty para un proc. de fondo

    SIGTTOU 22,22,27 D S. a la tty para un proc. de fondo

    A continuacin las seales que no estn en POSIX.1 pero descritas en

    SUSv2.

    Seal Valor Accin Comentario

    -------------------------------------------------------------------------

    SIGBUS 10,7,10 C Error de bus (acceso a memoria invlido)

    SIGPOLL A Evento que se puede consultar (Sys V).

    Sinnimo de SIGIO

    PC PASO A PASO N 17 Pgina 15

    Curso de Linux: El sistema IPC(II) - Curso de Linux: El sistema IPC(II) - Curso de Linux

  • 8/14/2019 Haxcra17

    16/68

    Pgina 16 PC PASO A PASO N 17

    SIGPROF 27,27,29 A Ha expirado el reloj de perfilado

    (profiling)

    SIGSYS 12,-,12 C Argumento de rutina invlido (SVID)

    SIGTRAP 5 C Trampa de traza/punto de ruptura

    SIGURG 16,23,21 B Condicin urgente en conector (4.2 BSD)

    SIGVTALRM 26,26,28 A Alarma virtual (4.2 BSD)

    SIGXCPU 24,24,30 C Lmite de tiempo de CPU excedido

    (4.2 BSD)

    SIGXFSZ 25,25,31 C Lmite de tamao de fichero excedido

    (4.2 BSD)

    ** Para los casos SIGSYS, SIGXCPU, SIGXFSZ y, en algunas arquitecturas,

    tambin SIGBUS, la accin por omisin en Linux hasta ahora (2.3.27) es

    A (terminar), mientras que SUSv2 prescribe C (terminar y volcado de

    memoria).

    A continuacin otras seales.

    Seal Valor Accin Comentario

    ------------------------------------------------------------------------

    SIGIOT 6 C Trampa IOT. Un sinnimo de SIGABRT

    SIGEMT 7,-,7

    SIGSTKFLT -,16,- A Fallo de la pila en el coprocesador

    SIGIO 23,29,22 A E/S permitida ya (4.2 BSD)

    SIGCLD -,-,18 Un sinnimo de SIGCHLD

    SIGPWR 29,30,19 A Fallo de corriente elctrica (System V)

    SIGINFO 29,-,- Un sinnimo para SIGPWRSIGLOST -,-,- A Bloqueo de fichero perdido.

    SIGWINCH 28,28,20 B Seal de reescalado de la ventana

    (4.3 BSD, Sun)

    SIGUNUSED -,31,- A Seal no usada.

    ** Aqu, - denota que una seal est ausente. All donde se indican tres

    valores, el primero es comnmente vlido para alpha y sparc, el segundo

    para i386, ppc y sh, y el ltimo para mips. La seal 29 es SIGINFO

    /SIGPWR en un alpha pero SIGLOST en una sparc.

    Las letras en la columna "Accin" tienen los siguientes significados:

    A La accin por omisin es terminar el proceso.

    B La accin por omisin es no hacer caso de la seal.

    C La accin por omisin es terminar el proceso y hacer un volcado

    de memoria.

    D La accin por omisin es parar el proceso.

    E La seal no puede ser capturada.

    F La seal no puede ser pasada por alto.

    CONFORME A

    POSIX.1

    ERRORES

    SIGIO y SIGLOST tienen el mismo valor. Este ltimo est comentado en

    las fuentes del ncleo, pero el proceso de construccin de algunos pro-

    gramas an piensa que la seal 29 es SIGLOST.

    VASE TAMBIN

    kill(1), kill(2), setitimer(2)

    Linux 1.3.88 13 junio 1996 SIGNAL(7)

    Como podemos ver, cada seal tiene asociado un valordeterminado. Ese ser el valor que manejen los procesos.En la siguiente tabla, sacada de [MRQUEZ]

    2.3. Manejo de seales

    Visto lo que son las seales y lo que podemos hacer conellas, vamos a ver como utilizarlas. Nos ceiremos en losejemplos a la interfaz UNiX System V, prescindiendo de la

    Curso de Linux: El sistema IPC(II) - Curso de Linux: El sistema IPC(II) - Curso de Linux

  • 8/14/2019 Haxcra17

    17/68

    PC PASO A PASO N 17 Pgina 17

    interfaz 4.3BSD dado que sta es compatiblecon la anterior y adems la mejoraconsiderablemente. Para quien quieraprofundizar en las llamadas 4.3BSD, puede

    obtener un listado de las pginas de manualreferentes a las llamadas necesarias enhttp://www.ptf.com/dossier/TC/Proc_FrB_1.0.1.shtml.Estas pginas de manual estn disponiblesen cualquier *BSD

    2.3.1. Envo de seales

    Para enviar una seal de un proceso a otrose emplea la funcin kill disponible en elarchivo de cabecera signal.h. El prototipo deesta funcin es el siguiente:

    ///////////////////////////////////////////////

    // Pgina del manual: man 2 kill

    ///////////////////////////////////////////////

    #include

    #include

    int kill(pid_t pid, int sig);

    Donde pid identificar al proceso o conjuntode procesos al que queremos enviar la seal.Grupo de procesos? Hemos visto que el PID

    corresponde al nmero identificador de unproceso, cmo es posible entonces queenviemos a un grupo de procesos una sealmediante el PID?

    En nuestro caso el parmetro pidser unnmero entero que dependiendo del valorque reciba tendr los siguientes significados:

    En el caso de que enviemos una seal a un proceso sobreel que nuestro proceso no tiene privilegios, la llamada killfalla.

    El siguiente parmetro, sig, representa la seal quequeremos enviar segn la tabla y los valores arriba vistos.Si vale 0, se verifica que la funcin kill funciona sin enviarninguna seal. Se suele utilizar para verificar la validezdel valor de pid.

    En caso de que la llamada a kill se realice correctamente,sta retornar un 0; en caso de error, devolver -1.

    El siguiente ejemplo se muestra cmo utilizar la funcinkill

    ///////////////////////////////////////////////////////////////////////////////////////////////////////

    // ARCHIVO: kill.c//

    // DESCRIPCIN:

    // Este programa representa el funcionamiento del manejo

    // de seales mediante el uso de la funcin kill

    //

    // Se compila como: gcc kill.c -o mi_kill

    ///////////////////////////////////////////////////////////////////////////////////////////////////////

    #include

    #include #include

    int main()

    {

    int pid;

    // Creamos un nuevo proceso

    pid = fork();

    // Si somos el hijo...

    if (pid == 0)

    {

    // El proceso hijo imprime cada segundo un mensaje

    // hasta que le dejen...while(1)

    {

    printf("\n Me llamo %d y ", getpid());

    printf("tengo un yuyu que no veas.");

    sleep(1);

    }

    }

    else

    Curso de Linux: El sistema IPC(II) - Curso de Linux: El sistema IPC(II) - Curso de Linux

  • 8/14/2019 Haxcra17

    18/68

    Pgina 18 PC PASO A PASO N 17

    {

    // Somos el desalmado padre

    // Matamos a nuestro hijo envindole la seal

    // SIGTERMsleep(5);

    printf("\n Yo soy %dy tengo un mal da.", getpid());

    printf("\nAsesinando un poco a %d.\n", pid);

    kill(pid, SIGTERM);

    }

    return 0;

    }

    Tras compilar y ejecutar este programa obtenemos unasalida tal que:

    luis@leonov:~/hxc/articulo10_el_chaman/codigo$ gcc kill.c -o mi_kill

    luis@leonov:~/hxc/articulo10_el_chaman/codigo$ ./mi_kill

    Me llamo 12358 y tengo un yuyu que no veas.

    Me llamo 12358 y tengo un yuyu que no veas.

    Me llamo 12358 y tengo un yuyu que no veas.

    Me llamo 12358 y tengo un yuyu que no veas.

    Yo soy 12357 y tengo un mal da.

    luis@leonov:~/hxc/articulo10_el_chaman/codigo$

    Lo que hemos hecho es sencillo pero ilustrativo: Creamosun proceso hijo que si le dejamos estar indefinidamenteimprimiendo el mensaje Me llamo 12358 y tengo unyuyu que no veas cada segundo. La misin del padreser esperar cinco segundos (poca paciencia para ser unbuen padre, verdad?) y matar al proceso hijo mandndolela seal SIGTERM (Seal de Terminacin).

    Podemos observar que cuando enviamos una seal alproceso hijo este termina su ejecucin. Pero tambinpodemos hacer que ocurra otra cosa.

    2.3.2. Tratamiento de seales

    Imaginemos que en la situacin anterior, al ser asesinadoel hijo, ste quiera realizar alguna tarea previa, comoinformar al usuario, guardar datos de manera segura,escribir un testamento repudiando a su padre, etc.

    El mecanismo del que vamos a disponer para realizar estatarea es la funcin signal. Antes de meternos a explicardicha funcin que es un poco enrevesada por su sintaxis,vamos a explicar la idea de su funcionamiento.

    Esta funcin lo que har es decirle a una seal que en vezde realizar el tratamiento que realiza por defecto cuandose le llama (el sistema es el encargado de ello), lo quehar es ejecutar una funcin que nosotros hayamos escrito

    previamente y en la que realizaremos las tareas queconsideremos apropiadas.

    Precisamente la tarea de signal ser la de "enlazar" unadeterminada seal con una determinada funcin detratamiento.

    La sintaxis de signal segn la pgina del manual es:

    #include

    void (*signal(int signum, void (*manejador)(int)))(int);

    Tan espeluznante como aparenta. Esta sintaxis heredada

    de la familia BSD, puede ser escrita, segn la pgina delmanual como:

    typedef void (*sighandler_t)(int);

    sighandler_t signal(int signum, sighandler_t manejador);

    Claaaarooo. Ahor est clarsimo. Un cristal, vamos...

    Mantengamos la calma y utilicemos el sentido comn.Sabemos como funciona typedef, por lo que podemosl legar a la conclusin de que typedef void(*sighandler_t)(int); nos est definiendo un tipo.

    Puede parecer que como lo que va antes de sighandler_t

    es un void, representa al void.

    Pero es que adems va un * por lo que realmente representaa void *.

    Ya hablamos de que void normalmente significa "nada"excepto cuando es un puntero, que se interpreta como"un puntero que puede apuntarlo todo".

    Luego podramos pensar que *sighandler_t es un tipo quecreamos nosotros y que representa a "un puntero capazde apuntar a cualquier zona de memoria "...

    Pero an nos quedara dar la ltima vuelta de tuerca: No

    hemos llamado a nuestro tipo *sighandler_t sino*sighandler_t(int). Y qu representa eso? Una funcin!Luego lo que estamos declarando en este tipo es un punterocapaz de apuntar a cualquier funcin void y con un

    parmetro entero como primer parmetro.

    Visto esto ahora es relativamente sencillo entender elprototipo de sighandler_t signal(int signum, sighandler_tmanejador); tenemos pues que signal es una funcin querecibe como parmetros signum que representa a la seal

    Curso de Linux: El sistema IPC(II) - Curso de Linux: El sistema IPC(II) - Curso de Linux

  • 8/14/2019 Haxcra17

    19/68

    PC PASO A PASO N 17 Pgina 19

    a asociar, manejador que ser un puntero a una funcinvoid (el nombre de la funcin es un puntero a dicha funcin)y nos devuelve otro puntero a otra funcin (la funcin pordefecto encargada de realizar la accin para esa seal) o

    SIG_ERR en caso de error.

    Para que nos termine de desaparecer el pnico antes devolver a las interioridades de esta funcin, vamos a ver unejemplo de uso y terminar de convencernos de esta manerade que es algo sencillo.

    Vamos a modificar el anterior programa de manera quecuando el padre mate al hijo, ste al menos proteste unpoco. El cdigo resultante es:

    ////////////////////////////////////////////////////////////////////////////////////////////////////////

    // ARCHIVO: kill.c

    //// DESCRIPCIN:

    // Este programa representa el funcionamiento del manejo

    // de seales mediante el uso de la funcin kill y el uso

    // de funciones de tratamiento de seales

    //

    // Se compila como: gcc kill2.c -o mi_kill2

    #include

    #include

    #include

    // Esta es la funcin que sustituye// al tratamiento por defecto de la seal

    void tratamiento(int sennal)

    {

    // Tratamos la seal a nuestro modo

    printf("\n Soy el proceso %d", getpid());

    printf("\n Se recibi la seal%d", sennal);

    printf("\nAhora yo soy mi propio ngel exterminador\n");

    // DEBEMOS terminar el proceso hijo

    exit (0);

    }

    int main()

    {

    int pid;

    // Asociamos la seal que emplebamos con el nuevo tratamiento

    if(signal (SIGTERM, tratamiento)==SIG_ERR)

    {

    printf("\nError al asignar funcin de tratamiento\n");

    }

    // Creamos un nuevo proceso

    pid = fork();

    // Si somos el hijo...

    if (pid == 0){

    // El proceso hijo imprime cada segundo un mensaje

    // hasta que le dejen...

    while(1)

    {

    printf("\n Me llamo %dy ", getpid());

    printf("tengo un yuyu que no veas.");

    sleep(1);

    }

    }else{

    // Somos el desalmado padre// Matamos a nuestro hijo envindole la seal// SIGTERMsleep(5);printf("\n Yo soy %dy tengo un mal da.", getpid());printf("\nAsesinando un poco a %d.\n\n", pid);kill(pid, SIGTERM);

    }return 0;

    }

    Como vemos en la llamada a la funcin, signal (SIGTERM,tratamiento), el primer parmetro corresponde a la sealque va a recibir el proceso hijo y el segundo tan solo alnombre de la funcin que realiza la nueva tarea detratamiento de la seal.

    La salida ser:

    luis@leonov:~/hxc/articulo10_el_chaman/codigo$ gcc kill2.c -o mi_kill2

    luis@leonov:~/hxc/articulo10_el_chaman/codigo$ ./mi_kill2

    Me llamo 19208 y tengo un yuyu que no veas.

    Me llamo 19208 y tengo un yuyu que no veas.

    Me llamo 19208 y tengo un yuyu que no veas.Me llamo 19208 y tengo un yuyu que no veas.

    Yo soy 19207 y tengo un mal da.

    Asesinando un poco a 19208.

    Me llamo 19208 y tengo un yuyu que no veas.

    Soy el proceso 19208

    Se recibi la seal 15

    Ahora yo soy mi propio ngel exterminador

    Curso de Linux: El sistema IPC(II) - Curso de Linux: El sistema IPC(II) - Curso de Linux

  • 8/14/2019 Haxcra17

    20/68

    Pgina 20 PC PASO A PASO N 17

    Llamo la atencin sobre un punto: Ahora el proceso hijose mata porque as lo hemos requerido en la rutina detratamiento de la seal ( exit (0); ). Pero, qu ocurre si"olvidamos" escribir esa lnea? por qu? Se podra crearde esta manera procesos "inmunes" a que los matasen?Para qu? Realmente seran "inmortales"?.

    Tambin es obligatorio citar que en ocasiones podremoshacer que la rutina de tratamiento de seales puede hacerque volvamos a estados por los que el proceso ya hapasado.

    2.3.3. Esperando una seal

    En algunas situaciones nos interesar que un proceso sequede a la espera de recibir una seal. Esto puede sucedersi, por ejemplo, el proceso necesita que algn trabajo sea

    hecho antes de proseguir.Para ellos est la funcin pause() que detiene la ejecucinde un determinado proceso hasta que este recibe unadeterminada seal.

    A diferencia de otras funciones, pause() devuelve -1 sitodo ha ido correctamente.

    Como ejemplo vamos a ver el siguiente cdigo en el queel, proceso hijo, espera a que el proceso padre le de permisopara hablar. Se observar que se han sustituido las llamadasa printf(... por llamadas a fprintf(stderr,.... La razn deellos es que la salida de error es una salida non buffered;

    es decir, no es necesario que el buffer de salida de stderrest lleno para imprimir su contenido. No as ocurre constdout que es lo que usa printfhaciendo que las lneas desalida se superpongan unas a otras.////////////////////////////////////////////////////////////////////////////////////////////////////////

    // ARCHIVO: pause.c

    //

    // DESCRIPCIN:

    // Este programa representa el funcionamiento del manejo

    // de seales mediante el uso de las funciones kill y pause

    // as como el uso de funciones de tratamiento de seales

    //

    // Se compila como: gcc pause.c -o mi_pause

    //

    // AUTOR:

    // Luis U. Rodrguez Paniagua

    // Este cdigo se distribuye bajo los trminos de la

    // Licencia Pblica General (GPL) de GNU. Puede usted

    // consultarla en www.gnu.org

    ////////////////////////////////////////////////////////////////////////////////////////////////////////

    #include

    #include

    #include

    // Esta es la funcin que sustituye

    // al tratamiento por defecto de la seal SIGTERM

    void tratamiento_1(int sennal)

    {

    // Tratamos la seal a nuestro modo

    fprintf(stderr,"\n [%7d] Termina el proceso \n", getpid());

    // DEBEMOS terminar el proceso hijo

    exit (0);

    }

    // Esta es la funcin que sustituye

    // al tratamiento por defecto de la seal SIGUSR1// Presentar una frase

    void tratamiento_2(int sennal)

    {

    signal(sennal, SIG_IGN);

    fprintf(stderr,"\n\t [%7d] Me han dejado hablar! ", getpid());

    signal(sennal, tratamiento_2);

    }

    int main()

    {

    int pid, i;

    // Asociamos las seales que emplebamos con sus respectivos

    // tratamientos

    if ((signal (SIGTERM, tratamiento_1)==SIG_ERR) ||

    (signal (SIGUSR1, tratamiento_2)==SIG_ERR))

    {

    printf("\nError en signal\n");

    }

    // Creamos un nuevo proceso

    pid = fork();

    // Si somos el hijo...

    if (pid == 0)

    {

    // El proceso hijo imprime cada segundo un mensaje// hasta que le dejen...

    while(1)

    {

    fprintf(stderr,"\n [%7d] Yo calladito.", getpid());

    pause();

    }

    }

    else

    Curso de Linux: El sistema IPC(II) - Curso de Linux: El sistema IPC(II) - Curso de Linux

  • 8/14/2019 Haxcra17

    21/68

    PC PASO A PASO N 17 Pgina 21

    {

    // Esperamos 4 segs a que los hijos se creen

    sleep(4);

    // Damos cinco rdenes de hablarfor(i=0;i

  • 8/14/2019 Haxcra17

    22/68

    Pgina 22 PC PASO A PASO N 17

    // para garantizar el correcto funcionamiento.

    #ifdef LINUX

    if(sysv_signal(sennal, tratamiento_2)==SIG_ERR)

    #elseif(signal(sennal, tratamiento_2)==SIG_ERR)

    #endif

    {

    printf("error al asignar seel en tratamiento 2");

    exit(-1);

    }

    else

    {

    longjmp(env, 10);

    }

    }

    int main()

    {

    int pid, i,k=0,j;

    // Asociamos las seales que emplebamos con sus respectivos

    // tratamientos

    #ifdef LINUX

    if ((sysv_signal (SIGTERM, tratamiento_1)==SIG_ERR) ||

    (sysv_signal (SIGUSR1, tratamiento_2)==SIG_ERR))

    #elseif ((signal (SIGTERM, tratamiento_1)==SIG_ERR) ||

    (signal (SIGUSR1, tratamiento_2)==SIG_ERR))

    #endif

    {

    printf("\nError en signal\n");

    }

    // Creamos un nuevo proceso

    pid = fork();

    // Si somos el hijo...

    if (pid == 0){

    // El proceso hijo comienza a contar desde 0; establecemos un punto// de retorno de estado cuando k=0; as nos aseguramos que cada vez// que llamemos a SIGUSR1, el proceso hijo reiniciar la cuenta.// Intentamos imprimir 100 nmeros

    if (setjmp(env)==0)

    {

    fprintf(stderr,"\n[%5d]Estableciendo punto de retorno",getpid() );

    }

    else

    {

    fprintf(stderr,"\n[%5d] Volviendo al punto de retorno",getpid());

    k=0;}

    // Este bucle, EN TEORA, debe de contar hasta 100, pero no lo har debido// a que recibir del proceso padre distintas seales.

    for (j=0;j

  • 8/14/2019 Haxcra17

    23/68

    PC PASO A PASO N 17 Pgina 23

    [24635] Contando: 2

    [24635] Contando: 3

    [24634] Mandando seal SIGUSR1 a [24635]....

    Se produjo excepcin; retornamos a estado

    [24635] Volviendo al punto de retorno

    [24635] Contando: 0

    [24635] Contando: 1

    [24635] Contando: 2

    [24635] Contando: 3

    [24635] Contando: 4

    [24634] Mandando seal SIGUSR1 a [24635]....

    .................

    [24635] Volviendo al punto de retorno

    [24635] Contando: 0

    [24635] Contando: 1

    [24635] Contando: 2

    [24635] Contando: 3

    [24635] Contando: 4

    [24635] Termina el proceso

    Como vemos tras la compilacin se obtienen unos mensajesde warning (advertencia) que podremos ignorar. Elfuncionamiento es el esperado. Sin embargo si enGNU/LiNUX tecleamos:

    luis@leonov:~/hxc/articulo10_el_chaman/codigo$ gcc salto.c -o mi_salto

    luis@leonov:~/hxc/articulo10_el_chaman/codigo$ ./mi_salto

    [24682] Estableciendo punto de retorno

    [24682] Contando: 0

    [24682] Contando: 1

    [24682] Contando: 2

    [24682] Contando: 3

    [24681] Mandando seal SIGUSR1 a [24682]....

    Se produjo excepcin; retornamos a estado

    [24682] Volviendo al punto de retorno

    [24682] Contando: 0

    [24682] Contando: 1

    [24682] Contando: 2

    [24682] Contando: 3

    [24682] Contando: 4

    [24681] Mandando seal SIGUSR1 a [24682]....

    [24682] Contando: 5

    [24682] Contando: 6

    [24682] Contando: 7

    [24682] Contando: 8

    [24682] Contando: 9

    [24681] Mandando seal SIGUSR1 a [24682]....

    ................

    [24682] Contando: 40

    [24682] Contando: 41

    [24682] Contando: 42

    [24682] Contando: 43

    [24682] Contando: 44

    [24681] Mandando seal SIGUSR1 a [24682]....

    [24682] Contando: 45

    [24682] Contando: 46

    [24682] Contando: 47

    [24682] Contando: 48

    [24682] Contando: 49

    [ 24682] Termina el proceso

    Que no es ni mucho menos el resultado esperado. Podemosde esta experiencia deducir que cuando sospechemos quenuestro programa no enva adecuadamente las sealesmediante signal, tendremos que emplear sysv_signal.

    Y con esto quedan vistas las seales. Como vemos losprocesos no van a ser islas independientes, sino que sepueden comunicar entre ellos y realizar conjuntamentetareas ms complejas. Si bien el empleo de seales esrelativamente sencillo y muy til, realizar determinadastareas con ellas ser a veces muy difcil o imposible. Porello, ms adelante veremos mecanismos ms sofisticadosque nos permitirn comunicar procesos de una forma

    mucho ms potente.

    3. Semforos

    3.1. Introduccin

    Si bien los semforos no son estrictamente hablandomecanismos de comunicacin, si entendemos sta comoel intercambio de datos entre procesos, su mayor utilidadsale a relucir precisamente en situaciones en las que varios

    Curso de Linux: El sistema IPC(II) - Curso de Linux: El sistema IPC(II) - Curso de Linux

  • 8/14/2019 Haxcra17

    24/68

    Pgina 24 PC PASO A PASO N 17

    procesos intercambian informacin utilizando recursoscomunes. Ms adelante veremos como una situacin clsicaes la utilizacin de Memoria Compartida para intercambiardatos entre procesos. Entonces necesitaremos un mecanismo

    que permita o condone a cada proceso en un determinadomomento el acceso a dicha memoria compartida para evitarserios problemas.

    Fcil es deducir entonces, que los semforos son mecanismosde sincronizacin de procesos en vez de mecanismos decomunicacin (tal y como lo hemos visto). Pero tampocopodemos ignorar la visin del sistema de semforos comouna manera de pasarse seales entre procesos, como sifueran caballeros muy educados, que solicitan y cedenpermiso al acceso a determinados recursos.

    3.2. Funcionamiento de los semforos

    Ya por el nombre nos podemos hacer una idea de cmo

    funcionar un semforo: En determinado momento, cuandoqueramos acceder a un recurso compartido (cruce de unacalle), deberemos de consultar el estado del semforo parasaber si podemos acceder a l o no (cruzar o no). Tal ycomo sucede en los semforos reales, si ignoramos lo queel semforo nos indica, podemos provocar una catstrofe.

    Ms formalmente, Dijsktra define un semforo como unobjeto de tipo entero sobre el que se pueden realizar lasoperaciones: wait (esperar) y signal (incrementar).

    La operacin wait decrementa el valor de un semforo yse utiliza para adquirirlo o bloquearlo mientras que laoperacin signal incrementar el valor de un semforo,utilizndose esta operacin para liberar un semforo oinicializarlo.

    Sea como fuere, los semforos nunca pueden tomar valoresnegativos y si valen 0, no se podrn realizar ms operacioneswait sobre l. Vemos que en la mayora de los casos unsemforo ser binario; es decir, slo valdr 0 o 1 dependiendode la situacin. Pero es totalmente posible usar semforosque no sean binarios.

    En ocasiones a la operacin wait se la denomina operacinV (del neerlandsproberen, probar), y a la operacin signaloperacin V (del neerlands verhogen, incrementar).

    Cuando en programacin en UNiX vamos a utilizar semforos,necesitaremos tener la siguiente informacin disponible:

    El valor actual del semforo

    El identificador del proceso que cambi el semforopor ltima vez.

    El nmero de procesos que hay esperando a queel valor del semforo se incremente.

    El nmero de procesos que hay esperando a queel semforo pase a valor 0.

    3.3. Programado con semforos

    Tres sern las operaciones bsicas relacionadas consemforos en UNiX:

    Obtencin de semforos

    Acceso a la informacin de un semforo

    Manipulacin de semforos (operacin)

    Estas tres operaciones bsicas sern realizadas por tresfunciones que veremos a continuacin con ms detalle:semget, semctl y semop.

    3.3.1. Obtencin de semforos (semget)

    Una vez ms recurrimos a la pgina del manual para saber

    cul es el prototipo de esta funcin:NOMBRE

    semget - obtiene el identificador de un conjunto de semforos

    SINOPSIS

    # include

    # include

    # include

    int semget ( key_t key, int nsems, int semflg )

    Como podemos observar, semget nos permite crear oacceder a un conjunto de semforos bajo un mismoidentificador. Si todo va bien, esta funcin nos devuelveel identificador del conjunto de semforos; en otro casoretorna -1 (por ejemplo si el conjunto de semforosasociados a la clave ya existe).

    El primer parmetro key es la clave que indica a qu grupode semforos queremos acceder o que grupo de semforosqueremos crear.

    Esta clave se crea mediante ftok:

    NOMBRE ftok - convierte un nombre de camino y un identificador de proyecto en

    una clave IPC de System V

    SINOPSIS

    # include

    # include

    key_t ftok ( char *camino, char proy )

    Curso de Linux: El sistema IPC(II) - Curso de Linux: El sistema IPC(II) - Curso de Linux

  • 8/14/2019 Haxcra17

    25/68

    PC PASO A PASO N 17 Pgina 25

    Como podemos observar esta funcin nos proporciona unaclave IPC a partir de una ruta de fichero y una letra paraque podamos utilizar el conjunto de llamadas IPC UNiX.

    Estas claves estn relacionadas con los inodos que ocupan

    en disco un determinado archivo, con lo cual el sistemapuede generar un mecanismo nico para losprogramas/procesos que compartan recursos IPC comosemforos, memoria compartida, etc.

    Todas las funciones relacionadas con la creacin de recursosIPC, necesitan de esta clave.

    Para que podamos crear semforos, es imprescindible queel valor de la clave que nos proporcione el sistema seaIPC_PRIVATE.

    Si no es as, deberemos de asegurarnos de activar

    IPC_CREAT en semflg.Con respectos a los otros parmetros que recibe, nsemsser el nmero de semforos que habr en el conjunto desemforos que vamos a crear semflg indica el modo decreacin del semforo.

    Este modo consta de dos partes: el modo IPC que puedevaler IPC_CREAT o IPC_EXCL y los permisos que tendr elsemforo:

    Una posible funcin que podemos construir para crearsemforos es:

    int crea_semaforo_binario(key_t clave, int semflgs)

    {

    return semget(clave, 1, semflgs);

    }

    3.3.2. Accesos a la informacin del semforo (semctl)

    En varias ocasiones debemos de realizar distintasoperaciones sobre los semforos. La funcin queemplearemos para ello es semctl. a continuacin,mostramos toda la pgina de manual, dado que en ella senos muestra claramente todas las operaciones que se nospermitirn hacer sobre un conjunto de semforos:

    SEMCTL(2) Manual del Programador de Linux SEMCTL(2)

    NOMBRE

    semctl - operaciones de control de semforos

    SINOPSIS

    #include

    #include

    #include

    #if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED)

    /* la union semun se define al incluir */

    #else

    /* segn X/OPEN tenemos que definirla nosostros mismos */

    union semun {

    int val; /* valor para SETVAL */

    struct semid_ds *buf; /* buffer para IPC_STAT, IPC_SET */

    unsigned short int *array; /* array para GETALL, SETALL */

    struct seminfo *__buf; /* buffer para IPC_INFO */

    };

    #endif

    int semctl (int semid, int semnun, int cmd, union semun arg)

    DESCRIPCIN

    La funcin realiza la operacin de control especificada por cmd en el

    conjunto de semforos (o en el semforo semnum-avo del grupo) identifi-

    cado por semid. El primer semforo del conjunto est indicado por el

    valor 0 para semnum.

    Valores vlidos para cmd son

    IPC_STAT Copiar informacin de la estructura de datos del conjunto de

    semforos en la estructura apuntada por arg.buf. El argu-

    mento semnum es ignorado. El proceso que realiza la llamada

    debe tener privilegios de acceso de lectura en el conjunto

    de semforos.

    IPC_SET Escribir los valores de algunos miembros de la estructura

    semid_ds apuntada por arg.buf a la estructura de datos del

    conjunto de semforos, actualizando tambien su miembro

    sem_ctime. Los miembros de la estructura provista por el

    usuario struct semid_ds a los que apunta arg.buf son

    sem_perm.uid

    sem_perm.gid

    sem_perm.mode /* solo los 9 bits ms bajos */

    El ID de usuario efectivo del proceso que realiza la llamada

    debe ser o de super-usuario, o el del creador o propietario

    del conjunto de semforos. El argumento semnum es ignorado.

    Curso de Linux: El sistema IPC(II) - Curso de Linux: El sistema IPC(II) - Curso de Linux

  • 8/14/2019 Haxcra17

    26/68

    Pgina 26 PC PASO A PASO N 17

    IPC_RMID Borrar inmediatamente el conjunto de semforos y sus estruc-

    turas de datos, despertando todos los procesos en espera

    (devuelve un error, y errno puesto a EIDRM). El ID de

    usuario efectivo del proceso que realiza la llamada debe ser

    o de super-usuario, o el del creador o propietario del con-junto de semforos. El argumento semnum es ignorado.

    GETALL Devuelve semval para todos los semforos del conjunto, en

    arg.array. El argumento semnum es ignorado. El proceso que

    realiza la llamada ha de tener privilegios de lectura en el

    conjunto de semforos.

    GETNCNT La llamada al sistema devuelve el valor de semncnt para el

    semnum-avo semforo del conjunto (p.ej. el nmero de proce-

    sos esperando que aumente semval para el semnum-avo semforo

    del conjunto). El proceso que realiza la llamada ha de

    tener privilegios de lectura en el conjunto de semforos.

    GETPID La llamada al sistema devuelve el valor de sempid para el

    semnum-avo semforo del conjunto (p.ej. el pid del proceso

    que ejecut la ltima llamada semop para el semnum-avo

    semforo del conjunto). El proceso que realiza la llamada

    ha de tener privilegios de lectura en el conjunto de

    semforos.

    GETVAL La llamada al sistema devuelve el valor de semval para el

    semnum-avo semforo del conjunto. El proceso que realiza la

    llamada ha de tener privilegios de lectura en el conjunto de

    semforos.

    GETZCNT La llamada al sistema devuelve el valor de semzcnt para el

    semnum-avo semforo del conjunto (p.ej. el nmero de proce-

    sos que esperan que semval del semnum-avo semforo del con-

    junto se ponga a 0). El proceso que realiza la llamada ha

    de tener privilegios de lectura en el conjunto de semforos.

    SETALL Poner semval para todos los semforos del conjunto usando

    arg.array, actualizando tambin el miembro sem_ctime de la

    estructura semid_ds asociada al conjunto. Los registros de

    anulacin son limpiados, para los semforos cambiados, en

    todos los procesos. Los procesos que estn durmiendo en la

    cola de espera son despertados si algn semval se pone a 0 ose incrementa. El argumento semnum es ignorado. El proceso

    que realiza la llamada ha de tener privilegios de modifi-

    cacin en el conjunto de semforos.

    SETVAL Poner el valor de semval a arg.val para el semnum-avo

    semforo del conjunto, actualizando tambin el miembro

    sem_ctime de la estructura semid_ds asociada al conjunto.

    El registro de anulacin es limpiado, para el semforo

    alterado, en todos los procesos. Los procesos que estn

    durmiendo en la cola de espera son despertados si semval se

    pone a 0 o se incrementa. El proceso que realiza la llamada

    ha de tener privilegios de escritura en el conjunto desemforos.

    VALOR DEVUELTO

    Si falla, la llamada al sistema devuelve -1, mientras errno indica el

    error. De otro modo, la llamada al sistema devuelve un valor no nega-

    tivo, dependiendo de cmd como sigue:

    GETNCNT el valor de semncnt.

    GETPID el valor de sempid.

    GETVAL el valor de semval.

    GETZCNT el valor de semzcnt.

    ERRORES

    En caso de error, errno tendr uno de los siguientes valores:

    EACCESS El proceso que reliza la llamada no tiene los permisos nece-

    sarios para ejecutar cmd.

    EFAULT La direccin a la que apunta arg.buf o arg.array no es acce-

    sible.

    EIDRM El conjunto de semforos se borr.

    EINVAL Valor no vlido para cmd o semid.

    EPERM El argumento cmd tiene valor IPC_SET o IPC_RMID pero el

    user-ID del proceso que realiza la llamada no tiene sufi-

    cientes privilegios para ejecutar el comando.

    ERANGE El argumento cmd tiene el valor SETALL o SETVAL y el valor al

    que ha de ser puesto semval (para algn semforo del con-

    junto) es menor que 0 o mayor que el valor SEMVMX de la

    implementacin.

    NOTAS

    Las llamadas de control IPC_INFO, SEM_STAT y SEM_INFO son utilizadas por

    el programa ipcs(8) para proveer informacin sobre recursos asignados.

    En el futuro pueden ser modificadas segn se necesite, o llevadas al

    interfaz del sistema de ficheros proc.

    Curso de Linux: El sistema IPC(II) - Curso de Linux: El sistema IPC(II) - Curso de Linux

  • 8/14/2019 Haxcra17

    27/68

    PC PASO A PASO N 17 Pgina 27

    El siguiente lmite de sistema para conjuntos de semforos afecta a lallamada semctl:

    SEMVMX Valor mximo para semval: depende de la implementacin

    (32767).

    CONFORME A

    SVr4, SVID. SVr4 documenta adicionalmente las condiciones de error EIN-

    VAL y EOVERFLOW.

    VASE TAMBIN

    ipc(5), shmget(2), shmat(2), shmdt(2)

    Linux 0.99.13 1 noviembre 1993 SEMCTL(2)

    De esta pgina, sacamos la conclusin de que nosotrosdeberemos de declarar manualmente la unin semun quenos permitir acceder y manipular la informacin asociada

    a un conjunto de semforos:

    union semun {

    int val; /* valor para SETVAL */

    struct semid_ds *buf; /* buffer para IPC_STAT, IPC_SET */

    unsigned short int *array; /* array para GETALL, SETALL */

    struct seminfo *__buf; /* buffer para IPC_INFO */

    };

    Un ejemplo de uso, sera la creacin de una funcin quedestruyese el conjunto de semforos creados, y otra quelos inicializase:

    //// Funcin que destruye un conjunto de semforos//int eliminar_semaforo_binario(int semid){

    union semun argumento_tonto;return semctl(semid, 1, IPC_RMID, argumento_tonto);

    }

    //// Funcin que inicializa un conjunto de semforos//

    int inicializa_semaforo_binario(int semid){union semun argumentos;unsigned short valores[1];

    valores[0]=1; // Inicializamos el semforo a 1argumentos.array = valores;return semctl(semid, 0, SETALL, argument);

    }

    3.3.3. Operaciones sobre semforos (semop)

    Una vez creados los semforos e inicializados, sobre ellospodremos ejecutar las rdenes wait y signal . El prototipode esta funcin es:

    # include

    # include

    # include

    int semop ( int semid, struct sembuf *sops, unsigned nsops )

    Siendo semid el identificador del conjunto de semforossobre el que vamos a operar, sops las operaciones arealizar y nsops el nmero de operaciones a realizar. sopses un puntero a un array de operaciones (de tantos

    elementos como se indique en nsops) teniendo cadaelemento el siguiente aspecto:

    struct sembuf{

    short sem_num; /* numero de semaforo: 0 = primero */

    short sem_op; /* operacion sobre el semaforo */

    short sem_flg; /* banderas (indicadores/parametros) de la operacion */

    };

    Aqu, sem_num indica el nmero del semforo sobre elque vamos a operar dentro del conjunto de semforos.

    Con respecto a sem_op es la operacin a realizar sobre

    este semforo.

    Si esta variable es negativa, se realizar una operacin dedecremento sobre el semforo (operacin wait), si espositivo, se incrementar dicho valor (operacin signal ysi vale 0 no se realizar operacin alguna.

    Finalmente, sem_flg es un conjunto de banderas quedependiendo de su valor (IPC_NOWAIT o SEM_UNDO)nos indicar que ocurrir si la operacin no tiene xito (enel primer caso se retorna el control, en el segundo sedeshace la operacin realizada cuando el proceso termina).

    3.3.4. Para terminar, un ejemplo

    Soy consciente de que a pesar del gran volumen deinformacin suministrada, de poco nos servir si no laentendemos. Debido a la extensin de este artculo, megustara haber explicado mejor el tema de semforos.Confo sin embargo que un ejemplo aclare el funcionamientode los semforos. Procurar indicar en el cdigo todo lonecesario.

    Curso de Linux: El sistema IPC(II) - Curso de Linux: El sistema IPC(II) - Curso de Linux

  • 8/14/2019 Haxcra17

    28/68

    Pgina 28 PC PASO A PASO N 17

    ///////////////////////////////////////////////////////////////////////////////////////////////////////

    // ARCHIVO: semaforo.c

    //

    // DESCRIPCIN:

    // Muestra el empleo de un semforo binario.//

    //

    // AUTOR:

    // Luis U. Rodrguez Paniagua

    // Este cdigo se distribuye bajo los trminos de la

    // Licencia Pblica General (GPL) de GNU. Puede usted

    // consultarla en www.gnu.org

    //

    ///////////////////////////////////////////////////////////////////////////////////////////////////////

    #include

    #include

    #include

    #include

    //

    //

    // Definimos unas constantes

    #define WAIT -1

    #define SIGNAL 1

    #define NUM_SEMAFOROS 2 // Dos procesos, dos semforos

    #define PADRE 0#define HIJO 1

    //

    // Definimos la unin semun

    //

    union semun {

    int val; /* valor para SETVAL */

    struct semid_ds *buf; /* buffer para IPC_STAT, IPC_SET */

    unsigned short int *array; /* array para GETALL, SETALL */

    struct seminfo *__buf; /* buffer para IPC_INFO */

    };//

    // Funcin que crea un conjunto de semforos

    //

    int crea_semaforos(key_t clave, int semflgs)

    {

    return semget(clave, NUM_SEMAFOROS , semflgs);

    }

    //

    // Funcin que destruye un conjunto de semforos

    //

    int eliminar_semaforos(int semid)

    {union semun argumento_tonto;

    return semctl(semid, 0, IPC_RMID, argumento_tonto);

    }

    //

    // Funcin que inicializa un conjunto de semforos

    //

    int inicializa_semaforos(int semid, int semnum, int valor)

    {

    union semun argumentos;

    unsigned short valores[2];

    valores[semnum]=valor; // Inicializamos el semforo a 1

    argumentos.array = valores;

    return semctl(semid, 0, SETALL, argumentos);

    }

    //

    // Funcin que realiza la operacin WAIT

    //

    int operacion_wait(int semid, int semnum)

    {struct sembuf operacion[2];

    operacion[semnum].sem_num = semnum;

    operacion[semnum].sem_op = WAIT;

    operacion[semnum].sem_flg = SEM_UNDO;

    return semop(semid, operacion, NUM_SEMAFOROS);

    }

    //

    // Funcin que realiza la operacin SIGNAL

    //

    int operacion_signal(int semid, int semnum)

    {

    struct sembuf operacion[2];

    operacion[semnum].sem_num = semnum;

    operacion[semnum].sem_op = SIGNAL;

    operacion[semnum].sem_flg = SEM_UNDO;

    return semop(semid, operacion, NUM_SEMAFOROS);

    }

    Curso de Linux: El sistema IPC(II) - Curso de Linux: El sistema IPC(II) - Curso de Linux

  • 8/14/2019 Haxcra17

    29/68

  • 8/14/2019 Haxcra17

    30/68

    PC PASO A PASO N 17 Pgina 29

    //

    // Funcin que nos devuelve el valor de un semforo

    //

    int obten_valor_semaforo(int semid, int num_sem)

    {union semun argumento_tonto;

    return semctl(semid, num_sem, GETVAL, argumento_tonto);

    }

    int main(int argc, char *argv[])

    {

    int semaforo, hijo, i, j;

    key_t clave;

    // Creamos la clave a partir del nombre del propio ejecutable

    // y la letra L

    clave = ftok(argv[0],'L');

    // Creamos el cjoto de semforos

    if (( semaforo = crea_semaforos(clave, IPC_CREAT | 0600) ) == -1)

    {

    printf("Error al crear el semforo.\n");

    return -1;

    }

    // Inicializamos el semforo del padre

    inicializa_semaforos(semaforo, PADRE, 1);

    // Inicializamos el semforo del hijo

    inicializa_semaforos(semaforo, HIJO, 1);

    // Creamos el proceso hijo.

    if ( (hijo = fork()) == -1)

    {

    printf("Error al crear proceso hijo.\n");

    return -1;

    }

    if(hijo == 0)

    {

    // Si somos el hijo

    for(i=0;i

  • 8/14/2019 Haxcra17

    31/68

    PC PASO A PASO N 17 Pgina 31

    1.Introduccin a la introduccin.

    Probablemente muchos de vosotros esperabaiscon impaciencia un curso como este, as queespero que vuestra alegra, al ver que al finnos metemos de lleno con el tema en estarevista, no se vea frustrada al descubrir quevuestro profe en este curso va a ser elmismo que mes tras mes os ha ido aburriendosoberanamente con la serie RAW. ;-)

    Si es cierto que os parezco aburrido, en midefensa he de alegar que la descripcindetallada de un protocolo es algo aburrido depor s y, aunque he hecho lo posible por hacerartculos amenos, cuando hay que ponerseserio, hay que ponerse serio.

    Aprovecho esta ocasin para agradecer aAdhara (conocida como MariAn antes dedigievolucionar) su aportacin en este sentido,con las caricaturas e ilustraciones que haaportado para amenizar en la medida de loposible la serie RAW y que, por supuesto,tambin seguir aportando en este curso quecomienza.

    Os plantear el terrible dilema que he sufridopara poder comenzarlo. Para ayudarme a lahora de estructurar un poco las ideas heojeado multitud de libros y cursos de TCP/IPpara ver cmo abordaban el problema y poderexplicarlo desde cero, que era mi gran reto.

    Lamentablemente, en ninguno he encontradolo que yo buscaba, una forma de introducirlos conceptos de forma que alguien sin ningnconocimiento pueda no slo aprenderse dememoria un montn de formatos decabeceras, comandos de protocolos, y un

    glosario de trminos; si no realmente llegara hacer suyos los conceptos y comprenderlosde una forma totalmente natural.

    Por supuesto, ya se que la mayora de loslectores de esta revista tienen ya un nivelaceptable de conocimientos, pero he deenfocarlo no slo para los lectores veteranos,si no tambin para aquellos totalmente novatosque, sin duda, sern los que ms se beneficiende este curso y que les abrir las puertas parallegar a comprender en profundidad todo lodems que se ensee en la revista a partir deahora.

    Sin duda alguna, el TCP/IP es uno de los pilaresde todo este jaleo en el que estamos metidos.;-) As que decid coger al toro por los cuernos,y enfocar la cuestin desde un punto de vistadiferente.

    Cuntos cursos de TCP/IP empiezan contandoe l mode lo OSI (Open SystemsInterconnection = Interconexin de

    Sistemas Abiertos)? A los que hayis seguidoalguno de esos cursos publicados en Interneto en otras revistas, os qued claro desde elprincipio, por ejemplo, para qu servia la capade sesin del modelo OSI? No pensis quequiz empezar abordando el problemaplanteando un modelo terico tan complejopuede ser contraproducente? No os quedaron

    TCP/IP!

    CURSO DE TCP/IPINTRODUCCIoN

    Si alguna vez has intentado comprender Internet, seguro que has acabado frente a un

    libro de TCP-IP. Y seguro que a la sexta pgina lo has dado por IMPOSIBLE!!!

    TCP-IP es el alma de la red, nosotros te ofrecemos un curso MUY ESPECIAL ;)

    TCP / IP: Transmission Control Protocol / Internet Protocol= Protocolo de Control de Transmisin / Protocolo de

    Internet

  • 8/14/2019 Haxcra17

    32/68

    Pgina 32 PC PASO A PASO N 17

    ms dudas despus de terminar el tema deintroduccin que antes de empezarlo? Seguroque la mayora dejasteis el curso a la mitad(y otros ni siquiera pasasteis de las primeras

    pginas).

    El empezar cualquier curso de TCP/IPhablando del modelo OSI parece queha sido la solucin estndar para solucionarel reto de mostrar el concepto de losprotocolos por capas a gente totalmentenueva en el tema. Pero a m personalmentenunca me ha parecido una buena idea, asque he tomado una medida muy arriesgada,y es intentar dar un nuevo enfoque a estereto.

    No s qu resultados tendr mi enfoque, peroespero que al menos sea una alternativa paraque aquellos que no terminan de captar losconceptos por los medios clsicos tenganaqu una segunda oportunidad.

    Qu esperabais? Que mi curso de TCP/IPfuese como todos los dems? Para eso tenismillones de libros sobre el tema! Lo quepretendemos dar en esta revista son nuevasvisiones que no se pueden encontrar en las

    fuentes convencionales.

    El juzgar si nuestro enfoque es mejor que elconvencional, ya depende de cada lector, yconfo en que todos vosotros tendris buen

    juicio para escoger la opcin que para cadauno de vosotros resulte ms adecuada.

    Como veris, mi enfoque intenta mostrar losconceptos puros, al margen de cualquierdetalle tcnico, mediante varios smiles conotros conceptos, bien conocidos por todos,de nuestra vida cotidiana.

    Por supuesto, despus de este primer artculovendrn otros, y ah si que veremos ya enprofundidad los detalles tcnicos, los cualesnos entrarn con muchsima ms facilidad sipreviamente hemos dedicado un tiempoimprescindible a llegar al fondo de losconceptos.

    2. El concepto fundamental de

    protocolo por capas

    Empezaremos nuestro viaje metafrico por elmundo de los protocolos situndonos en unhospital, donde los doctores PyC y Scherzohablan acerca de la prxima operacin acorazn abierto que tendrn que llevar a cabo.

    El doctor PyC tiene unas dudas acerca de lacomplicadsima operacin, y acude al doctorScherzo en busca de ayuda.

    Curso de TCP/IP - Introduccin - Curso de TCP/IP - Introduccin - Curso de TCP/IP - Introduccin

  • 8/14/2019 Haxcra17

    33/68

    PC PASO A PASO N 17 Pgina 33

    Dios mo, como haya entre los lectores algnmdico o estudiante de medicina... que meperdone por la increble cantidad deestupideces que acabo de soltar! XD

    Al margen de si tiene sentido o no la parrafada,supondremos que se trataba de unaconversacin perfectamente normal entrecirujanos.

    Ahora vamos a plantearnos una serie decuestiones sobre estas vietas. En primerlugar, qu han hecho bsicamente PyC yScherzo?COMUNICARSE.

    Ahora vamos a analizar un poco en qu haconsistido esa comunicacin.

    En primer lugar, lo que ms nos llama laatencin es el lenguaje tcnico utilizado, queslo es comprendido por los cirujanos.

    Igual que los cirujanos tienen su propiolenguaje tcnico, los informticos tambintienen el suyo, los arquitectos el suyo, y losabogados el suyo, todos ellos diferentes entre

    s.

    Pero, a pesar de que todos estos lenguajestcnicos sean diferentes, todos ellos se apoyanen una misma base, que es el idioma; en estecaso, el castellano.

    El lenguaje tcnico de los cirujanos consistenicamente en una serie de palabras yexpresiones que permiten expresar lostrminos especficos que requieren loscirujanos para comunicarse en su trabajo. Por

    tanto, no es un lenguaje completo, ya que noposee una gramtica propia que permitamantener una conversacin sin apoyarse enun idioma bsico, como puede ser el castellano.

    Si, por ejemplo, eliminsemos de la parrafadadel doctor PyC todo aquello que no formaseparte exclusivamente del lenguaje tcnico delos cirujanos, esta frase:

    Se convertira en sta otra:

    Por la cara que pone el doctor Scherzo podemosestar seguros de que utilizando tan slo ellenguaje tcnico, sin apoyarnos en la base quees el idioma castellano, es imposible que doscirujanos se comuniquen.

    Lo mismo que pasa con los cirujanos pasa concualquier otro grupo de profesionales que

    utilicen su propio lenguaje tcnico. Todos ellosapoyan toda su conversacin en un idiomacomn, que puede ser el castellano, el ingls,o cualquier otro.

    Por supuesto, para que dos profesionales seentiendan tienen que hablar no slo el mismolenguaje tcnico, si no tambin el mismoidioma comn.

    Curso de TCP/IP - Introduccin - Curso de TCP/IP - Introduccin - Curso de TCP/IP - Introduccin

  • 8/14/2019 Haxcra17

    34/68

    Pgina 34 PC PASO A PASO N 17

    Si el doctor PyC hablase Japons, sin dudael doctor Scherzo habra puesto la mismacara de incomprensin.

    Segn lo que hemos visto hasta ahora, lacomunicacin entre los dos doctores funcionagracias a dos capas independientes: el idioma,y el lenguaje tcnico.

    Cul es el motivo por el cual es esto as?Pues, si pensis un poco, llegaris vosotrosmismos a la conclusin.

    Imaginad que el lenguaje tcnico de loscirujanos fuese un lenguaje completo, consus frmulas de saludos, despedidas, unagramtica completa para construir las frases,palabras para expresar cualquier trminocomn en cualquier comunicacin (como los

    habituales: me lo repita, habla msdespacio, que no me da tiempo a apuntarlo!,etc.), e incluso tuviese sus propios nombres,en lugar de los que tenemos en castellano(doctor Pyc, y doctor Scherzo). Sera unacompleta locura!

    Desde luego, no sera nada prctico quecualquier cirujano tuviese que aprender unidioma totalmente nuevo slo para podercomunicarse con sus colegas.

    Lo ms prctico, y lo ms lgico, es utilizarel recurso conocido por todos que es el idiomacastellano, y simplemente ampliarlo con unaserie de trminos que permitan entrar endetalle en los conceptos manejados por loscirujanos.

    Una vez comprendida la necesidad decomunicarse utilizando dos capas, vamos a

    entrar ms en profundidad en la comunicacinque vimos en las vietas.

    Qu otro medio comn han utilizado el doctor

    Scherzo y el doctor Pyc para comunicarse?El habla!Si trasladsemos toda esa conversacin a unpapel, no tendra el mismo sentido? Y si latrasladsemos a una conversacin telefnica?O a una conversacin por IRC (Internet RelayChat)?

    Los dos doctores se han apoyado en un mediofsico comn, que es la voz, pero perfectamentepodran haber mantenido la mismaconversacin a travs de otro medio fsico,

    como la escritura, o el telfono.

    Tanto si esa conversacin es hablada como sies escrita, seguira utilizando tanto el lenguajetcnico de los cirujanos, como el idiomacastellano. En nada cambiara, salvo en elhecho de que el medio utilizado sera diferente.

    Ahora bien, igual que un cirujano japons nopuede entenderse con un cirujano de Jan, siel doctor PyC le hubiese soltado la parrafadaal doctor Scherzo por correo, y ste le hubiese

    respondido a viva voz cuando recibiese lacarta (es decir, que se lo habra contado a lasparedes), tampoco habra sido posible unacomunicacin.

    Ambos interlocutores tienen que compartir elmismo medio fsico para comunicarse. Si uninterlocutor est utilizando el telfono, y elotro est respondiendo por escrito en un papel,

    jams podr haber una comunicacin.

    Por supuesto, tampoco sirve de nada que

    ambos hablen a viva voz, si cada uno est enun lugar diferente, donde no se puedanescuchar mutuamente.

    Podemos considerar, por tanto, al medio fsicocomo otra capa de la comunicacin. En estecaso, esta capa ya no existe por unaconveniencia de hacer las cosas ms fciles,si no por una necesidad natural.

    Curso de TCP/IP - Introduccin - Curso de TCP/IP - Introduccin - Curso de TCP/IP - Introduccin

  • 8/14/2019 Haxcra17

    35/68

    PC PASO A PASO N 17 Pgina 35

    Vamos a ver qu ocurre ahora si el doctorMe-Iwa, de Japn, quiere hablar con el doctor

    PyC acerca de la operacin de cardiopataprecartida.

    Por supuesto, no podrn comunicarsedirectamente, al hablar distintos idiomas,pero por suerte el doctor Me-Iwa tiene unintrprete que puede hablar tanto en castellanocomo en japons, por lo que ste sera elescenario ahora:

    Ahora meditemos un poco acerca de estenuevo personaje, el intrprete. Lo msprobable es que este intrprete sea unestudiante de filologa, o simplemente unestudiante de idiomas de academia pero, encualquier caso, es poco probable que elintrprete sea un cirujano.

    Pero, es realmente necesario que el intrpretesepa algo de ciruga? El lenguaje tcnico delos cirujanos al fin y al cabo no es ms queuna extensin del idioma, por lo que bastaracon que el intrprete simplemente conocieseambos idiomas para transmitir la conversacin

    entre los dos interlocutores. Nos daexactamente igual que el intrprete noentienda ni papa de la conversacin, ya queesa conversacin no va dirigida a l, no es

    ms que un mero intermediario. l tiene quesaber nicamente ambos idiomas: japons ycastellano.

    Una vez que el intrprete ha traducido la fraseVamos a hacer una incisin subyugular yaser problema de los cirujanos entenderseentre ellos, ya que el intrprete no tiene niidea de qu es una incisin subyugular, perosi que sabe traducir las palabras literalmente.

    Por tanto, podramos considerar al intrprete

    como un intermediario en la conversacin queslo llega a comprender hasta cierta capa dela comunicacin pero que, an as, es capazde transmitir todo, confiando en que losinterlocutores sern capaces de comprenderseuna vez traducido el idioma.

    Ms adelante profundizaremos mucho msen la cuestin de los intermediarios en lacomunicacin, as que quedaos bien con estaidea. ;-)

    3. Las capas de TCP/IP

    Al fin vamos a ver la relacin que tiene todoesto con el tema que nos interesa!Ya hemos comprendido la necesidad deestructurar la comunicacin en diferentescapas, tanto por necesidad fsica, como porconveniencia para facilitar la comunicacin(reducir su complejidad). Por supuesto, esoes algo que ocurre en todo tipo decomunicacin y, por tanto, la comunicacinentre mquinas no va a ser menos.

    Por un momento, imaginemos que no hubiesecapas en la comunicacin por Internet.

    Si yo tuviese que programar un cliente decorreo electrnico (como por ejemplo elOutlook Express, tendra que idear desde cerotoda una serie de funciones para interconectaral remitente y al destinatario, una serie de

    Curso de TCP/IP - Introduccin - Curso de TCP/IP - Introduccin - Curso de TCP/IP - Introduccin

  • 8/14/2019 Haxcra17

    36/68

    Pgina 36 PC PASO A PASO N 17

    funciones para asegurarme de que el mensajellegue sin errores hasta el destino, una seriede funciones para identificar a ambas partes,etc., etc.

    Si despus me da por programar un clientede FTP (si no sabes lo que es el FTP FileTransfer Protocol-, descrgate gratis el nmero1 de esta revista desde www.hackxcrack.com),tendra que inventarme de nuevo y desdecero unas funciones para interconectar ambaspartes (nuestro cliente con el servidor), unasfunciones para asegurarme de que los ficherosy los comandos lleguen sin errores, una seriede funciones para identificar ambas partes,etc., etc.

    El hacer las cosas de esta manera, no slosera una cantidad ingente de trabajoinnecesario, si no que adems dificultaraenormemente que los programas seentendiesen entre s.

    Si todas las aplicaciones que utilizan Internettienen que realizar una serie de tareascomunes, como son la interconexin de laspartes implicadas en la comunicacin, laidentificacin de ambas partes, la correccin

    de errores, el ajuste de las velocidades derecepcin y transmisin, etc., etc., por quno utilizar un lenguaje comn para todasellas?

    Igual que todos los profesionales (cirujanos,informticos, arquitectos...) utilizan el idiomacastellano como base sobre la cual apoyanluego sus lenguajes tcnicos propios,tambin las mquinas conectadas a Internetutilizan un mismo idioma comn como basesobre la que luego apoyar cada lenguaje

    especfico.

    En este caso, el idioma comn de las mquinases el famoso TCP/IP, y los lenguajes tcnicosque utiliza cada mquina apoyndose enTCP/IP son los que permiten las diferentestareas, como transmitir ficheros (FTP), enviarcorreo (SMTP), mostrar pginas Web (HTTP),etc., etc.

    Los que hayis seguido mi serie RAW desdeel principio, comprenderis ahora por qu unay otra vez repeta frases como: protocolo quefunciona sobre TCP/IP, o protocolos porencima del nivel de TCP/IP, etc.

    Por ejemplo, tenis a mano el nmero 14 dela revista, en el que hablaba sobre el protocoloDNS? Mirad el primer prrafo de ese artculo,y veris