elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


  Mostrar Temas
Páginas: 1 [2] 3
11  Programación / Programación C/C++ / [Taller] Programacion Avanzada en C/C++ (Linux) en: 4 Octubre 2010, 04:53 am
[Taller] Programacion Avanzada en C/C++ (Linux)




EN CONSTRUCCION

Nota: No postear en este tema, lo tomare para organizar un poco el taller debido a que sera un trabajo un poquito extenso para un solo post. En caso de querer comentar, hacerlo en el post de dicho capitulo.
12  Programación / Programación C/C++ / [Capitulo I] Introduccion a la programacion en Linux C/C++ en: 4 Octubre 2010, 04:50 am
Compilando con GCC

   Un compilador transforma desde un codigo fuente legible por los humanos en un objeto legible para una maquina. En los sistemas operativos basados en Linux los compiladores por excelencia forman parte del GNU Compiler Collection, usualmente conocidos como GCC. GCC incluye compiladores para C, C++, Java y Fortran.

   Supongamos que tenemos un codigo simple, por ejemplo verificar si un numero es o no perfecto, en el cual tenemos un codigo fuente en C++ llamado "perfect.cpp", un archivo de cabecera C++ llamado "perfect.hpp" un codigo fuente en C llamado "main.c", supongamos que ambos archivos seran compilados, luego seran enlazados para crear un programa llamado "perfect" el cual nos dira si un numero es o no un numero perfecto.

main.c:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "perfect.hpp"
  4.  
  5. int main(int argc,char *argv[])
  6. {
  7. int a;
  8. if(argc>1)
  9. {
  10. a = atoi(argv[1]);
  11. if(perfect(a))printf("El numero %i es perfecto\n",a);
  12. else printf("El numero %i no es perfecto\n",a);
  13. }
  14. return 0;
  15. }
  16.  

perfect.cpp:
Código
  1. #include "perfect.hpp"
  2.  
  3. int perfect(int a)
  4. {
  5. int b=0;
  6. for(int i=1;i<a;i++)if(a%i==0)b+=i;
  7. if(a==b)return 1;
  8. else return 0;
  9. }

perfect.hpp:
Código
  1. #ifndef _Perfect
  2. #define _Perfect
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6.  
  7. extern int perfect(int);
  8.  
  9. #ifdef __cplusplus
  10. }
  11. #endif
  12. #endif
  13.  


El nombre del compilador de C es gcc y para compilar un archivo se utiliza la opcion -c. El compilador de C++ es g++ y al igual que el compilador de C se utiliza la opcion -c. Compilando los codigo fuente antes vistos tendriamos:

Código:
lordrna@personal-laptop:~$ gcc -c main.c
lordrna@personal-laptop:~$ g++ -c perfect.cpp

En caso de que no suceda ningun error se crearan los archivos "main.o" y "perfect.o".

Para mas informacion del compilador:

Código:
lordrna@personal-laptop:~$ info gcc

Enlazar archivos compilados

Cuando obtengamos los archivos compilados que ya necesitemos enlazarlos, deberemos utilizar siempre g++ en caso de que alguno de los compilados a enlazar contenga codigo en C++, incluso si es simplemente un solo archivo compilado contiene codigo fuente en C++. Para esto utilizaremos:

Código:
lordrna@personal-laptop:~$ g++ -o Perfecto main.o perfect.o

Entre las principales ventajas que nos brinda compilar y luego enlazar  es que en caso de que uno de los archivos fuente tenga un error simplemente tendriamos que reparar el error, compilar el codigo fuente modificado y enlazar con los demas.


Utilizando el Debugger de GNU (GDB)

   Para agregar informacion extra para poder buscar posibles errores con el debugger de GNU añadiremos la opcion '-g', esto agrega informacion extra para poder tracear el programa. La forma de compilar y enlazar quedaria de la siguiente forma:

Código:
lordrna@personal-laptop:~$ gcc -g -c main.c
lordrna@personal-laptop:~$ g++ -g -c perfect.cpp
lordrna@personal-laptop:~$ g++ -g -o Perfecto main.o perfect.o

