Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Pyison — Pythonic AI crawler tarpit | Kitploit
工具/GitHubGitHub/jonaslong/pyison
Defensive ToolsScripting & AutomationWeb SecurityLearning & EducationCrawlerAnti-Bot
GitHubjonaslong/pyison

Pyison

Pythonic AI crawler tarpit

查看仓库
122210个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Pyison

Pyison 是一个针对 AI 网络爬虫的蜜罐陷阱

简介

  • 与所有网络爬虫一样,AI 机器人会向网页服务器请求页面,然后跟随页面上的链接访问其他页面。通过这种方式,它们可以构建整个网站的索引。
    • 然而,与其他网络爬虫不同,AI 机器人会带来一些独特的问题
      • 服务器管理员可以配置 robots.txt 文件,告知爬虫哪些页面应该爬取,哪些不应该。
        • 已发现某些 AI 爬虫会忽略此文件。允许这些机器人使用网站数据训练 LLM 存在隐私和版权问题,特别是当用户已明确选择退出爬取时。
        • 某些爬虫还会忽略速率限制。当它们尽可能快地请求页面时,可能会给服务器带来显著负载。
    • 现在介绍 Pyison。与其他 AI 爬虫蜜罐(如 Nepenthes、Iocane)类似,Pyison 会向爬虫提供其站点上其他页面的无尽链接列表。这会将爬虫困在单个站点上,使其在永不枯竭的链接海洋中无休止地导航。
      • 将 AI 爬虫困在一个地方,可以防止它们索引网站所有者可能不希望提供给 LLM 的其他部分。
      • 同时,这些页面可以包含大量无意义的文本。当 LLM 将这些文本纳入其模型时,随着随机输入使它们的响应变得不那么连贯,模型会逐渐被"投毒"。

动机

  • 创建有用的软件来应对 LLM 内容盗窃日益增多的问题
  • 解决现有 AI 蜜罐中的问题:
    • 在不使用马尔可夫链、LLM 或任何现有写作样本的情况下生成随机文本
    • 不通过 User-Agent 头部区分 AI 机器人,因为爬虫通常会伪装成普通用户
    • 设计一个逼真的博客风格网站以避免被检测
      • 创建一个高度可定制的框架以允许进一步配置
    • 提供一个易于集成到现有网站的解决方案
      • 支持但不强制要求反向代理/特定 web 服务器,通过文档根设置提供子路径配置
    • 与整个 CMS 或功能丰富的 web 服务器相比,占用较小资源运行

技术规格

  • 该项目使用 Python 的 HTTPServer 库运行一个动态 web 服务器
  • 句子由随机英语单词和"停用词"按 50/50 混合生成
  • Pyison 使用全局盐值以及页面 URL 来播种其 RNG。这确保如果爬虫通过重新加载页面进行"完整性检查",页面将与上次检查时相同。同时,不同的服务器应使用不同的全局种子,这样并非所有使用 Pyison 的站点看起来都一样。
  • 可以生成无限数量的页面,因为 Pyison 实际上并不会创建任何永久文件。它是一个动态 web 服务器,只是生成 HTML 并发送给客户端。
  • 使用 HTML 内容标签、CSS 格式和图片应使站点对爬虫来说显得更真实一些。
  • 可以通过更改配置、静态和模板文件来配置 Pyison 的输出,而无需重写程序
  • Pyison 对错误的 POST 和 PUT 请求返回 404,以防爬虫测试这些 HTTP 动词是否已配置

开始使用

  • 将此项目克隆到本地文件夹

  • 更改 config/config.json 文件中的设置

    • 将 random-seed 设置为一个随机数!
    • 设置服务器使用的 port 号
    • 更多信息请参阅配置部分
  • (可选但推荐)根据需要更新 HTML 模板、CSS、图片和 robots.txt

    • 如果页面看起来不同,此项目会更有效,这可以通过改变 HTML 和 CSS 结构来实现。重新排列并重命名一些内容,或者完全重写。
  • (可选)如果要更改受影响的机器人,请编辑 robots.txt

  • 使用以下任一方法设置服务器环境

  • 将服务器置于反向代理之后

    本地运行

    • 安装 nltk
      • pip install nltk
    • 运行 Pyison
      • python3 src/server.py
    • 检查是否运行成功
      • 在浏览器中打开 http://localhost:<你的端口号>

    Docker

    使用 docker compose

    • 创建一个包含以下内容的极简 docker-compose.yml 文件
      root@kitploit:~
      services:
        pyison:
          image: "ghcr.io/jonaslong/pyison:main"
          container_name: pyison
          tty: true
          ports:
            - 80:80
      

反向代理

强烈建议**使用反向代理来提供此内容。它可以通过缓存页面和引入速率限制来减少服务器负载,同时通过 https 提供内容并防范一些基本的 web 服务器漏洞。

