# **反制: @(_Part *1)}部分**

*Scrapers即将开始使用 AI 模拟真实用户@-, 所以我建了一个机器人探测器, 可以学习 @, 适应#, 并反击\ .*

**密钥概念@: @行为运行_.** 这将启用一个新的类别 {-} 。 在这样的类别中, 检测器和学习系统根据所学行为模式反射路线交通的透明性\ ,} 可调适 < MS K2 teams"}\ * ,} 不是静态规则=.} [YARP 网关](https://hub.docker.com/r/scottgal/mostlylucid.yarpgateway), bots 从来没有达到您的后端@. 或者使用中间器械来建立行为路径直接进入您的应用程序层 @.

<pinned/>
<!--category-- ASP.NET, Bot Detection, Security -->
<datetime class="hidden">2025-12-08T07:00</datetime>

[![Nuget 元数](https://img.shields.io/nuget/v/mostlylucid.botdetection.svg)](https://www.nuget.org/packages/mostlylucid.botdetection/)
[![吉特胡布](https://img.shields.io/github/stars/scottgal/mostlylucid.nugetpackages?style=social)](https://github.com/scottgal/mostlylucid.nugetpackages/blob/main/Mostlylucid.BotDetection/README.md)
[![嵌入器](https://img.shields.io/docker/pulls/scottgal/mostlylucid.yarpgateway)](https://hub.docker.com/r/scottgal/mostlylucid.yarpgateway)

---


## **为何存在**

现今网络工程中最棘手的问题之一,

不是因为机器人更聪明,而是因为 **大赦国际认为模仿真正的用户行为无关紧要**:

* 流动居民代理物
* 完全有效的浏览器指纹
* 现实的鼠鼠运动
* 执行 JavaScript
* 屏蔽时适应

商业解决方案解决了这个,,但是它们很贵的(£3K+/月是典型的 ), 关闭@-source @, 和特定的 CDNMS K7你永远无法真正知道

我想要的是不一样的东西

* 开放
* 当地当地
* 可理解
* 易于推广
* 即使是在草莓皮皮上, 也可以便宜地运行“(”和“MS K1”,

于是我建了 **多数是卢希德.}(机器人检测)** - 学习 Bot 检测引擎的模块@, 为 @.NET}.

它开始简单 …,然后发展成更有趣的东西

---


[TOC]

---


## **具体实例 @( @ what this actually catches_)**

这里的’是一个真实的 -世界情景\:

一个擦破的口香糖 :

```
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”,其长远目标是行为不象防火墙,而更像快速在边缘的免疫系统“:” 。

---


## **它是如何工作的 @ ( @ 短版本@ MS K1 @**

请求通过几个小型探测器流出 每件都提供一点证据

把它想象成机场安全检查点 …,但快一点

```mermaid
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
```

### **快速路径 @ (< @ @ I100 @ ms@ MS K2 @**

同步运行@ . @ does’}没有减慢您的 App.}

* 已知机器人模式
* 丢失页眉的人总是发送真正的浏览器
* 数据中心IPs @(AWS/AzureMS K2GCP})
* 比率上升
* UA “+” 信头之间不一致

这一渔获量 **80%** 机器人的瞬间.

### **慢路@( @Async_)}%**

在背景中运行@. @%

* 富营养模式,具有学习体重
* LLM 推理 [奥拉马](https://ollama.com/)
* 更新模式声誉
* 忘记陈旧的信号

这抓住了适应性生物体 和大多数人 *思考* 在用户@- @Agent_".}上他们正在追逐“"regex ”

---


## **尝试在 @ 10 @ 秒数**

```bash
dotnet add package Mostlylucid.BotDetection
```

```csharp
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddBotDetection();

var app = builder.Build();
app.UseBotDetection();
app.Run();
```

万事通,万事如意

---


## **它检测到什么? (*At a Glance *)}**

@|_检查#|}它发现什么 #|>
| --------------- | ------------------------------------------------- |
| **用户@-}代理** -=YTET -伊甸园字幕组=- 翻译:
| **页眉** 失踪的安保信头 无法组合
| **IPIP 实施伙伴** @|#云端主机假装是@“#家用用户 @MS K2} @MSC3#
| **利率率比率** @| 自动爆破 #, 分散的刮痕#|
| **一致性** @| @ @ “ @ @ Chrome@ MS K2# 没有Chrome @ I’ @ 实际信头设置 @ MPK4 @

恒度是潜伏的特征, *1个* 符号一致性@.

---


## **真正的检测结果 @(_Broken down@)**

这里的' @% 这样的真实检测看起来像 @ -} 这是来自运行演示 `fastpath` 在制作中 , 多数请求在刚刚完成 2-3 探测器同意后提前退出

### 摘要摘要

```json
{
  "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%”人类信任度=.}

### 收集的信号

每个探测器都发出信号 输入超光速模型的信号

```json
{
  "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}{MS K5} 收到有效指纹 *|*
0.8 @|当前浏览器版本 @MS K6
校对:Soup
@|_IP |}(IP IP IMSK1) 200)}#0.00Q} @MS K3Q} (0.5Q) ∮ @|Q 本地主机 @MSC6*DV 中性@)#|#

**加权总分数=:}-2.11** 强烈的人类信号

> **注::** 这是演示文稿 ' `fastpath` 政策策略运行时 **全部** 显示度检测器@. 在有早期退出功能的实际生产中 @,高/-信任请求退出 **在“10”下**@ .} 这里的@ MS K1 @ ms is because demod 模式会中断早期退出以显示所有贡献% . @ action

### 使用 LLM ) 的完整管道 {(} Demo 模式

用于比较 @,_在这里 @ '%s `demo` 包括LLM推理在内的完整管道 **有分歧的**:

```json
{
  "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将它标记为潜在的机器人** 而所有静态探测器都说人类 :

```json
{
  "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, 超常重量将调整“. ”

通知@:

1. **两次吃力运动** @-_BARBAR_在所有的探测器前#)}和迟到的(> 都说""{Human@"}加上#MS K7}信任 *.}

2. **LLM不同意** @- 它发现了静态探测器失灵的型式 ~. 它的“+2.13 加权撞击部分地对抗了超光速 ~' ~ -3.46.

3. **无指纹** “-”客户端Side 返回了“0” 因为JS在真实的浏览器中“,” 会添加更多的人类信号“MS K5”

4. **最后判决@: @ 允许** 综合证据仍有利于人类, `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

---


## **利用成果**

```csharp
if (context.IsBot())
    return Results.StatusCode(403);

var score = context.GetBotConfidence();  // 0.0–1.0
var risk  = context.GetRiskBand();       // Low/Elevated/Medium/High
```

### 保护终点

```csharp
app.MapGet("/api/data", Secret).BlockBots();
app.MapGet("/sitemap.xml", Sitemap)
   .BlockBots(allowVerifiedBots: true);
```

风险水平指导行动*:

建议采取的行动 *|*
| -------- | ---------- | ------------------ |
@| 低 | MS K2 @#0.3 | 允许 *|
/ 比例为 @-限制@|
-=YTET -伊甸园字幕组=- 翻译:
@|}高音 | MS K2 *#0.7 #| #Block@|#

---


## **AI 检测 (Optional)**

不需要@- @}但对于抓取高级自动化很有用 @ .#

### **超强检测器 @(Fast,学习@)**

该系统包括一种休眠检测器,它利用动态学习重量的后勤回归来进行逻辑回归。 它从明智的默认开始,根据探测反馈进化。

典型的延缓度 : **# 1–5#**

```json
{
  "BotDetection": {
    "AiDetection": {
      "Heuristic": {
        "Enabled": true,
        "LoadLearnedWeights": true,
        "EnableWeightLearning": true
      }
    }
  }
}
```

以动态方式提取特性@-}新的模式会自动获得默认重量,并随着时间的流逝而学习#.}系统会发现什么重要 *贵国的* 交通 #.#

### **Ollama LLM @ (# 深智原因 @)#**

捕捉快速规则的蒸发机器人 [奥拉马](https://ollama.com/) 本地 LLM 推断@. @%

```bash
ollama pull gemma3:1b
```

```json
{
  "BotDetection": {
    "AiDetection": {
      "Provider": "Ollama",
      "Ollama": { "Model": "gemma3:1b" }
    }
  }
}
```

AI 是 **失败的-# safe** -,如果它"'s down" <,_BARBAR_ 继续正常的检测>.}

---


## **学习系统@:适应性 @,不触发%-快乐**

静态区块列表正在变换 stale @ . @ 攻击者调整@ MS K1} @
所以这个系统学习了 .

```mermaid
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
```

模式随着时间的流逝而衰变+:

* 实施伙伴被重新分配
* 错误配置的脚本得到修正
* 交通量自然变化

永久合法用户@. @%

```json
{
  "BotDetection": {
    "Learning": {
      "Enabled": true,
      "ScoreDecayTauHours": 168,
      "GcEligibleDays": 90
    }
  }
}
```

---


## **YARP 网关:对您的应用程序的边缘保护**

这里还有 ’ **Docker- 首个 YARP 反向代理** 运行检测 *之前* 请求按下您的 App. {}

```mermaid
flowchart LR
    I[Internet] --> G[YARP Gateway]
    G -->|Human| App[Your App]
    G -->|Search Engine Bot| App
    G -->|Malicious| Block[403]
```

用一条线运行它 :

```bash
docker run -p 80:8080 \
  -e DEFAULT_UPSTREAM=http://your-app:3000 \
  scottgal/mostlylucid.yarpgateway
```

有关#:的工作

* Linux 语言
* MACOS macOS 大陆体
* 视窗
* **草莓皮皮・)**

用于自定义路由@: @%

```yaml
services:
  gateway:
    image: scottgal/mostlylucid.yarpgateway
    volumes:
      - ./yarp.json:/app/config/yarp.json
```

---


## **合理生产配置**

```json
{
  "BotDetection": {
    "BotThreshold": 0.7,
    "BlockDetectedBots": true,
    "EnableAiDetection": true,
    "Learning": { "Enabled": true },
    "PathPolicies": {
      "/api/login": "strict",
      "/sitemap.xml": "allowVerifiedBots"
    }
  }
}
```

---


## **这是往何去**

本部分为 1 @ @ MS K1 @ 概览@ ). @
下一部分挖掘更深@: @%

* **部分#2**: [和 StyloBot 架构@(ccode @-level)](/blog/post/botdetection-part2-signature-pipeline-and-stylobot-architecture)
* **部分#3**: 行为分析
* **部分#4**:客戶端@-侧指纹
* **部分#5**在真实时间里学习体重=-
* **部分#6***:LLM内部检测器
* **部分#7***:* 学习系统正确解释

**未来路线图#:**

* 与矢量嵌入匹配的 RAG-基模式
* 当地小型模型推论 [拉拉马沙尔普](https://github.com/SciSharp/LLamaSharp) 曼斯克诺
* 探测新攻击模式的语义相似性

如果你想要机器人探测器,你可以 *理解*, *扩展*,和 *任意在任何地方运行*本系列是给你的 .

---


## **链接链接链接**

* **GitHub:** 完全 docs
  [https @://Github.com}/Scottgal}MS K3}多半是平庸的 mostlylucid 200)}.Nnugigetpackages](https://github.com/scottgal/mostlylucid.nugetpackages)
* **Nuget:** 安装软件包
  [https @:// @www@._nuget.{org}/{packages}{/多半是平庸的 mostlylucid.bot检测](https://www.nuget.org/packages/mostlylucid.botdetection)
* **多克·哈勃 : *** YARPYARP 网关
  [https @://hub.dockerMS K2com}/r}/scottgal /}多半是平庸的.yarpgateway](https://hub.docker.com/r/scottgal/mostlylucid.yarpgateway)

**unlicense {–} 公共域 <% . } 无论你想怎样使用它\ MS K2\ {**