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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Mensajes
Páginas: [1] 2 3
1  Programación / Programación C/C++ / Extender Python con C y C++ en: 3 Enero 2020, 14:52 pm


SI damos un pequeño repaso de manera simple entendemos que Python al tratarse de un lenguaje interpretado se traduce a tiempo real de ejecución, es decir, se traduce linea uno y se ejecuta, se traduce linea dos y se ejecuta, lenguajes interpretados van traduciendo las instrucciones a tiempo de ejecucion, en cambio lenguajes compilados como C y C++ son traducidos en tiempo de compilación, para mas tarde ser ejecutado todo el conjunto en lenguaje maquina de una.
Es decir C traduce el lenguaje de alto nivel a lenguaje maquina y luego ejecuta el programa, en cambio Python ejecuta el programa mientras va traduciendo a tiempo real el lenguaje maquina.
Esto ocasiona lentitud en lenguajes Interpretados, y por eso entra en juego una maravillosa API que permite extender programas de Python haciéndolos mas veloces mediante llamadas a funciones e métodos ya compilados en C y C++.

Como haríamos eso?

Lo primero es tener instalado "Python.h" lo haremos mediante el siguiente comando para LInux, Ubuntu, etc...
(En caso de WIndows, VIsual Studio por ejemplo,Propiedades -> Opciones de Proyecto -> C/C++ -> General -> Directorios de inclusión adicionales)
Recomiendo la programación de extensiones solamente en Linux, Ubuntu, Debian o derivados...

Código
  1. sudo apt-get install python-dev -y

SI no tenemos instalado C++ lo podemos instalar mediante ->

Código
  1. sudo apt-get install g++

Una vez instalado todo simplemente escribiremos nuestra primera extensión de Python

Código
  1. #include "Python.h"
  2. #include "iostream"
  3.  
  4. static PyObject* Operacion_Suma(PyObject* self, PyObject* args)
  5. {
  6. float num1,num2;
  7. float resultado;
  8. std::cout << "Inserte dos numeros separados por un espacio en blanco para realizar una suma.\n";
  9. std::cin >> num1;
  10. std::cin >> num2;
  11. resultado = num1 + num2;
  12. std::cout << "El resultado de la suma " << num1 << " + " << num2 << " es = " << resultado;
  13.  
  14. Py_RETURN_NONE;
  15. }
  16.  
  17. static PyObject* Operacion_Resta(PyObject* self, PyObject* args)
  18. {
  19. float num1,num2;
  20. float resultado;
  21. std::cout << "Inserte dos numeros separados por un espacio en blanco para realizar una resta.\n";
  22. std::cin >> num1;
  23. std::cin >> num2;
  24. resultado = num1 - num2;
  25. std::cout << "El resultado de la resta " << num1 << " - " << num2 << " es = " << resultado << std::endl;
  26.  
  27. Py_RETURN_NONE;
  28. }
  29.  
  30. static PyObject* Operacion_Multiplicacion(PyObject* self, PyObject* args)
  31. {
  32. float num1,num2;
  33. float resultado;
  34. std::cout << "Inserte dos numeros separados por un espacio en blanco para realizar una multiplicacion.\n";
  35. std::cin >> num1;
  36. std::cin >> num2;
  37. resultado = num1 * num2;
  38. std::cout << "El resultado de la multiplicacion " << num1 << " * " << num2 << " es = " << resultado << std::endl;
  39.  
  40. Py_RETURN_NONE;
  41. }
  42. static PyObject* Operacion_RaizCuadrada(PyObject* self, PyObject* args)
  43. {
  44. float num1;
  45. float resultado;
  46. std::cout << "Inserte un numero para calcular la raiz cuadrada.\n";
  47. std::cin >> num1;
  48. resultado = sqrt(num1);
  49. std::cout << "El resultado es = " << resultado;
  50.  
  51. return Py_BuildValue("f",resultado);
  52. }
  53.  