Cuando compilamos y enlazamos de esta forma el debugger obtiene informacion de que direccion de memoria corresponde a cada linea del codigo fuente, como mostrar variables locales entre otras cosas.

Para ejecutar el GNU Debbuger escribimos en consola:
Código:
lordrna@personal-laptop:~$ gdb perfecto

Para mas informacion 'man gdb'

En caso de que el programa perfecto exista en consola aparecera:

Código:
(gdb)

para ejecutar el programa escribimos 'run' y seguido los parametros, en caso de ser necesarios:

Código:
(gdb) run 6

En caso de que exista un error con 'where' nos mostrara la porcion del codigo donde el debugger tuvo problemas para ejecutar y asi podremos en el codigo fuente modificar la parte defectuosa:

Código:
(gdb) where

Podremos tambien colocar breakpoints dando el nombre de la funcion donde queremos colocarlo:

Código:
(gdb) break main

Para ver el valor de una variable utilizamos 'print' seguido del nombre de la variable.

Código:
(gdb) print argv[1]

Si quieres avanzar un paso, pero recibiendo los valores de retorno de las funciones se utiliza 'next'.

Código:
(gdb) next

Si quieres adentrarte en las funciones mientras avanzas se utiliza 'step'.

Código:
(gdb) step
13  Programación / Scripting / [Python] WhoPingMe by LordRNA. en: 19 Septiembre 2010, 06:46 am
Disculpen los comentarios en ingles... escribi el script para publicarlo en otro lugar pero soy fiel a mi origen, :xD eso fue una excusa... Los puse en ingles y me da peresa traducir. :silbar: :silbar:

Cualquier pregunta o duda, no duden en postearla.

PsData: Fue probado en Linux, se necesitan privilegios para ejecutar.

Código
  1. #! /usr/bin/env python
  2. ########################################################################
  3. #Script     : WhoPingMe.py                                             #
  4. #Description: Detect if you receive a Ping and make a list with Date.  #
  5. #By         : LordRNA                                                  #
  6. #Date`      : Sept 19th-2010                                           #
  7. #Comments   : Tested on Python 2.6.5                                   #
  8. ########################################################################
  9.  
  10. import socket, datetime
  11.  
  12. def whopingme(date):
  13.    source = '' #To put the IP Source.
  14.    header = ["%i"%ord(x) for x in data]
  15. #I made a list of int values for each byte in data variable.
  16.    if int(header[20])==8:#If Type(ICMP) is 8, i received a Echo Request.
  17.        for x in range(4):#To make a string with the IP Source.
  18.            source += str(header[12+x])
  19.            if x<3:source +='.'
  20.        date = str(datetime.datetime.today())
  21.        print date[:len(date)-7]+" ---> "+ str(source)
  22. #I deleted the Miliseconds with [:len(date)-7]
  23.  
  24. sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
  25. #ICMP Protocol on RAW Socket
  26.  
  27. while 1:
  28.    data = sock.recv(21)#I Just want these bytes, IPHeader Lenght + Type(ICMPHeader)
  29.    whopingme(data)#Sending data to whopingme() function.

Muestra de la Salida del programa:
Código:
rna@rna-laptop:~$ sudo python ./whopingme.py
2010-09-19 00:47:57 ---> 192.168.10.230
2010-09-19 00:47:58 ---> 192.168.10.230
2010-09-19 00:47:59 ---> 192.168.10.230

Edito: Segun me ha dicho Karcrack, LittleHorse y ctlon deberia funcionar en windows con privilegios de administrador.
14  Programación / Scripting / [Python] Capturar Paquetes TCP en: 10 Septiembre 2010, 17:52 pm
Código
  1. ########################################################################
  2. #Programa: Sniffer de paquetes TCP                                     #
  3. #Autor   : LordRNA                                                     #
  4. #Fecha   : 09-Sept-2010                                                #
  5. ########################################################################
  6. #Se necesitan privilegios de root para trabajar con sockets raw.
  7. #Probado en Ubuntu10.04 con Python2.7
  8. import socket
  9.  
  10. translate =''.join([(len(repr(chr(x)))==3) and chr(x) or '.' for x in range(256)])
  11.  
  12. def dump(src, length=16):
  13.    result=''
  14.    while src:
  15.       s,src = src[:length],src[length:]
  16.       hex = ' '.join(["%02X"%ord(x) for x in s])
  17.       s = s.translate(translate)
  18.       result += "%-*s %s\n" % (length*3,hex,s)
  19.    return result
  20.  
  21. s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
  22. L=0
  23. while 1:
  24. L+=1
  25. raw = s.recv(16000)
  26.        print "========================================================================"
  27. print "Paquete: "+str(L)
  28. print "========================================================================"
  29. print dump(raw)
  30.  
