Parte: 0 — Fundamentos y prerrequisitos · Fuente: Seitz & Arnold, Black Hat Python (2ª ed.) ⏱️ Duración estimada: 120 min · Nivel: Fundamentos
Adquirir la base de Python necesaria para escribir herramientas de seguridad: tipos, estructuras de datos, control de flujo, funciones, manejo de archivos y excepciones. Python es el lenguaje franco de la ciberseguridad ofensiva y defensiva, y esta clase asienta lo que usarás en sockets y Scapy.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Tipos y variables | str, int, bytes, bool |
| 2 | Estructuras de datos | list, dict, set, tuple |
| 3 | Control de flujo | if, for, while, comprensiones |
| 4 | Funciones y módulos | Reutilización y organización |
| 5 | Archivos | Leer logs, escribir informes |
| 6 | Excepciones | Robustez ante fallos |
| 7 | Librería estándar | os, sys, subprocess, argparse, hashlib |
| 8 | Entornos virtuales | Aislar dependencias con venv/pip |
bytes; conviértelos con .encode()/.decode().[f(x) for x in it if cond]. Clave: transforma y filtra en una línea.try/except. Clave: evita que un fallo de red tumbe todo el script.Necesitas Python 3 (ya en Kali) y un editor (VS Code recomendado con la extensión de Python). Crea un entorno virtual por proyecto:
python3 -m venv venv && source venv/bin/activate
pip install requests
Familiarízate con el REPL (python3) para experimentar y con pip para instalar librerías.
python
b = "admin".encode(); print(b, b.hex(), b.decode())
collections.Counter.python
with open("app.log") as f:
errores = sum(1 for line in f if "error" in line.lower())
print(f"Errores: {errores}")
contar_patron(ruta, patron) y llama desde main().try/except FileNotFoundError para fallar con gracia.python
import argparse
p = argparse.ArgumentParser()
p.add_argument("ruta"); p.add_argument("--patron", default="error")
args = p.parse_args()
/etc/passwd.argparse, incluyendo --help y un argumento opcional.Escribe logstats.py, una herramienta CLI que reciba la ruta de un log y un patrón, y produzca un pequeño informe: total de líneas, líneas coincidentes, top 5 de las IPs más frecuentes (si las hay) y el SHA-256 del archivo. Debe manejar errores de archivo con mensajes claros y tener --help.
Criterio de aceptación: ejecutar python3 logstats.py --help muestra el uso; corriendo sobre un log real produce el informe correcto; y ante un archivo inexistente termina con un mensaje amable y código de salida ≠ 0. El SHA-256 coincide con el de sha256sum.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
TypeError: a bytes-like object is required |
Mezclas str y bytes. Convierte con .encode()/.decode(). |
UnicodeDecodeError al leer un archivo |
Codificación distinta. Abre con encoding='utf-8', errors='replace' o en modo binario. |
| El script modifica el Python del sistema | No usaste venv. Crea y activa un entorno virtual por proyecto. |
IndentationError |
Mezcla de tabs y espacios. Usa 4 espacios de forma consistente. |
| El programa peta ante entradas raras | Falta manejo de excepciones. Envuelve E/S y parseo en try/except. |
❓ ¿Python 2 o 3? Solo Python 3. Python 2 está fuera de soporte desde 2020; todo el material ofensivo moderno usa 3.
❓ ¿Por qué str vs. bytes es tan importante en seguridad? Porque sockets, criptografía y protocolos binarios trabajan con bytes. Confundirlos es la causa nº1 de errores en herramientas de red.
❓ ¿Necesito venv para todo? Es una buena práctica: aísla dependencias, facilita reproducibilidad y evita romper herramientas del sistema que dependen de Python.
❓ ¿Cuándo usar subprocess en vez de librerías? Para invocar herramientas externas (nmap, etc.). Cuando exista una librería nativa (requests, socket), prefiérela: es más segura y controlable.
argparse tutorial — https://docs.python.org/3/howto/argparse.htmlClase 014 — Direccionamiento IP y subnetting
Clase 016 — Python para seguridad: sockets y programación de red