Como observáis, el código comienza importando la librería "Python.h" la que ya incluye dentro de ella librerías como -> limits.h, string.h, stdlib.h, stdio.h, Entre otras, yo también importado "iostream" para hacer el codigo de C++, seguimos y declaramos una función de tipo puntero static PyObject la cual almacenara una dirección en memoria que luego sera llamada desde el Interprete de Python, si queremos pasar argumentos al invocar nuestra función en Python debemos especificar ->
Código
  1. if(!PyArg_ParseTuple(args,"ff",&num1,&num2))
  2. return NULL;
donde "ff" es el tipo de dato, ya sea int, string, char, float, double. (Información mas especifica podéis encontrarla en la documentación de la API), si seguimos observando el código podemos observar la funcion de retorno de tipo
Código
  1. Py_RETURN_NONE
la cual no devolverá nada al finalizar la función. Podemos definir tantas funciones como queramos todas siempre llamadas
Código
  1. static PyObject* NombreFuncion(PyObject* self, PyObject* args)
  2.  
Podemos fijarnos que hay un método con una función que si nos va a devolver un valor al finalizar la función y este es
Código
  1. return Py_BuildValue("f",resultado);
le especificamos la f de flotante y el dato del mismo tipo siempre, que queremos devolver al finalizar la función.

Ya tenemos uno, dos o siete funciones en nuestra librería para Python, ahora lleva la parte de definirlas en una lista, en la cual definiremos un nombre, invocaremos la función, y definiremos una descripción.

Código
  1. static PyMethodDef OperacionMethods[]=
  2. {
  3. {"Suma",Operacion_Suma,METH_VARARGS,"Realiza una suma de dos numeros."},
  4. {"Restar",Operacion_Resta,METH_VARARGS,"Realiza una resta de dos numeros."},
  5. {"Multiplicacion",Operacion_Multiplicacion,METH_VARARGS,"Realiza una multiplicacion de dos numeros."},
  6. {"Raiz",Operacion_RaizCuadrada,METH_VARARGS,"Calcula la raiz cuadrada."},
  7. {NULL,NULL,0,NULL}
  8. };

Si podemos ver la lista, observamos en la primera que hemos dado nombre a la función, ese mismo nombre, "Suma", "Restar", etc... Sera el identificador mediante el cual podremos hacer uso de dicha funcion en Python, seguidamente ingresamos el nombre de la funcion, seguido de METH_VARARGS, y una pequeña descripción, como paso obligatorio para no generar diversos errores en la construcción de nuestro programa deberemos pasarle los parámetros ->
Código
  1. {NULL,NULL,0,NULL}
.

Entonces sabemos que ->
Código
  1. static PyObject* NombreFuncion(PyObject* self, PyObject* args)
  2. {
  3. //Aqui las variables, constantes, estructuras, etc...
  4.        int var;
  5.        struct Persona personas;
  6.  
  7.     if(!PyArg_ParseTuple(args,"i",&var))  //En caso de querer pasar argumentos a la hora de invocar, donde "i" es el tipo de dato y & operador direccion de apunta a la variable en Python.
  8. return NULL;
  9.  
  10. //Aqui todas las instrucciones
  11.  
  12. Py_RETURN_NONE;
  13. }
  14. static PyMethodDef IdentificadorMethods[]=
  15. {
  16. {"IdentificadorParaPython",NombreFuncion,METH_VARARGS,"Realiza una suma de dos numeros."},
  17. {NULL,NULL,0,NULL}
  18. };
  19.  
  20.  
  21.  

Y para finalizar solo quedaría iniciar todas las funciones pasadas por lista, es recomendable utilizar una extensión para funciones que tengan relación entre si, no crear librerías con funciones dedicadas a tareas muy distintas entre si, pues crearíamos confusión al usuario y a nosotros mismo.
Es decir una librería para funciones de flujo, y otra para funciones de operaciones matematicas por ejemplo.

Código
  1. PyMODINIT_FUNC initOperacion(void)
  2. {
  3. (void)Py_InitModule("Operacion",OperacionMethods);
  4. }
  5.  