15  Programación / Scripting / [Python] Coeficiente Binomial. en: 6 Septiembre 2010, 16:37 pm
Coeficiente Binomial o Combinaciones Maximas de un conjunto de N elementos tomando M elementos cualesquiera.
Código
  1. #Coeficiente Binomial by LordRNA
  2. #Realizado en Python2.7
  3.  
  4. def factorial(a):
  5. if a<2:return 1
  6. a*=factorial(a-1)
  7. return a
  8.  
  9. try:
  10. n=int(raw_input("Intruduzca la cantidad total de elementos: "))
  11. m=int(raw_input("Introduzca la cantidad de elementos a combinar: "))
  12.  
  13. if m>n:
  14. print "Error: La cantidad total de elementos debe ser mayor que la cantidad de elementos a combinar."
  15. else:
  16. num = factorial(n)
  17. den = factorial(m) * factorial((n-m))
  18. res = num/den
  19. print res
  20.  
  21. except ValueError:
  22. print "Introdujo un tipo de datos no valido."
  23. except RuntimeError:
  24. print "El numero de combinaciones es demasiado grande."
16  Programación / Scripting / [Python] IRCBot en: 5 Septiembre 2010, 18:39 pm
Bueno, aqui un ejemplo de un IRCBot en Python... es el codigo que he creado de prueba para el que actualmente estoy realizando, por lo tanto esta un tanto chapucero en lo que se refiere a la seleccion de nick ya que este es fijo y se pueden realizar algunas mejoras mas :¬¬ :¬¬.

Nota: No des criticas constructivas o inconstructivas.

Código
  1. import socket, time, string
  2.  
  3. Version = ':RNA PyBot  V1.0Beta\r\n'
  4. while True:
  5. try:MainSock = socket.socket()
  6. except: continue
  7.  
  8. try:
  9. MainSock.connect(("irc.elhacker.net",6667))
  10. except socket.gaierror:
  11. print "Sin Conexion"
  12. time.sleep(5)
  13. MainSock.close()
  14. continue
  15. time.sleep(10)
  16. MainSock.send("USER RNABOT PYTHON PoC BOT\n")
  17. MainSock.send('Nick RNA_PyBot\n')
  18. MainSock.send("JOIN #elhacker.net\n")
  19.  
  20. while True:
  21. MainSock.setblocking(0)
  22. try: s = MainSock.recv(1024)
  23. except:
  24. time.sleep(0.1)
  25. MainSock.setblocking(1)
  26. continue
  27.  
  28. m = string.split(s,":",2)
  29.  
  30. if m[0]=="PING ":
  31. s = string.replace(s,"I","O")
  32. MainSock.send(s)
  33. continue
  34. else:
  35. nick = string.split(m[1],"!",1)
  36. canal= string.split(s)
  37. print "Canal:"+canal[2]+" "+nick[0]+": "+m[len(m)-1]
  38.  
  39. if m[len(m)-1] == ".ver\r\n":
  40. if canal[2]=="RNA_PyBot":MainSock.send("PRIVMSG "+ nick[0]+" "+Version )
  41. else: MainSock.send("PRIVMSG "+ canal[2]+" "+Version )
  42. #Aqui se continuaran colocando las funciones... con elif
  43. else: continue
  44.  
  45. MainSock.close()
17  Foros Generales / Sugerencias y dudas sobre el Foro / [Sugerencia] Torneo de Ajedrez en: 20 Agosto 2010, 20:55 pm
No se si es bien pero desearria que realizaran un torneo de Ajedrez oficial en el foro... muchos usuarios frecuentes lo practican por lo tanto tendria aceptacion y personas para tal fin.
18  Programación / Ejercicios / Retos C/C++ en: 19 Agosto 2010, 03:18 am
Bueno, esta zona esta un poco muerta por lo tanto no cuesta nada tratar de revivirla.

