Scrapers即将开始使用 AI 模拟真实用户@-, 所以我建了一个机器人探测器, 可以学习 @, 适应#, 并反击\ .
密钥概念@: @行为运行_. 这将启用一个新的类别 {-} 。 在这样的类别中, 检测器和学习系统根据所学行为模式反射路线交通的透明性\ ,} 可调适 < MS K2 teams"}\ * ,} 不是静态规则=.} YARP 网关, bots 从来没有达到您的后端@. 或者使用中间器械来建立行为路径直接进入您的应用程序层 @.
现今网络工程中最棘手的问题之一,
不是因为机器人更聪明,而是因为 大赦国际认为模仿真正的用户行为无关紧要:
商业解决方案解决了这个,,但是它们很贵的(£3K+/月是典型的 ), 关闭@-source @, 和特定的 CDNMS K7你永远无法真正知道
我想要的是不一样的东西
于是我建了 多数是卢希德.}(机器人检测) - 学习 Bot 检测引擎的模块@, 为 @.NET}.
它开始简单 …,然后发展成更有趣的东西
这里的’是一个真实的 -世界情景:
一个擦破的口香糖 :
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120
貌似合法 .
但它却 遗忘 染色体头总是会发送@: @%
Sec-Fetch-Mode
及其 Accept-Language 标题与所声称的本地端相匹配@. @
申请率明显是自动的 @.}
一个信号是精细的. 2个信号是可疑的 □MSK13个信号是一个图案}*.
系统在 @100_毫秒@-_没有AI需要#.}下标注它
这是整个设计的基础 : @ ’ @ t依赖一个大的@ MS K1 @ bot 或不是” @ model @ MPK3} 累积证据=.{
@,_#这个项目的核心是#’}其实是关于机器人检测的... ...-" it’}关于将交通视为一种生活系统 而不是一连串孤立的请求吗?
现代搬运工的行为更像适应性有机体 : 他们学习了", mutate, 识别弱点的探针\ MS K3 并回应压力. 所以防御必须进化 太=.
这里的哲学是简单的“: 观察信号” “, 观测信号”“MS K2 组合起来” “,” 让它们互动“, 并随着时间而适应 ‘. 并且逐渐调整 ‘ " bottMSKK6’ @ non MSKOK8 校验“ MSOK9 }引擎变成一个小型探测器网络 ‘ mskK10 每一个都为共享黑板“ I, ” 提供证据,在这个黑板上可以出现更高的“ MPK12 行为”\ “ 政策成为可翻转的流“ MSSK14 而不是硬盘” “ - coded rules” 规则 {. 翻转 而不是“MSC17 AI” 只是另一个贡献者<, 不是单项.}
建立这个系统的目的是透明地“,”和“自我的-”校正“MS K4”,其长远目标是行为不象防火墙,而更像快速在边缘的免疫系统“:” 。
请求通过几个小型探测器流出 每件都提供一点证据
把它想象成机场安全检查点 …,但快一点
flowchart TB
subgraph Request["Incoming Request"]
R[HTTP Request]
end
subgraph FastPath["Fast Path (< 100ms)"]
UA[User-Agent Check]
HD[Header Analysis]
IP[Datacenter IP Lookup]
RT[Rate Anomalies]
HE[Heuristic Model]
end
subgraph SlowPath["Slow Path (Async Learning)"]
LLM[LLM Reasoning]
Learn[Weight Learning]
end
subgraph Output["Decision"]
Score[Risk Score 0-1]
Action[Allow / Throttle / Block]
end
R --> UA & HD & IP & RT
UA & HD & IP & RT --> HE
HE --> Score --> Action
HE -.-> LLM -.-> Learn
Learn -.->|updates weights| HE
style FastPath stroke:#10b981,stroke-width:2px
style SlowPath stroke:#6366f1,stroke-width:2px
style Output stroke:#f59e0b,stroke-width:2px
同步运行@ . @ does’}没有减慢您的 App.}
这一渔获量 80% 机器人的瞬间.
在背景中运行@. @%
这抓住了适应性生物体 和大多数人 思考 在用户@- @Agent_".}上他们正在追逐“"regex ”
dotnet add package Mostlylucid.BotDetection
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddBotDetection();
var app = builder.Build();
app.UseBotDetection();
app.Run();
万事通,万事如意
| @ | _检查# | }它发现什么 # | > |
|---|---|---|---|
| 用户@-}代理 -=YTET -伊甸园字幕组=- 翻译: | |||
| 页眉 失踪的安保信头 无法组合 | |||
| IPIP 实施伙伴 @ | #云端主机假装是@“#家用用户 @MS K2} @MSC3# | ||
| 利率率比率 @ | 自动爆破 #, 分散的刮痕# | ||
| 一致性 @ | @ @ “ @ @ Chrome@ MS K2# 没有Chrome @ I’ @ 实际信头设置 @ MPK4 @ |
恒度是潜伏的特征, 1个 符号一致性@.
这里的' @% 这样的真实检测看起来像 @ -} 这是来自运行演示 fastpath 在制作中 , 多数请求在刚刚完成 2-3 探测器同意后提前退出
{
"policy": "fastpath",
"isBot": false,
"isHuman": true,
"humanProbability": 0.8,
"botProbability": 0.2,
"confidence": 0.76,
"riskBand": "Low",
"recommendedAction": { "action": "Allow", "reason": "Low risk (probability: 20%)" },
"processingTimeMs": 50.7,
"detectorsRan": ["UserAgent", "Ip", "Header", "ClientSide", "Behavioral", "Heuristic", "VersionAge", "Inconsistency"],
"detectorCount": 8,
"earlyExit": false
}
“8”探测器在“51”中运行。 “- ” 指“'” 在多个证据来源平行执行“MS K2 ”
每个探测器都具有加权撞击力 . 负 = 人类信号 MS K2 阳性 NSK3 bot 信号=. *
| @ | Q# 检测器@ | Q 撞击 * | Q 重量 # | Q# | |
|---|---|---|---|---|---|
| 用户代理 @ | @ -0.20 @ @ I | @ @ *1.0# @ * MS K4# *% | } 用户@- @ agents seemed normal # MSKO8# | ||
| 页眉 | @-0.15}# | } @MS K3 | -0.15 | #信头似乎正常 # | |
| 行为 请求模式看起来正常 | |||||
| 华量主义 | -0.77 | 2.0 | -1.54 @ | @ @ 88% @ 人类可能性 @ I(16_ 功能 @ MPK3} @ O | |
| 客户服务 @ | @ -0.05 @ @ I | @ *0.8# # | # @ @ *-0.04# @ < | # 指纹似乎是合法的@ | # |
| 版本时代 | }浏览器=/OS 版本现为 @ | ||||
| 不一致 @ | @ -0.05 @ @ I | @ @ *0.8# @ * MS K4 @ * -0.04 @ *没有头巾@ | @ 无头巾 @ MPK7 @ 乌阿不一致 # | @ | |
| IPIP 实施伙伴 @ | #当地主机@(#中性 |
缩略 湿性检测仪 使用“16”功能达到 “88%”人类信任度=.}
每个探测器都发出信号 输入超光速模型的信号
{
"ua.is_bot": false,
"ua.raw": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...",
"ip.is_local": true,
"ip.address": "::1",
"header.has_accept_language": true,
"header.has_accept_encoding": true,
"header.count": 16,
"fingerprint.integrity_score": 1,
"behavioral.anomaly": false,
"heuristic.prediction": "human",
"heuristic.confidence": 0.77,
"versionage.analyzed": true
}
这些信号长期存在,并随着时间的推移对学习系统进行培训。
最后决定的累计分数(按类别分列)
|类分 | 得分 | 重量| 记号 MS K4 * |----------|-------|--------|-------| @2.0#|}最强的人类信号 1.0}正常浏览器UA=| @1.0}@|}所有预期的会头都到场了 @MS K6# | 行为举止 @|} @MS K2 @#| @ 1.0#没有率反常现象 @|# “|”客户端Side {|} @-0.04|} 0.8} 收到有效指纹 | 0.8 @|当前浏览器版本 @MS K6 校对:Soup @|_IP |}(IP IP IMSK1) 200)}#0.00Q} @MS K3Q} (0.5Q) ∮ @|Q 本地主机 @MSC6DV 中性@)#|#
加权总分数=:}-2.11 强烈的人类信号
注:: 这是演示文稿 '
fastpath政策策略运行时 全部 显示度检测器@. 在有早期退出功能的实际生产中 @,高/-信任请求退出 在“10”下@ .} 这里的@ MS K1 @ ms is because demod 模式会中断早期退出以显示所有贡献% . @ action
用于比较 @,_在这里 @ '%s demo 包括LLM推理在内的完整管道 有分歧的:
{
"policy": "demo",
"isBot": false,
"isHuman": true,
"humanProbability": 0.87,
"botProbability": 0.13,
"confidence": 1.0,
"botType": "Scraper",
"riskBand": "Low",
"recommendedAction": { "action": "Allow", "reason": "Low risk (probability: 13%)" },
"processingTimeMs": 1370,
"aiRan": true,
"detectorsRan": ["UserAgent", "Ip", "Header", "ClientSide", "Behavioral",
"VersionAge", "Inconsistency", "Heuristic", "HeuristicLate", "Llm"],
"detectorCount": 10
}
@10探测器在@1.4秒 法学硕士跑来跑去 有不同意见 与超自然理论的结合
| @ | Q# 检测器@ | Q 撞击 * | Q 重量 # | Q# | |
|---|---|---|---|---|---|
| 法学硕士 | +0.85 | 2.5 | +2.13 @ | @ @ "# Chrome 在 Bots@ MS K2 @ cookies @ I+ @ refererger 怀疑@" @ @ @ | @ |
| 超饱性时间 @ | # 人类7#(}有所有证据的 ) # | # | |||
| 华量主义 @ | } @ | @ @ @ 人类可能性#(16 @ 特质 @ ) @ @ * | * | ||
| 用户代理 @ | @ -0.20 @ @ I | @ @ *1.0# @ * MS K4# *% | } 用户@- @ agents seemed normal # MSKO8# | ||
| 页眉 | @-0.15}# | } @MS K3 | -0.15 | #信头似乎正常 # | |
| 行为 请求模式看起来正常 | |||||
| 客户服务 @ | @ 0.00 @ @ I | @ *1.8# @ * | # *没有指纹@ | # #等待JS=# @* | # |
| 版本时代 | }浏览器 @/OS版本 | ||||
| 不一致 @ | @ -0.05 @ @ I | @ @ *0.8# @ * MS K4 @ * -0.04 @ *没有头巾@ | @ 无头巾 @ MPK7 @ 乌阿不一致 # | @ | |
| IPIP 实施伙伴 @ | @ 0.00 @ @ I | @ *0.5# # | # @ @ @ | @ 本地主机@( @ non性 @MS K8 @ @ _ | # |
这是一件有趣的案子, LLM将它标记为潜在的机器人 而所有静态探测器都说人类 :
{
"ai.prediction": "bot",
"ai.confidence": 0.85,
"ai.learned_pattern": "Browser string suggests Chrome, common in bots. Presence of cookies and a specific referer also points to a potential bot."
}
LLM' 推理被记录为反馈到学习系统中的信号。 如果这种模式继续出现,并被确认为肉毒杆菌流量。 I, 超常重量将调整“. ”
通知@:
两次吃力运动 @-_BARBAR_在所有的探测器前#)}和迟到的(> 都说""{Human@"}加上#MS K7}信任 *.}
LLM不同意 @- 它发现了静态探测器失灵的型式 ~. 它的“+2.13 加权撞击部分地对抗了超光速 ~' ~ -3.46.
无指纹 “-”客户端Side 返回了“0” 因为JS在真实的浏览器中“,” 会添加更多的人类信号“MS K5”
最后判决@: @ 允许 综合证据仍有利于人类, botType: "Scraper" 意指它' 正在被监视@.
分类细目显示张力@: @%
|类分 | 得分 | 重量| 记号 *MS K4 * |----------|-------|--------|-------| | 华量主义 @| @ @ -3.46 @ @ *|# @ *4.5# # 强大的人类信号 @MS K5# | 大赦国际 @| @ +2.13 @ @ @ I| @ @ *2.5# MS K4 @ LLM说:bot@| @ 1.0}正常浏览器 | @|#标题@|_ -0.15} @MS K3} @1.0 所有信头都到场了$|# @1.0}(正常模式) | “|”客户端Side {|} @0.00|}1.8\an8}@|}没有指纹,也没有指纹 0.8+|+当前版本 @|# 校对:Soup @|#IP IP #|#%0.00#@|0.5} @MS K5#当地主机#|#
加权总分数=:}-1.86 @→_人类赢%,}但LLM#'_反对者已注意到@.{
关键洞察力: 系统盲目信任任何单一的检测器@. @ 当他们不同意,}证据是加权的,多数人赢得了#-}但是少数派的意见会被记录下来
重要的: 此verbose 输出为 demo@ - @ only @ MS K1 @ 在 producting\ @ MPK2} 您可以通过 HTTP 信头 {(} 获得微小响应 。
X-Bot-Confidence,X-Bot-RiskBand@ , @ etc@ MS K1} 或者简单context.IsBot()ưμ㼯A
if (context.IsBot())
return Results.StatusCode(403);
var score = context.GetBotConfidence(); // 0.0–1.0
var risk = context.GetRiskBand(); // Low/Elevated/Medium/High
app.MapGet("/api/data", Secret).BlockBots();
app.MapGet("/sitemap.xml", Sitemap)
.BlockBots(allowVerifiedBots: true);
风险水平指导行动*:
建议采取的行动 | | -------- | ---------- | ------------------ | @| 低 | MS K2 @#0.3 | 允许 *| / 比例为 @-限制@| -=YTET -伊甸园字幕组=- 翻译: @|}高音 | MS K2 *#0.7 #| #Block@|#
不需要@- @}但对于抓取高级自动化很有用 @ .#
该系统包括一种休眠检测器,它利用动态学习重量的后勤回归来进行逻辑回归。 它从明智的默认开始,根据探测反馈进化。
典型的延缓度 : # 1–5#
{
"BotDetection": {
"AiDetection": {
"Heuristic": {
"Enabled": true,
"LoadLearnedWeights": true,
"EnableWeightLearning": true
}
}
}
}
以动态方式提取特性@-}新的模式会自动获得默认重量,并随着时间的流逝而学习#.}系统会发现什么重要 贵国的 交通 #.#
捕捉快速规则的蒸发机器人 奥拉马 本地 LLM 推断@. @%
ollama pull gemma3:1b
{
"BotDetection": {
"AiDetection": {
"Provider": "Ollama",
"Ollama": { "Model": "gemma3:1b" }
}
}
}
AI 是 失败的-# safe -,如果它"'s down" <,BARBAR 继续正常的检测>.}
静态区块列表正在变换 stale @ . @ 攻击者调整@ MS K1} @ 所以这个系统学习了 .
flowchart LR
N[Neutral] -->|repeated bad activity| S[Suspect]
S -->|confirmed| B[Blocked]
B -->|no activity| S
S -->|stays clean| N
style B stroke:#ef4444,stroke-width:2px
style S stroke:#eab308,stroke-width:2px
style N stroke:#10b981,stroke-width:2px
模式随着时间的流逝而衰变+:
永久合法用户@. @%
{
"BotDetection": {
"Learning": {
"Enabled": true,
"ScoreDecayTauHours": 168,
"GcEligibleDays": 90
}
}
}
这里还有 ’ Docker- 首个 YARP 反向代理 运行检测 之前 请求按下您的 App.
flowchart LR
I[Internet] --> G[YARP Gateway]
G -->|Human| App[Your App]
G -->|Search Engine Bot| App
G -->|Malicious| Block[403]
用一条线运行它 :
docker run -p 80:8080 \
-e DEFAULT_UPSTREAM=http://your-app:3000 \
scottgal/mostlylucid.yarpgateway
有关#:的工作
用于自定义路由@: @%
services:
gateway:
image: scottgal/mostlylucid.yarpgateway
volumes:
- ./yarp.json:/app/config/yarp.json
{
"BotDetection": {
"BotThreshold": 0.7,
"BlockDetectedBots": true,
"EnableAiDetection": true,
"Learning": { "Enabled": true },
"PathPolicies": {
"/api/login": "strict",
"/sitemap.xml": "allowVerifiedBots"
}
}
}
本部分为 1 @ @ MS K1 @ 概览@ ). @ 下一部分挖掘更深@: @%
未来路线图#:
如果你想要机器人探测器,你可以 理解, 扩展,和 任意在任何地方运行本系列是给你的 .
unlicense {–} 公共域 <% . } 无论你想怎样使用它\ MS K2\ {
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.