Aqui iniciamos todas las funciones, vendria a ser el main de un programa sin API.
Código
  1. PyMODINIT_FUNC initOperacion(void)
  2. {
  3. (void)Py_InitModule("NombreParaPython",IdentificadorMethods);
  4. }
  5.  

Con esto tendriamos definida una extension en C o C++, en este caso C++, pero ahora quedaria definirla en un archivo .py para poder construirla y instalarla.
Código
  1. from distutils.core import setup, Extension
  2.  
  3. module = Extension('Identificador',sources = ['modulo.cpp'])
  4.  
  5. setup (name = 'Operaciones',
  6.       version = '1.0',
  7.        author = 'RayBanBOY',
  8.        description = 'Calculadoras',
  9. ext_modules = [module])

Y ya estaria listo para ser usado, simplemente ejecutamos dentro de la carpeta donde se encuentras los dos archivos ->

Código
  1. python setup.py build
  2. python setup.py install
Y como extra os dejo con un script de python que hace uso de esta extension ->
Código
  1. from distutils.core import setup, Extension
  2.  
  3. module = Extension('Operacion',sources = ['modulo.cpp'])
  4.  
  5.  
  6. setup (name = 'Operaciones',
  7.       version = '1.0',
  8.        author = 'RayBanBOY',
  9.        description = 'Calculadoras',
  10. ext_modules = [module])
Código
  1. import Operacion as calc
  2.  
  3. if __name__ == "__main__":
  4.   print('Ingrese un numero para operar.\n')
  5.   print('\t1(Suma), 2(Resta), (3Multiplicacion), 4(Raiz Cuadrada).\n')
  6.   operando = int(input())
  7.  
  8.   if operando == 1:
  9.      calc.Suma()
  10.      print('\n')
  11.   elif operando == 2:
  12.      calc.Restar()
  13.      print('\n')
  14.   elif operando == 3:
  15.      calc.Multiplicacion()
  16.      print('\n')
  17.   elif operando == 4:
  18.      calc.Raiz()
  19.      print('\n')
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  

La documentación y mas detalles lo podéis encontrar en mi canal de YouTube.
Gracias por tu tiempo y ayúdame a seguir mejorando.
2  Foros Generales / Foro Libre / Re: ¿Podría el inglés convertirse en el único idioma sobreviviente? en: 26 Diciembre 2019, 18:57 pm
Ahhhh me he vuelto a confundir, como siempre habla de Youtube Argentina y de Argentina en general... pero solo vive allí. De todas formas, muchas veces dice "la concha de..." y cosas típicas argentinas.

Y que mas da? Si son dialectos como el Austriaco del Aleman, el Suizo del Aleman, y el Holandes del Aleman
3  Foros Generales / Foro Libre / Re: ¿Podría el inglés convertirse en el único idioma sobreviviente? en: 26 Diciembre 2019, 10:06 am
Dejate de tonterias que el acento Ingles dan ganas de arrancarse los pelos, no por que sea dificil por que lo hablo y frances, ya que me voy a Suiza y aprender Aleman alli.
Pero el Ingles es la cosa que mas mal huele de todo el planeta, prefiero que el idioma universal sea el Japones antes que ese SIDA de acento pa la garganta....
4  Foros Generales / Foro Libre / Re: Pablo Iglesias pierde juicio: sí recibió dinero del régimen de Venezuela en: 26 Diciembre 2019, 10:02 am
Aqui cada partido tiene lo suyo.
5  Foros Generales / Foro Libre / Re: Al final, ¿dónde y cuándo nació Jesús? en: 26 Diciembre 2019, 09:55 am
Creo que os falta cultura babilonica y sumeria
6  Programación / Programación General / Re: Creacion de un juego en: 27 Noviembre 2019, 15:55 pm
Bujajajj casper ni tu mismo chanelas lo que quieres decir primiyo
7  Seguridad Informática / Hacking Wireless / Re: Novato tratando de usar kali Linux en: 22 Noviembre 2019, 12:25 pm
No y es complicado que te salga a no ser que estés ejecutando una tarjeta de red en USB puesto que es una VBox y Kali Linux tiene sus bugs, realiza desde opciones avanzadas en arranque y recovery mode,
Código:
apt-get update && apt-get upgrade
asi actualizas tu Kali Linux y su contenido, luego prueba con WireShark y veras como capturas paquetes.