Tomando las mismas reglas que la del pasado post de retos de Python que se hizo en esta zona haremos uno en C/C++.

Reglas:

1) Se empezara con un ejercicio, quien lo resuelva propone otro ejercicio y asi seguimos.
2) Los ejercicios tendran un tiempo de vida de 3 dias, si en exactamente 3 dias alguien no publica una solucion alguien podra proponer otro ejercicio.
3) No publicar para decir cosas que no tengan que ver con la solucion al reto o para postear un nuevo reto.
4) Numerar los retos (Ej. Reto#1)


Bueno ya que yo postee, seria de mala educacion dejar que otro ponga el reto.



Reto#1: Realizar un programa que reciba un numero como argumento y diga si es primo o no.

PData: No estoy estudiando C/C++ actualmente en la universidad... (Para los que diran que es una tarea.)
19  Foros Generales / Foro Libre / Una Madre demanda a Walt Disney por un Pato Donald Panadero. en: 14 Agosto 2010, 02:41 am
Una madre denuncia a Walt Disney porque un empleado vestido de 'Donald' le metió mano

Se llama April Mologon, tiene 27 años y cuando acudió al Epoc Center de Florida con sus dos hijos, lo último que esperaba era que sus senos fueran manoseados por el Pato Donald. Pero eso es precisamente lo que denuncia esta estadounidense, que ahora pide una indemnización de 50.000 dólares (39.000 euros) a la compañía Walt Disney.

Según la mujer, el empleado disfrazado como el conocido personaje de animación infantil le tocó un pecho y, cuando intentó retirarse, siguió manoseándola. Y eso que llevaba en brazos a uno de sus hijos, según recoge el Daily Mail en su edición de este jueves.

El incidente, que se produjo hace dos años, ha quedado en el recuerdo de April provocándole un traúma, según ella, además de "severos daños psicológicos", "cefaleas", "ansiedad aguda", "sudores fríos", "insomnio", "pesadillas" y "problemas digestivos".

Un portavoz de Disney, Bryan Malenius, ha declarado que responderán a las acusaciones "en el juzgado", pero que todavía no habían tenido acceso a la denuncia de Mologon, archivada en un juzgado del estado de Pennsylvania.

No es la primera vez que Disney debe afrontar un caso similar. En el año 2004, un trabajador llamado Michael Chartrand, vestido como el personaje Tigger de la serie 'Winnie The Pooh', fue acusando de tocar lascivamente a una niña de 13 años y a su madre.

Pero Chartrand se libró de la condena cuando su abogado, poniéndose el disfraz, convenció al jurado de lo difícil que es ver algo desde dentro y la imposibilidad de sentir nada con los guantes puestos...

Fuente: http://noticias.terra.es/2010/mundo/0812/actualidad/madre-denuncia-walt-disney-empleado-pato-donald-metio-mano-pecho.aspx

20  Programación / Programación C/C++ / [Qt4.6] QtPassGen by. Lord R.N.A. en: 3 Agosto 2010, 02:42 am
El titulo lo explica, es un generador de passwords. Genera passwords de entre 8 y 32 caracteres agregando numeros, letras y simbolos. Compila perfectamente en Qt4.6.

main.cpp:

Código
  1. #include <QtGui/QApplication>
  2. #include "qtpass.h"
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.    QApplication a(argc, argv);
  7.    QtPass w;
  8.    w.show();
  9.    return a.exec();
  10. }