注意事项

  • 这些示例使用 Nginx Proxy Manager,但任何反向代理软件都应可行
  • Pyison 支持 NPM 最严格的 SSL 设置
  • NPM 应该在不需要特殊配置的情况下将 User-Agent http 头部从 NPM 传递到 Pyison 服务器。如有需要,请使用 proxy_pass_header User-Agent;。

独立子域名配置

  • 在 UI 中选择以下设置,或在配置文件中输入等效设置:

    NGINX 反向代理界面。"编辑代理主机"对话框已打开。
    • 域名:你控制的域名或子域名,例如 tarpit.example.com
    • 方案:http
    • 转发主机名/IP:localhost,如果使用 docker 网络则为 docker 容器的名称
    • 转发端口:在 docker-compose/run 命令/config.json 中定义的端口(默认为 80)
    • 启用 缓存资产 和 拦截常见漏洞,但不要启用 Websockets 支持

子路径配置

  • 要在子路径中使用 Pyison,请使用以下位置配置

    root@kitploit:~
    # 处理根页面("example.com/tarpit")
    location /tarpit {
        proxy_pass http://localhost:80;
    }
    
    # 处理所有子页面("example.com/tarpit/a" 和 "example.com/tarpit/a/b")
    location /tarpit/ {
        proxy_pass http://localhost:80;
    }
    
    # 处理所有带有3个字母文件扩展名的 URL("example.com/tarpit/style.css" 和 "example.com/tarpit/images/picture.jpg")
    # 注意 ~ 表示正则匹配。紧随其后的字符串必须是有效的正则表达式。
    location ~ .*\/tarpit\/.*\....$ {  
        proxy_pass http://localhost:80;
    }
    
  • 以下是使用 UI 的工作设置:

    NGINX 反向代理界面。"编辑代理主机"对话框已打开到"自定义位置"选项卡。
    • 第一个位置块 /tarpit 没有自定义配置,其行为与上面定义的第一位置块相同。
    • 第二个位置块 /tarpit/ 包含了上面定义的第二和第三位置块。
    • 将 tarpit 替换为所需的根路径。
      • 如果使用更深的根路径如 /tar/pit,请注意第三位置块使用正则表达式,因此任何斜杠必须用反斜杠转义
        • 例如:/tar/pit 需要在第三位置块中使用 location ~ .*\/tar\/pit\/.*\....$
    • 更新 Pyison 的 document-root 设置,使用代理使用的子路径(请参阅部分)