Por si acaso cierra kali linux, en
Código:
Configuracion -> Red 
y creas una conexión de tipo puente.

Siguiendo estos pasos debería de capturarte paquetes vía inalambrica y cableada.
Espero que te funcione y igual que le funciono a todos los que le dije en su Vbox.
8  Seguridad Informática / Hacking / Re: INSTALAR KALI LINUX en: 22 Noviembre 2019, 12:17 pm
Estimad@s
Llevo dias intentando instalar kali linux en mi computador de escritorio, todo bien al inicio, pero cuando llega el  momento de configurar la red se queda pegado. La descarga del Sistema operativo la hice desde la página oficial de kali linux. Intenté instalar a través de un DVD y Pendrive, el mismo resultado en las dos opciones.

Mi equipo es un genérico (armado por mi) con un procesador Intel Core Quad CPU 2.66GHz  2.67GHz, 8 gb Memoria RAM DDR2 SDRAM, Tarjeta de Red Realtek PCIe FE Family Controller. TAP Windows Adapter V9. Windows 10 Enterprise Professional de 64 bits
Cualquier ayuda es bienvenida

Mi recomendación y la mas sincera, es, instala Windows o otra distro de Linux a poder ser, en este caso de Debian, pero a poder ser, la distro mas estable de Linux. Y seguidamente instalara el Virtual Box, o instalas Windows 10 pro y activas Hyper-V y ejecutas ahi tu kali linux con mejor rendimiento.
9  Foros Generales / Foro Libre / Re: California le gustaria independizarse de EEUU en: 22 Noviembre 2019, 12:13 pm
Cada uno al que le sea conveniente independizarse. Estado/provincia, ciudad/pueblo, barrio, o cuadra.

¿Quienes son y cuando les conviene?
1- No lo sé, cada uno sabrá, yo por ejemplo quisiera que en mi cuadra nos independizáramos de nuestro país, que nos gobernemos entre nosotros sin pagar a otros que no hacen lo que queremos ni pagar por tantas cosas que no nos interesan. No puedo hablar por otras personas, pero debe de haber varios que preferirían ser gobernados por X por ejemplo, y no por Y, pero como viven en una zona forzozamente con otros, deben ser gobernados por quien votó la mayoría. Lo lógico es que cada uno sea llevado a un sitio acorde a las leyes con las que ellos quiera vivir. Y esto es aún más lógico si en cierta zona prefieren a X en vez de a Y. ¿Por qué si en esa zona quieren a X, gobierna Y?
2- Respondo abajo.
 ¿Cuántos casos hubo y por qué no han salido bien?
Si lo hace un rey, duque, ministro, etc, simplemente porque él quiere, entonces probablemente salga mal.
Si se hace porque sus pobladores quieren, tal vez igual, pero al menos sería ético en ese sentido, en que obedece a la mayoría de sus pobladores.

Les conviene básicamente cuando la mayoría están de acuerdo en una cosa pero les están imponiendo otra, probablemente porque están quitándoles recursos o en cierta medida esclavizándolos.

Habrá casos complejos como ¿Palestina? No tengo mucha idea.

En mi país ocurre algo así a nivel barrial pero es para mal, o sea, por ejemplo arrojan piedras a las ambulancias que van ahí, se dice que son gente que quiere robar, y sino pues no se entiende su intento de aislarse o qué esperan conseguir con eso.
Cuando hablo de independizarse me refiero a tratar de vivir bien sin joder a otros. Obviamente podría implicar trabajar en otro lado, por lo tanto intentar traer recursos de otro lado, pero de una forma legal, permitida, normal, como que una sirvienta trabaje en tu casa, le pagues y entonces se lleve eso pagado.
No es independizarse para que ahí sea legal violar niños o vaya uno a saber que cosas. Aunque algunas cosas consideradas malas por otros, como el aborto, sí podrían legalizarse ahí si la gente quiere, como en cualquier otro lado. Dónde estaría el límite de lo posible o permisible, no lo sé. Pero en medio oriente tratan a las mujeres casi como objetos aunque en general nadie de afuera esté de acuerdo. Así que lo que planteo no sería tan raro.
 Soy latino xD la mayoría nos independizamos de España, tal vez estaríamos mejor gobernados por uds, o tal vez nos pareceríamos más a los africanos. Como sea, es mejor que cada uno se maneje a si mismo y pida ayuda si lo desea.
 Eso es porque los privilegiados no quieren perder su condición, o porque los otros se vuelven demasiado avariciosos. De nuevo habrá casos más complejos que no sé bien, pero básicamente no hay problema si todos entienden lo básico (que cada conjunto de pobladores tiene derecho a autogobernarse en tanto no se pongan a hacer cosas que afecten directamente a los demás), el respeto mutuo.
 Al que lo compró o que se instaló 1ero; al que lo habita en caso de que se instaló pero luego no pudo volver (hablo de sitios como la Antártida o la luna).
 Esto no lo entendí bien. California es de los californianos, por ejemplo. No pueden los demás decir "no, son de nosotros, háganos caso".
 Me perdí un poco en lo de propia, supongo que te refieres a conseguirla tan barata como la de la otra nación, porque en tu ejemplo dijiste que la producíamos.
También puede haber casos en que no, por ejemplo en este barrio no sabríamos producir computadoras...
A ver, si para comerciar con A tienes que pasar por B y esos te cobran dinerales de peaje, se complica, sin duda, pero ¿quién crees que tiene la culpa? ¿tú por no ser parte de B, o B por cobrar demasiado? No caigo en eso de que la humanidad es bondadosa, pero tampoco puedo dejar de querer algo sólo porque puede haber alguien que se haga el vivo. En un mismo país puede haber gente que no quiera cierta nueva fábrica o nuevo basural en su territorio, la situación es más o menos la misma, aunque ahí se recurriría a la policía o jueces del país, mientras que en los otros casos se debería recurrir a otros países u organizaciones internacionales. Tampoco es que sea una solución infalible, pero bue. Igual hoy en día hay helicópteros, si te cobran por pasar uno por encima del país o si lo derriban ya es de quisquillosos o locos, y nada se puede hacer contra eso salvo darles una paliza... ¿no?
Hay países que no tienen ciertos recursos, los compran a otros, es lo que hay.
Se debería querer algo más elevado que "obtener cosas para mi gente". Respetar ciertos valores debe primar.
 En lo último que dijiste ya se ha caído xD
 Suena bonito pero en el fondo no veo las razones de por qué sería bueno.
Recuerdo que alguna vez mi madre me planteó eso, que no debería haber países, yo era niño y no recuerdo qué pensé, pero probablemente estuve de acuerdo.
Ahora bien, fui observando que había parejas que se llevaban mal y vivían juntas ¿por qué no vivían en distintas casas, pensaba yo? Porque no hay dinero, vale. Tampoco recuerdo los motivos de las discusiones, pero en fin.
Luego empezó a molestarme el humo que hacían algunos vecinos al quemar basura. ¿Por qué yo tengo que respirar el humo que hacen ellos? ¿por qué en mi país no existen leyes que me permitan respirar tranquilo? Yo debería vivir en una zona donde pueda hacer eso, y ellos en otra donde puedan hacer lo suyo. Esto lo fui extendiendo: Poner música alta, pagar a X para que haga las leyes, robar... Cada uno que haga lo que quiera, pero en su zona, que no es simplemente su casa. En otras zonas no.
Probablemente había visto la película "El demoledor", tal vez en España conocida con otro nombre. Muestra 2 tipos de personas viviendo felizmente (según mi opinión) cada una en un lugar distinto. Unos vivían casi como salvajes, mientras que los otros eran tan "educados" que en vez de tener sexo físico lo tenían a través de cascos. Obviamente eran 2 extremos más o menos igual de locos (bah, de nuevo es mi opinión, tal vez muchos crean que el "salvaje" es el normal o correcto, no me acuerdo mucho de cómo era, pero tal vez las ratas andaban por ahí como si nada), pero no tiene por qué ser tan así, ya di ejemplos de distintas personas que quieren ser gobernadas por distintos tipos, la diferencia entre bueno y malo no siempre es clara. Ese es otro de los motivos por los que me gusta esto. Antes estuve entre medio de pensar "hay unos valores morales correctos que deben acatarse" ¿y yo los sé o no? o no los hay. Bueno, creo que sí los hay, pero no me parece bien andar de iluminado exigiendo a todos que hagan lo que me parezca bien, por lo tanto dejo que cada uno haga lo que quiera, pero en zonas donde sea legal, fuera no, entonces cada uno tiene su zona, el que se queje es de quisquilloso, avaricioso, etc. Por ejemplo, seguramente los ladrones querrán robar a zonas ricas, no querrán robarse entre ellos, así que no estarán contentos, pero bueno, es culpa de sus gustos ¿no? Al menos los dejo más libres de lo que los dejan en prisión. Me refiero a gente que no quiera rehabilitarse, si quieren ya es otro tema.
También está la cuestión de que te portes bien y sin embargo te tomen el pelo, por ejemplo en un colegio. No es que me haya ocurrido tanto (hubo un año en que sí pero porque me vinculaba a X que se vinculaba con ellos, y yo no quería estar sólo así que soportaba), pero siento que me influyó. ¿Por qué tengo que convivir con gente así? No pido que cambien sus costumbres como si las mías fuesen mejores, sólo que nos alejen.

Ahora, encima, tengo unos vecinos con un perro que a veces ladra hasta cuando soplo la comida. Muchos me creerán loco, pero sí, me molesta, cada vez que abro la puerta es muy probable que ladre, y cuando vuelvo y uso el teclado, o por gran variedad de cosas, el perro furioso, me enfurece a mí. Y nadie quiere o puede hacer nada. Bueno, de hecho tras insistir mucho logré que nos reunieran a mí y a los vecinos, acordamos que pondrían al perro en otro lado a veces, cosa que en unas 2 semanas sólo han hecho 1 vez que yo sepa, protesté y me dijeron que espere 2 meses, pero estoy con esto desde mucho más.
Entonces, yo quisiera vivir en un sitio donde a perros así se los libere, o que sea obligatorio pasearlos, no tenerlos encerrados todo el día en un fondo, y bue, en cuanto a los "jueces" no sé bien qué decir, pero que sean mejores.

Todos saben que la mayoria de los paises Latinosamericanos viven de las pagas que hacen los Estados Unidos, al menos en paises como Honduras, Puerto Rico, etc...
10  Foros Generales / Foro Libre / Re: California le gustaria independizarse de EEUU en: 22 Noviembre 2019, 12:10 pm
Movimientos separatistas han existido siempre en todo el mundo, esto no es solo un tema actual. Por otra parte, las bases de comparación entre el movimiento separatista de Cataluña y el que citas de California no creo que sea una comparación muy acertada en mi opinión. Ambos estados tienen su propio fondo historico y sus motivos, luego no me voy a meter en cuales motivos pesan mas o son mas legitimos, eso ya cada quien piense y opine por si mismo, solo puedo decir que en este momento existen mas californianos que quisieran separarse de California que de la Union.

Por que cataluña, galicia y pais vasco entre otros del norte, siempre han sido otro tipo de Autonomía y por eso en la Constitución de 1978 se las aprobó como Comunidad Autónoma, tenian ambito legistativo y administrativo aunque no jurisdiccional por eso España no es una Estado Federal y por que hay Monarquía, entre eso se quisieron sumar todas las demás Comunidades Autónomas y bueno de ahi que se copiaron ellos ya se cabrearon y todo su follón, pero realmente nunca han sido Independientes en si, aunque todos saben que España antes era Iberia, Hispania y a tenido muchos dominios. Aunque que es la tierra? Si se quieren montar su país, otros muchos lo han echo, que lo hagan.
Páginas: [1] 2 3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines