Upload
apolo456
View
237
Download
0
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