qtpass.h:
Código
  1. #ifndef QTPASS_H
  2. #define QTPASS_H
  3.  
  4. #include <QtGui>
  5.  
  6. class QLineEdit;
  7. class QPushButton;
  8. class QLabel;
  9. class QSpinBox;
  10. class QString;
  11.  
  12. class QtPass : public QWidget {
  13.    Q_OBJECT
  14.  
  15. public:
  16.    QtPass(QWidget *parent = 0);
  17.  
  18. private slots:
  19.    void GenerarPass();
  20.    void About();
  21.  
  22. private:
  23.    QString *pass;
  24.    QLineEdit *LinePass;
  25.    QPushButton *ButtonGen, *ButtonAbout, *ButtonSalir;
  26.    QLabel *LabelPass;
  27.    QSpinBox *SpinChar;
  28.    QHBoxLayout *TopLayout;
  29.    QHBoxLayout *BottomLayout;
  30.    QVBoxLayout * MainLayout;
  31.  
  32.  
  33. };
  34.  
  35. #endif // QTPASS_H

qtpass.cpp:
Código
  1. #include "qtpass.h"
  2.  
  3. QtPass::QtPass(QWidget *parent) :
  4.    QWidget(parent)
  5.   {
  6. //Creamos los Widgets que vamos a necesitar
  7.    this->LinePass = new QLineEdit;
  8.    this->SpinChar = new QSpinBox;
  9.    this->ButtonGen = new QPushButton("&Generar");
  10.    this->ButtonAbout = new QPushButton("&About");
  11.    this->ButtonSalir = new QPushButton("&Salir");
  12.    this->LabelPass = new QLabel("Password: ");
  13.  
  14. //Configuramos algunos Widgets
  15.    this->ButtonGen->setDefault(true);
  16.    this->LinePass->setReadOnly(true);
  17.    this->SpinChar->setMaximum(32);
  18.    this->SpinChar->setMinimum(8);
  19.  
  20. //Preparamos los Layouts que necesitaremos para organizar.
  21.    this->TopLayout = new QHBoxLayout;
  22.    this->BottomLayout = new QHBoxLayout;
  23.    this->MainLayout = new QVBoxLayout;
  24.  
  25. //Empezamos la organizacion de los Widgets
  26.    this->TopLayout->addWidget(this->LabelPass);
  27.    this->TopLayout->addWidget(this->LinePass);
  28.    this->TopLayout->addWidget(this->SpinChar);
  29.    this->BottomLayout->addWidget(this->ButtonGen);
  30.    this->BottomLayout->addWidget(this->ButtonAbout);
  31.    this->BottomLayout->addWidget(this->ButtonSalir);
  32.    this->MainLayout->addLayout(this->TopLayout);
  33.    this->MainLayout->addLayout(this->BottomLayout);
  34.  
  35. //Añadimos titulo y el Layout principal a la ventana.
  36.    this->setWindowTitle("QtPassGen by Lord R.N.A.");
  37.    this->setLayout(this->MainLayout);
  38.    this->setFixedSize(420,80);
  39.  
  40. //Realizamos las conexiones que necesitaremos.
  41.    connect(this->ButtonSalir,SIGNAL(clicked()),this,SLOT(close()));
  42.    connect(this->ButtonGen,SIGNAL(clicked()),this,SLOT(GenerarPass()));
  43.    connect(this->ButtonAbout,SIGNAL(clicked()),this,SLOT(About()));
  44.    }
  45.  
  46. //La funcion encargada de generar el password.
  47. void QtPass::GenerarPass()
  48. {
  49. this->pass = new QString;
  50. QTime *seed = new QTime;
  51. seed->start(); //Para inicializar el puntero seed con la hora actual.
  52. qsrand(seed->msec()); //La semilla para qrand();
  53. for(int i=0;this->SpinChar->value()>i;i++)
  54. {
  55.    this->pass->insert(i,QChar(qrand()%95 +33));//Inserta en la posicion i, el char devuelto por QChar();
  56.    if(this->pass->at(i)==QChar(96))i--;
  57.  
  58. }
  59. this->LinePass->setText(*this->pass);
  60. delete this->pass;
  61. delete seed;
  62. }
  63.  
  64. //El MessageBox para el About.
  65. void QtPass::About()
  66. {
  67.    QMessageBox::about(this,"About","<b>QtPassGen v1.0 by Lord R.N.A.</b> <br><br>"
  68.                       "Aplicacion Generadora de Passwords <br>Qt 4.6"
  69.                       "<br><br><b>R.N.A. Labs.</b>");
  70. }
Páginas: 1 [2] 3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines