Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Pyison — Tarpit Pythonic para crawlers de IA | Kitploit
Herramientas/GitHubGitHub/jonaslong/pyison
Herramientas DefensivasScripting y AutomatizaciónSeguridad WebAprendizaje y EducaciónCrawlerAnti-Bot
GitHubjonaslong/pyison

Pyison

Tarpit Pythonic para crawlers de IA

Ver Repositorio
12224hace 11 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Pyison

Pyison es un tarpit para rastreadores web de IA

Introducción

  • Como todos los rastreadores web, los bots de IA solicitan páginas a los servidores web y luego siguen los enlaces de la página a otras páginas. Al hacer esto, pueden construir un índice de todo un sitio web.
    • Sin embargo, a diferencia de otros rastreadores web, los bots de IA presentan algunos problemas particulares
      • Los administradores de servidores pueden configurar un archivo robots.txt, que indica a los rastreadores web qué páginas deben y no deben rastrear.
        • Se ha descubierto que algunos rastreadores de IA ignoran este archivo. Existen preocupaciones de privacidad y derechos de autor al permitir que estos bots utilicen los datos de un sitio web para entrenar LLMs, especialmente cuando el usuario ha optado explícitamente por excluirse del rastreo.
        • Algunos rastreadores también ignoran la limitación de velocidad. Cuando solicitan páginas lo más rápido posible, pueden generar una carga significativa en un servidor web.
    • Aquí entra Pyison. Al igual que otros tarpits para rastreadores de IA (Nepenthes, Iocane), Pyison alimenta a los rastreadores web con una lista interminable de enlaces a otras páginas de su sitio. Esto atrapa a los rastreadores en un único sitio, donde navegarán sin fin por un mar de enlaces en constante crecimiento.
      • Mantener a los rastreadores de IA atrapados en un solo lugar evita que indexen otras partes del sitio que el propietario podría no querer alimentar a los LLMs.
      • Al mismo tiempo, estas páginas pueden contener toneladas de texto inútil. Cuando los LLMs incorporan este texto a sus modelos, pueden ser gradualmente "envenenados", ya que la entrada aleatoria hará que sus respuestas sean menos coherentes.

Motivaciones

  • Crear software útil para hacer frente al aumento del robo de contenido por parte de los LLMs
  • Resolver problemas en los tarpits de IA existentes:
    • Generar texto aleatorio sin usar una cadena de Markov, LLMs ni muestras de escritura existentes
    • No distinguir a los bots de IA por la cabecera User-Agent, ya que los rastreadores suelen disfrazarse de usuarios normales
    • Diseñar un sitio realista parecido a un blog para evitar ser detectado
      • Crear un framework extremadamente personalizable que permita una configuración adicional
    • Proporcionar una solución que pueda integrarse fácilmente en un sitio web existente
      • Compatible con proxies inversos/servidores web específicos pero no los requiere; ofrece configuración de sub-ruta con un ajuste de document root
    • Ejecutarse con una huella pequeña en lugar de un CMS completo o un servidor web repleto de funciones

Especificaciones técnicas

  • Este proyecto ejecuta un servidor web dinámico utilizando la biblioteca HTTPServer de Python
  • Las frases se generan con una mezcla 50/50 entre palabras inglesas aleatorias y "palabras vacías"
  • Pyison utiliza una sal global junto con la URL de la página para alimentar su RNG. Esto garantiza que, si los rastreadores realizan una "comprobación de cordura" recargando una página, esta será la misma que la última vez que la comprobaron. Al mismo tiempo, diferentes servidores deben usar diferentes semillas globales para que no todos los sitios que usan Pyison tengan el mismo aspecto.
  • Es posible generar un número ilimitado de páginas, ya que Pyison no crea realmente ningún archivo permanente. Es un servidor web dinámico, por lo que solo genera html y lo envía al cliente.
  • El uso de etiquetas de contenido HTML, formato CSS e imágenes debería hacer que el sitio parezca un poco más realista para un rastreador.
  • Es posible configurar la salida de Pyison sin reescribir el programa, modificando los archivos de configuración, estáticos y de plantilla.
  • Pyison responde a solicitudes POST y PUT errantes con un 404 en caso de que los rastreadores comprueben si esos verbos HTTP están configurados.

Primeros pasos

  • Clona este proyecto en una carpeta local

  • Cambia los ajustes en el archivo config/config.json

    • ¡Establece el random-seed a un número aleatorio!
    • Establece el número de port que usará el servidor
    • Consulta la sección Configuración para más información
  • (Opcional pero recomendado) Actualiza la plantilla HTML, el CSS, las imágenes y el robots.txt a tu gusto

    • Este proyecto es más efectivo si las páginas se ven diferentes, lo que se puede lograr variando la estructura HTML y CSS. Reordena y renombra algunas cosas, o reescríbelo por completo.
  • (Opcional) Edita el robots.txt si quieres cambiar qué bots se ven afectados

  • Configura el entorno del servidor con cualquiera de los métodos siguientes

  • Coloca el servidor detrás de un proxy inverso

    Ejecución local

    • Instala nltk
      • pip install nltk
    • Ejecuta Pyison
      • python3 src/server.py
    • Comprueba que se está ejecutando
      • Abre http://localhost:<your port number> en un navegador

    Docker

Proxy Inverso

Es muy recomendable que uses un proxy inverso para servir este contenido. Puede reducir la carga del servidor al almacenar páginas en caché e introducir límites de velocidad, además de servir el contenido a través de https y proteger contra algunos exploits básicos de servidores web.

Consideraciones

  • Estos ejemplos usan Nginx Proxy Manager, pero cualquier software de proxy inverso debería funcionar
  • Pyison es compatible con los ajustes SSL más estrictos de NPM
  • NPM debería pasar la cabecera http User-Agent de NPM al servidor Pyison sin ninguna configuración especial. Usa proxy_pass_header User-Agent; si es necesario.

Configuración de subdominio independiente

  • Selecciona los siguientes ajustes en la interfaz, o introduce los ajustes equivalentes en el archivo de configuración:

    La interfaz del proxy inverso NGINX. El diálogo "Editar Proxy Host" está abierto.
    • Nombres de dominio: un dominio o subdominio que controles, como tarpit.example.com
    • Esquema: http
    • Hostname / IP de reenvío: localhost, o el nombre del contenedor docker si usas una red docker
    • Puerto de reenvío: el puerto definido en docker-compose/el comando run/config.json (por defecto es 80)
    • Activa Cache Assets y Block Common Exploits, pero no Websockets Support

Configuración de sub-ruta

  • Para usar Pyison en una sub-ruta, usa la siguiente configuración de ubicación

    root@kitploit:~
    # Handles the root page ("example.com/tarpit")
    location /tarpit {
        proxy_pass http://localhost:80;
    }
    
    # Handles all sub-pages ("example.com/tarpit/a" and "example.com/tarpit/a/b")
    location /tarpit/ {
        proxy_pass http://localhost:80;
    }
    
    # Handles all urls with a 3-letter file extension ("example.com/tarpit/style.css" and "example.com/tarpit/images/picture.jpg")
    # Note that the ~ denotes regex matching. The string immediately following it must be a valid regex statement.
    location ~ .*\/tarpit\/.*\....$ {  
        proxy_pass http://localhost:80;
    }
    
  • Aquí tienes una configuración funcional usando la interfaz:

    La interfaz del proxy inverso NGINX. El diálogo "Editar Proxy Host" está abierto en la pestaña "Ubicaciones personalizadas".
    • El primer bloque de ubicación, /tarpit, no tiene configuración personalizada. Se comportará como el primer bloque de ubicación definido anteriormente.
    • El segundo bloque de ubicación, /tarpit/, contiene el segundo y el tercer bloque de ubicación definidos anteriormente
    • Reemplaza tarpit con la ruta raíz deseada.
      • Si usas una ruta raíz más profunda como /tar/pit, ten en cuenta que el tercer bloque de ubicación usa expresiones regulares, por lo que cualquier barra debe escaparse con una barra invertida

Configuración

  • El archivo config.json define varios ajustes para una personalización sencilla:
  • port (por defecto 80)
    • El puerto en el que se servirá el contenido
  • random-seed (¡Por favor, cámbialo!)
    • Semilla global (sal) utilizada para asegurar que no todos los servidores web tengan exactamente el mismo texto
    • Establécelo a un número aleatorio, no necesita ser seguro
  • document-root (por defecto "/")
    • Antepone una ruta a los enlaces
    • Solo necesitarás cambiar esto si estás usando un proxy inverso y sirves contenido en un subdirectorio
      • Si es el caso, usa una ruta completa o una relativa a la raíz
        • es decir, https://example.com/pyison/ o /pyison/
  • fake-image-dir (por defecto ["images"])
    • Todas las imágenes parecerán servirse desde esta ruta
    • Acepta una cadena única, null, o una lista de opciones para elegir aleatoriamente
  • fake-css-dir (por defecto ["css"])
    • Todos los archivos css parecerán servirse desde esta ruta
    • Acepta una cadena única, null, o una lista de opciones para elegir aleatoriamente
  • spacing-characters (por defecto ["_","-","%20"])

Plantillas HTML

  • Antes de servir tu(s) archivo(s) HTML, Pyison sustituirá algunas etiquetas predefinidas por sus propios valores.

    Valores estáticos

    Cuando una de estas etiquetas se especifica varias veces en la plantilla, cada valor será el mismo
    • {HOME}
      • Enlace a la raíz del documento, tal y como se define en la configuración
    • {TITLE}
      • Texto del título de la página, basado en la URL actual
        • p. ej. /blog/about/once-upon-a-time -> Once Upon A Time
    • {UPTITLE}
      • Texto del título de la página principal, generado a partir de la URL actual
    • {MAIN}
      • Debe usarse como contenido principal del sitio. Generará varios párrafos con texto aleatorio, junto con títulos de sección y subtítulos. También pueden aparecer enlaces aleatorios a lo largo de cada párrafo.
    • {UP}
      • Ruta a la página principal
      • p. ej.: /blog/about/once-upon-a-time -> /blog/about
    Cada aparición de estas etiquetas se reemplazará por un valor único

Imágenes

Logotipo de Pyison. Una imagen rectangular orientada horizontalmente con un fondo gris granuloso. Texto verde brillante en una fuente de pincelada con sombra de texto rojo oscuro está centrado en el tercio superior de la imagen. Dice 'Pyison'. Cerca de la parte inferior, un texto blanco anguloso estilizado dice 'Esto es un tar pit para rastreadores web de IA'. Hay artefactos JPEG visibles en toda la imagen al observarla de cerca.

Aquí tienes una muestra de cómo se ve el sitio antes de cualquier edición de la plantilla:

Imagen alejada de una página completa de Pyison. Usa texto negro sobre un fondo amarillo claro. En la parte superior de la página hay una barra de navegación verde con enlaces que contienen palabras aleatorias. Debajo de la barra de navegación está el título 'Home' y una imagen de logotipo que dice 'Pyison: Esto es un tar pit para rastreadores web de IA'. Debajo de las imágenes hay varios párrafos de palabras aleatorias con encabezados en varios niveles de sangría. Estos párrafos ocupan la mayor parte de la página. Algunos textos dentro de los párrafos son enlaces a otras páginas. Cerca de la parte inferior de la página, hay una nota falsa de autor con otro logotipo de Pyison. La nota dice 'Escrito por It'S An'. Debajo hay una sección 'Otras publicaciones', con varios enlaces más.
Descargar herramienta

Con docker compose

  • Crea un archivo docker-compose.yml mínimo que contenga
    root@kitploit:~
    services:
      pyison:
        image: "ghcr.io/jonaslong/pyison:main"
        container_name: pyison
        tty: true
        ports:
          - 80:80
    
  • docker compose up
    • (Opcional) Usa la bandera -d para separarte del contenedor
  • Para que los cambios en los archivos locales tengan efecto, clona este repositorio y usa un bind mount. Consulta el archivo compose completo.

Con docker run

  • docker run --tty --name pyison -p "127.0.0.1:80:80" --rm ghcr.io/jonaslong/pyison:main
    • (Opcional) Elimina la bandera --rm para conservar el contenedor

Compilar desde el código fuente

  • Clona el repositorio localmente
  • docker build -t pyison:latest .
  • Ejecuta el contenedor con docker run --tty --name pyison -p "127.0.0.1:80:80" --rm pyison:latest
  • p. ej.: /tar/pit requeriría location ~ .*\/tar\/pit\/.*\....$ en el tercer bloque de ubicación
  • Actualiza el ajuste document-root de Pyison con la sub-ruta utilizada por el proxy (consulta la sección Configuración)
  • Consulta las secciones anteriores para una configuración adicional de host, puertos, SSL, etc.
  • Espacios a utilizar entre las palabras de una URL de página
  • Esto también afectará a cómo se dividen las URLs de página para decodificarlas de nuevo en títulos
  • unsafe-characters (por defecto ["'","`"])
    • Caracteres que pueden aparecer de forma natural en la lista de palabras pero que deben eliminarse de las URLs
    • Por defecto, esto elimina los apóstrofos (`) y las comillas simples (')
  • robots-txt (por defecto "assets/robots.txt")
    • Esto configura el archivo que se sirve en /robots.txt
    • Si la cadena está vacía, se devolverá una respuesta 404 en su lugar
  • html-templates (por defecto ["assets/template.html"])
    • Archivo HTML a servir, que contiene texto de formato para proporcionar valores aleatorios (consulta Plantillas HTML)
    • Acepta una cadena única, o una lista de opciones para elegir aleatoriamente
  • css-files (por defecto ["assets/style.css"])
    • Archivo(s) CSS a servir
    • No se realiza ninguna sustitución en los archivos CSS
    • Acepta una cadena única, o una lista de opciones para elegir aleatoriamente
  • images
    • ico (por defecto ["assets/logo.ico"])
    • jpg (por defecto ["assets/logo.jpg"])
    • png (por defecto["assets/logo.png"])
    • Para cada una de las extensiones de imagen anteriores: un único archivo de imagen, null, o una lista de imágenes para elegir aleatoriamente
  • remove-from-stop-words
    • La biblioteca nltk tiene una lista de "palabras vacías" que es útil para generar muchas palabras comunes. Sin embargo, algunas entradas no deberían usarse para la generación de texto porque son una pista evidente de que se trata de contenido generado.
  • {CSSLINK}
    • URL aleatoria a un documento CSS
    • La ruta inicial de esta URL (p. ej. /styles) se puede configurar en la configuración
    • Asegúrate de especificar '.css' inmediatamente después de la etiqueta. Así es como el servidor web sabe que debe enviar css en lugar de más html.
      • El documento real devuelto por el servidor se elegirá en función de la(s) página(s) css especificadas en la configuración
  • Valores dinámicos

    • {WORD}
      • Genera una única palabra aleatoria. Los nombres propios pueden tener la primera letra en mayúscula.
    • {NAME}
      • Genera dos palabras con la primera letra en mayúscula y un espacio entre ellas.
    • {SENTENCE}
      • Genera una frase aleatoria que comienza con mayúscula y termina con un punto.
    • {PIC}
      • Genera una URL aleatoria a un archivo de imagen
      • La ruta inicial de esta URL (p. ej. /images) se puede configurar en la configuración
      • Asegúrate de poner una extensión de archivo adecuada después del enlace (.png, .jpg, .ico)
        • La imagen real devuelta por el servidor se elegirá en función de la extensión proporcionada y de la(s) imagen(es) especificada(s) en la configuración
    • {LINK}
      • Genera un enlace aleatorio, que puede contener sub-rutas
      • El nombre de la página puede estar separado por guiones o guiones bajos
      • p. ej.: /dressage/electrochronometer/himself-she-eciliate
    • {OVER}
      • Genera un enlace aleatorio a una página hermana
      • p. ej.: al visitar /neighborliness/wont_unhonest, una etiqueta {OVER} podría reemplazarse con /neighborliness/hooliganism
    • {NEWTITLE}
      • Genera un título aleatorio
      • Utiliza una serie de palabras aleatorias con capitalización de título
      • p. ej.: Nectarial Electrofusion Which Dephosphorization
      • Si esta etiqueta sigue a una etiqueta {LINK} o {OVER}, el título y la URL estarán sincronizados
        • p. ej.: <a href="https://github.com/jonaslong/pyison/blob/main/%7BOVER%7D">{NEWTITLE}</a> podría reemplazarse con <a href="https://github.com/jonaslong/pyison/blob/main/swordmanship/yeller/over-will-oghuz">Over Will Oghuz</a>
        • Las etiquetas se evalúan hacia adelante a lo largo de la plantilla. Una etiqueta {NEWTITLE} buscará hacia atrás la etiqueta {LINK} o {OVER} más cercana para sincronizarse.
          • Las etiquetas siempre se emparejarán correctamente cuando cualquier etiqueta {LINK} o {OVER} vaya seguida inmediatamente de su etiqueta , si se desea un
    {NEWTITLE}
    {NEWTITLE}