配置

  • config.json 文件定义了各种用于轻松定制的设置:
  • port(默认 80)
    • 提供内容使用的端口
  • random-seed(请更改此项!)
    • 全局种子(盐值),用于确保并非每个 web 服务器都有完全相同的文本
    • 将其设置为某个随机数,不需要是安全随机的
  • document-root(默认 "/")
    • 在链接前添加路径
    • 只有在使用反向代理并服务于子目录时才需要更改此项
      • 如果是,请使用完全限定路径或相对于根目录的路径
        • 例如 https://example.com/pyison/ 或 /pyison/
  • fake-image-dir(默认 ["images"])
    • 所有图片将显示为从此路径提供
    • 接受单个字符串、null 或一个可随机选择的选项列表
  • fake-css-dir(默认 ["css"])
    • 所有 CSS 文件将显示为从此路径提供
    • 接受单个字符串、null 或一个可随机选择的选项列表
  • spacing-characters(默认 ["_","-","%20"])
    • 页面 URL 中单词之间的分隔符
    • 这也会影响页面 URL 如何拆分以解码回标题
  • unsafe-characters(默认 ["'","`"])
    • 单词列表中可能自然出现但应从 URL 中移除的字符
    • 默认情况下,这会移除撇号 (`) 和单引号 (')
  • robots-txt(默认 "assets/robots.txt")

HTML 模板化

  • 在提供你的 HTML 文件之前,Pyison 会将其预设标签替换为自己的值

    静态值

    当模板中多次指定某个标签时,每个值将相同
    • {HOME}
      • 链接到配置中定义的文档根目录
    • {TITLE}
      • 页面的标题文本,基于当前 URL
        • 例如 /blog/about/once-upon-a-time -> Once Upon A Time
    • {UPTITLE}
      • 父页面的标题文本,从当前 URL 生成
    • {MAIN}
      • 应作为站点的主要内容。它会生成几个包含随机文本的段落,以及章节标题和子标题。每段中也可能出现随机链接。
    • {UP}
      • 父页面的路径
      • 例如 /blog/about/once-upon-a-time -> /blog/about
    • {CSSLINK}
      • 指向 CSS 文档的随机 URL
      • 此 URL 的起始路径(例如 /styles)可以在配置中设置
    每个标签的出现将被替换为唯一的值

图片

Pyison 徽标。一个矩形横向图片,带有颗粒感的灰色背景。亮绿色文字采用画笔字体,带有深红色文字阴影,位于图片顶部三分之一处居中。文字显示为 'Pyison'。靠近底部,风格化的白色角状文字写着 'This is a tar pit for AI webcrawlers'。仔细观察可见整个图片存在明显 JPEG 压缩伪影。

以下是模板未经任何编辑时的站点示例:

一张缩小的整个 Pyison 页面截图。页面使用浅黄色背景上的黑色文字。顶部有一个绿色导航栏,包含随机单词的链接。导航栏下方是标题 'Home' 和一个徽标图片,显示 'Pyison: This is a tar pit for AI webcrawlers'。图片下方是几段随机文字,带有不同缩进级别的标题。这些段落占据了页面的大部分。段落中的一些文字是链接,指向其他页面。靠近页面底部,有一个伪造的作者简介,带有另一个 Pyison 徽标。简介写着 'Written by It'S An'。下方是 'Other Posts' 区域,包含几个更多链接。
下载工具
  • docker compose up
    • (可选)使用 -d 标志从容器中分离
  • 要使本地文件的更改生效,请克隆此仓库并使用绑定挂载。请参阅完整 compose 文件。
  • 使用 docker run

    • docker run --tty --name pyison -p "127.0.0.1:80:80" --rm ghcr.io/jonaslong/pyison:main
      • (可选)移除 --rm 标志以保留容器

    从源码构建

    • 在本地克隆仓库
    • docker build -t pyison:latest .
    • 使用 docker run --tty --name pyison -p "127.0.0.1:80:80" --rm pyison:latest 运行容器
    配置
  • 关于主机、端口、SSL 等的进一步配置,请参阅上文部分
    • 配置在 /robots.txt 提供的文件
    • 如果字符串为空,将返回 404 响应
  • html-templates(默认 ["assets/template.html"])
    • 提供的 HTML 文件,包含格式文本以提供随机值(请参阅 HTML 模板化)
    • 接受单个字符串或一个可随机选择的选项列表
  • css-files(默认 ["assets/style.css"])
    • 提供的 CSS 文件
    • CSS 文件不进行任何替换
    • 接受单个字符串或一个可随机选择的选项列表
  • images
    • ico(默认 ["assets/logo.ico"])
    • jpg(默认 ["assets/logo.jpg"])
    • png(默认 ["assets/logo.png"])
    • 对于上述每种图片扩展名:一个单独的图片文件、null 或一个可随机选择的图片列表
  • remove-from-stop-words
    • nltk 库有一个"停用词"列表,用于生成大量常用词非常有用。然而,某些条目不应用于文本生成,因为它们明显暴露了这是生成的内容
  • 确保在标签后立即指定 '.css'。这是 web 服务器知道发送 CSS 而不是更多 HTML 的方式。
    • 服务器返回的实际文档将根据配置中指定的 CSS 页面选择
  • 动态值

    • {WORD}
      • 生成一个随机单词。专有名词可能大写。
    • {NAME}
      • 生成两个大写单词,之间有一个空格。
    • {SENTENCE}
      • 生成一个随机句子,以大写字母开头,以句点结尾。
    • {PIC}
      • 生成指向图片文件的随机 URL
      • 此 URL 的起始路径(例如 /images)可以在配置中设置
      • 确保在链接后添加适当的文件扩展名(.png、.jpg、.ico)
        • 服务器返回的实际图片将根据提供的扩展名和配置中指定的图片选择
    • {LINK}
      • 生成一个随机链接,可能包含子路径
      • 页面名称可能由破折号或下划线分隔
      • 例如 /dressage/electrochronometer/himself-she-eciliate
    • {OVER}
      • 生成一个指向同级页面的随机链接
      • 例如:访问 /neighborliness/wont_unhonest 时,{OVER} 标签可能被替换为 /neighborliness/hooliganism
    • {NEWTITLE}
      • 生成一个随机标题
      • 使用一系列随机单词,采用标题大写
      • 例如 Nectarial Electrofusion Which Dephosphorization
      • 如果此标签跟在 {LINK} 或 {OVER} 标签之后,标题和 URL 将同步
        • 例如 <a href="{OVER}">{NEWTITLE}</a> 可能被替换为 <a href="/swordmanship/yeller/over-will-oghuz">Over Will Oghuz</a>
        • 标签按模板顺序向前评估。{NEWTITLE} 标签将向后搜索最近的 {LINK} 或 {OVER} 标签以进行同步。
          • 如果任何 {LINK} 或 {OVER} 标签后面紧跟其 {NEWTITLE} 标签(如果需要 {NEWTITLE}),标签将始终正确配对。