作者:yxpil(笔名,可能非本人真实姓名) · © 2026 PILSEOCORE Project。本项目保留作者署名权——使用、修改、分发(含商用)须保留本声明及作者信息;删除/篡改作者声明将被视为违反项目协议。
本地想自己建立搜索引擎?那么一个暴力的搜索全网编制的多线程SEO模块,你可能需要
SEO 自动域名穷举引擎 + 本地搜索引擎 —— 字符集穷举域名 × 后缀大全 × 多DNS随机负载均衡并发探测 × 自动建站 × 本地索引与搜索。纯 Rust 标准库实现,零第三方依赖,单文件 0.7MB。
- 字符集穷举:
1234567890abcdefghijklmnopqrstuvwxyz(数字优先),从 1 位 遍历到用户规定的位数 - 后缀大全:
config/tld.list空格分隔,严格按文件中的顺序遍历 - 335 个 DNS 随机负载均衡(抓取自 dnsdaquan.com 大全):每域名随机抽取 N 个 DNS 并发查询,失败换组重试,避免单个服务器被薅秃
- DNS 健康预检:用冷门域名实测递归能力,剔除"残废"DNS
- 判定规则:任一 DNS 返回记录 = 已注册;其余(含无法判定)均视为可用候选并建站,另存
uncertain.txt追溯 - 手写 DNS 报文构造/解析(qid 全局唯一 + 缓冲区清扫,杜绝响应串扰)
- 自动分析站点:扫描
out/sites/提取标题/描述/关键词,自动生成每个站点的sitemap.xml - 分块倒排索引:按词首字符分 36+1 块持久化,查询只路由加载相关块(懒加载)
- 模糊搜索:中文单字+bigram 分词,编辑距离 ≤ 2 模糊匹配,字段加权排序
- 联想建议:前缀匹配索引词 + 热点查询历史
- 热点缓存:LRU 缓存(默认 1000 条,TTL 60s),重复查询 0ms 命中
- Google 风格 Web UI:彩色 logo、搜索框、联想下拉、结果列表
- 聚合搜索(元搜索):本地索引搜不到时,自动借用必应/百度/360搜索/搜狗/谷歌/中国搜索,每引擎翻页抓取 3 页(不只第一页),结果去重缓存到本地引擎,分页展示;结果自动编入引擎——抓取页面存入 crawled,重建索引后本地即可搜到(不用再等外部引擎);搜狗等引擎的相对路径链接自动补齐为绝对 URL(不会 404);管理后台可启停各引擎、添加自定义引擎(URL 模板
{q}查询词、{p}翻页);engine.conf可配置meta_proxy(如127.0.0.1:7890)使谷歌等经代理可达 - 加载动画:搜索等待时显示旋转动画 + 动态提示(本地无结果自动借外部引擎);管理后台爬虫运行时显示状态动画
- 节日 LOGO:管理后台"前端入口"可上传 SVG/PNG 节日 LOGO(春节/国庆/中秋等),搜索页 Logo 即时替换,更真实的搜索引擎体验
- 站点信息与备案:管理后台"前端入口"可填写站点名称(标题/Logo/页脚同步)、ICP 备案号、公安备案号(工信部/公安部链接),搜索页页脚真实搜索引擎风格展示
- API + 文档:
/api/search、/api/suggest、/api/status、/api/stats、/api/sitemap、/api/rebuild,/api/docs内置完整文档 - MCP 支持:stdio JSON-RPC,工具
search/suggest/status/sitemap/rebuild,AI 客户端可直接调用 - AI 接入:OpenAI 兼容端点(本地 llama-server/Ollama 等),搜索附加 AI 摘要
cargo build --release
# 产物: target/release/pilseocore(.exe) 单文件 0.7MB# ---- 穷举模式 ----
pilseocore --max-len 2 --workers 128 # 穷举到 2 位,128 并发
pilseocore --dry-run --max-len 1 # 只穷举核对顺序(out/dryrun.txt)
pilseocore --check 1.com # 单域名探测注册状态
# ---- 本地搜索引擎 ----
pilseocore index # 扫描站点建索引 + 生成 sitemap.xml
pilseocore serve --port 8896 # 启动搜索引擎(浏览器打开 http://127.0.0.1:8896)
pilseocore search "智能家居" # CLI 搜索
pilseocore mcp # MCP Server(stdio)服务区分两种角色:
| 角色 | 认证 | 权限 |
|---|---|---|
| 普通用户 | 无需认证 | 搜索、联想、状态、站点地图、API 文档、Web UI(只读) |
| 管理员 | 账号密码登录 Web UI,或使用管理员签发的 token | 全部 + 触发穷举遍历、配置后缀/DNS 列表、重建索引、签发/撤销 token |
登录:管理员在 Web UI 点"管理",用 admin_user / admin_pass(engine.conf)登录。
Token 签发:登录后可在管理面板"签发 token"(命名、撤销,存于 data/tokens.json),token 给 API 客户端与 MCP 使用——像 GitHub personal access token。
# 1) 登录拿会话 token
curl -X POST http://127.0.0.1:8896/api/auth/login \
-H "Content-Type: application/json" -d '{"username":"admin","password":"你的密码"}'
# => {"token":"<会话token>",...}
# 2) 签发 API/MCP token
curl -X POST http://127.0.0.1:8896/api/admin/tokens \
-H "Authorization: Bearer <会话token>" -H "Content-Type: application/json" \
-d '{"name":"mcp-server"}'
# => {"token":"<完整token,仅此一次>",...}
# 3) 用签发 token 调用管理 API
curl -X POST http://127.0.0.1:8896/api/admin/scan \
-H "Authorization: Bearer <签发token>" -H "Content-Type: application/json" \
-d '{"max_len":2,"workers":64}'
# 4) MCP 用签发 token 启动(或环境变量 PILSEO_TOKEN)
pilseocore mcp --token <签发token>admin_user/admin_pass 留空则管理功能整体禁用(管理接口返回 403)。
| 键 | 说明 | 默认 |
|---|---|---|
charset |
穷举字符集 | 1234567890abcdefghijklmnopqrstuvwxyz |
min_len / max_len |
起始/最大位数 | 1 / 2 |
tld_file |
后缀大全(空格分隔,按序遍历) | config/tld.list |
dns_file |
DNS 服务器大名单 | config/dns.list(335 个) |
dns_per_domain |
每域名随机抽取 DNS 数 | 5 |
workers |
并发线程数 | 64 |
dns_timeout_ms |
单查询超时 | 2000 |
qtypes |
探测记录类型 | A AAAA NS |
block_file |
黑名单 | config/back.list |
build_sites |
自动建站 | true |
server_port |
搜索服务端口 | 8896 |
hot_cache_size / hot_cache_ttl |
热点缓存容量/TTL | 1000 / 60 |
ai_enabled |
AI 摘要开关 | false |
ai_endpoint / ai_model |
AI 端点/模型 | 本地 llama-server |
admin_user / admin_pass |
管理员账号密码(登录 Web UI) | admin / pilseo_admin_2026 |
| API/MCP token | 登录后签发(存 data/tokens.json) | 空 |
out/available.txt/out/registered.txt/out/errors.txt/out/uncertain.txtout/sites/<域名>/index.html+sitemap.xmldata/index/分块索引(docs.json + blocks/block_XX.json)
穷举组合爆炸:36^N × 后缀数。1 位=36,2 位=1296,3 位=46656,4 位=167 万,5 位=6000 万。先小规模试跑再上量。
已注册判定基于公共 DNS 视图,可用域名仍需在注册商处最终确认。
- 作者:yxpil(笔名,可能非本人真实姓名)。保留作者署名权——使用、修改、分发(含商用)须保留作者声明。
- 协议全文:见 LICENSE。核心条款:必须保留作者署名,删除/篡改作者声明视为违反协议;软件按"现状"提供,作者不对使用产生的损失负责;二次分发须附 LICENSE 原文并注明修改者。
- 本项目为纯 Rust 标准库实现,零第三方依赖。