引言

在当今实时交互场景中,WebSocket 技术已成为在线客服、即时通讯、实时数据推送等服务的核心支柱。然而,一个看似简单的技术细节却可能让企业付出高昂的代价:当爬虫机器人伪装成“用户”接入 WebSocket 时,客服系统可能误将其识别为真实客户,导致客服资源被无意义消耗,甚至因“无响应对话”而影响用户体验

场景痛点:当技术便利遭遇“无效流量”

想象一个典型的在线客服场景:用户访问网站后,通过 WebSocket 与客服实时沟通。然而,大量爬虫(如搜索引擎索引、SEO 工具、恶意扫描程序)的请求也会触发 WebSocket 连接。这些爬虫不会主动发送消息,却会长期占用连接资源。客服人员看到“在线用户”列表中的爬虫会话,尝试对话却得不到任何回应,最终导致:

  1. 资源浪费:服务器带宽、连接数被无效占用。
  2. 效率下降:客服需要手动排查“沉默用户”,增加工作负担。
  3. 数据污染:统计报表中的“用户活跃数”被虚假流量污染。

更糟糕的是,部分攻击者会利用 WebSocket 的长连接特性,发起高频请求或注入攻击,进一步威胁系统安全。

传统方案的局限性

许多开发者试图通过简单的 IP 封禁请求频率限制 解决问题,但爬虫的 IP 池和访问策略日益动态化,传统方案往往力不从心。而直接依赖 User-Agent 字符串过滤 看似直接,却常因正则表达式设计不当(如漏判新爬虫、误伤正常用户)导致效果大打折扣。

本文目标

本文将聚焦 “如何在 WebSocket 握手阶段精准识别爬虫”,通过以下实践方案实现高效拦截:

  1. 多维度 User-Agent 检测:基于正则表达式覆盖 95% 的已知爬虫标识,确保关键词精准匹配。
  2. 轻量化浏览器端拦截:提供 JavaScript 正则方案,避免爬虫触发前端资源加载。
  3. 服务端兜底逻辑:结合 IP 黑名单与行为分析,应对伪造 User-Agent 的高级爬虫。

文章将深入解析正则表达式设计技巧、跨语言(Java/JavaScript)实现方案,并探讨如何在开源数据集(如 crawler-user-agents)基础上动态更新策略。无论您是构建客服系统的开发者,还是需优化实时服务性能的架构师,均可通过本文获得可直接复用的代码与实践经验。


以下是基于常见爬虫和机器人的 User-Agent 关键词整理的正则表达式实现方案:


1. 常见爬虫 User-Agent 关键词

以下关键词覆盖了主流搜索引擎、SEO 工具、社交媒体、监控服务等类型的爬虫机器人:

关键词(不区分大小写) 示例爬虫名称
bot Googlebot, Bingbot
spider YandexSpider, Baiduspider
crawler AhrefsBot, SemrushBot
slurp Yahoo! Slurp
facebookexternalhit Facebook 链接预览机器人
duckduckbot DuckDuckGo 爬虫
facebot Facebook 爬虫
alexa Amazon 的 Alexa 爬虫
applebot Apple 的搜索引擎爬虫
pinterest Pinterest 爬虫
twitterbot Twitter 爬虫
linkedinbot LinkedIn 爬虫
telegrambot Telegram 爬虫
uptimerobot UptimeRobot 监控服务
exabot Exalead 搜索引擎
msnbot MSN 搜索引擎爬虫
yahoo Yahoo 爬虫

2. 正则表达式实现

以下正则表达式会匹配包含上述关键词的 User-Agent(不区分大小写):

String pattern ="(?i).*\\b(bot|spider|crawler|slurp|facebookexternalhit|duckduckbot|facebot|alexa|applebot|pinterest|twitterbot|linkedinbot|telegrambot|uptimerobot|exabot|msnbot|yahoo|googlebot|bingbot|yandexbot|baiduspider|ahrefsbot|semrushbot)\\b.*";

3. 正则关键表达式说明

3.1 (?i):忽略大小写的标记
  • 作用:表示后续的正则匹配不区分大小写
  • 原理(?i) 是正则表达式的 模式修饰符(Pattern Modifier),它会从当前位置开始,对整个表达式生效。
  • 示例
    (?i)bot   → 可以匹配 "Bot", "BOT", "bOt" 等任意大小写组合
    

3.2 \\b: 单词边界
  • 作用:表示 单词边界(Word Boundary),确保匹配的是一个完整的单词(而不是单词的一部分)。
  • 原理\\b 会匹配一个位置,该位置的一侧是单词字符(字母、数字、下划线),另一侧是非单词字符(如空格、标点或字符串边界)。
  • 示例
    \\bbot\\b → 匹配 "bot" 但不会匹配 "robot" 或 "bots"
    

3.3 组合后的效果:(?i).*\\b(bot|spider)\\b.*

假设原始正则表达式为:

String pattern ="(?i).*\\b(bot|spider)\\b.*";
3.3.1 匹配逻辑
  1. (?i) → 忽略大小写。
  2. .* → 允许目标关键词出现在 任意位置(如开头、中间、结尾)。
  3. \\b → 确保关键词是完整单词(避免部分匹配,如 robot 中的 bot)。
  4. (bot|spider) → 匹配 “bot” 或 “spider”。
  5. 最后的 .* → 允许关键词后有其他字符。
3.3.2 示例匹配的 User-Agent
  • "Googlebot/2.1" → 匹配 bot
  • "YandexSpider" → 匹配 spider
  • "BingPreviewBot" → 匹配 bot
3.3.3 不匹配的 User-Agent
  • "Robot/1.0"\\bbot\\b 不会匹配 “Robot” 中的 “bot”
  • "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" → 不含关键词

4. Java 代码实现

importjava.util.regex.Pattern;publicclassCrawlerDetector{privatestaticfinalStringBOT_PATTERN="(?i).*\\b(bot|spider|crawler|slurp|facebookexternalhit|duckduckbot|facebot|alexa|applebot|pinterest|twitterbot|linkedinbot|telegrambot|uptimerobot|exabot|msnbot|yahoo|googlebot|bingbot|yandexbot|baiduspider|ahrefsbot|semrushbot)\\b.*";privatestaticfinalPattern pattern =Pattern.compile(BOT_PATTERN);publicstaticbooleanisCrawler(String userAgent){if(userAgent ==null|| userAgent.trim().isEmpty()){returnfalse;}return pattern.matcher(userAgent).matches();}}

4.1 java 使用示例
publicstaticvoidmain(String[] args){String userAgent1 ="Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)";String userAgent2 ="Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1";System.out.println("Is crawler 1? "+CrawlerDetector.isCrawler(userAgent1));// trueSystem.out.println("Is crawler 2? "+CrawlerDetector.isCrawler(userAgent2));// false}

5. JS 代码实现

以下是 JavaScript 版本的正则表达式实现(适配浏览器环境):

5.1 JavaScript 正则表达式
const crawlerRegex =/\b(bot|spider|crawler|slurp|facebookexternalhit|duckduckbot|facebot|alexa|applebot|pinterest|twitterbot|linkedinbot|telegrambot|uptimerobot|exabot|msnbot|yahoo|googlebot|bingbot|yandexbot|baiduspider|ahrefsbot|semrushbot)\b/i;

5.2 实现解析
5.2.1 正则结构
  • \b:匹配单词边界(确保关键词是完整单词,避免误匹配类似 robot 中的 bot)。
  • (bot|spider|...):匹配列表中的任意关键词。
  • i 标志:忽略大小写(替代 Java 的 (?i))。
5.2.2 浏览器端使用示例
// 检测当前浏览器 User-Agent 是否是爬虫functionisCrawler(){const userAgent = navigator.userAgent;return crawlerRegex.test(userAgent);}// 调用示例if(isCrawler()){
  console.log("检测到爬虫,阻止 WebSocket 连接");}else{
  console.log("允许连接 WebSocket");}

5.3注意事项
  1. 关键词动态更新
    可以将正则关键词提取到配置中,便于动态扩展:

    const botKeywords =["bot","spider","crawler","slurp","facebookexternalhit","duckduckbot","facebot",// ...其他关键词];const crawlerRegex =newRegExp(`\\b(${botKeywords.join("|")})\\b`,"i");
    
  2. 浏览器兼容性

    • 所有现代浏览器(Chrome/Firefox/Safari/Edge)均支持 RegExpi 标志。
    • 兼容到 IE9+。
5.4 完整代码
<script>// 定义正则表达式const botKeywords =["bot","spider","crawler","slurp","facebookexternalhit","duckduckbot","facebot","alexa","applebot","pinterest","twitterbot","linkedinbot","telegrambot","uptimerobot","exabot","msnbot","yahoo","googlebot","bingbot","yandexbot","baiduspider","ahrefsbot","semrushbot"];const crawlerRegex =newRegExp(`\\b(${botKeywords.join("|")})\\b`,"i");// 检测逻辑functionisCrawler(){return crawlerRegex.test(navigator.userAgent);}// 根据检测结果控制 WebSocket 连接if(!isCrawler()){const ws =newWebSocket("wss://your-websocket-endpoint");
  ws.onopen=()=> console.log("WebSocket 已连接");}else{
  console.log("爬虫客户端,禁止连接 WebSocket");}</script>

注意事项
  1. 误判风险:极少数正常浏览器可能包含关键词(如 Bot),但概率极低。
  2. 动态更新:定期更新正则中的关键词列表以覆盖新出现的爬虫。
  3. 性能:正则表达式复杂度较低,适合高频调用。

cket 已连接");}else{
console.log(“爬虫客户端,禁止连接 WebSocket”);}


---

#### **注意事项**

1. **误判风险**:极少数正常浏览器可能包含关键词(如 `Bot`),但概率极低。
2. **动态更新**:定期更新正则中的关键词列表以覆盖新出现的爬虫。
3. **性能**:正则表达式复杂度较低,适合高频调用。

如果需要更全面的关键词列表,可以参考 [user-agents](https://user-agents.net/) 等公开数据集。

## 零基础如何高效学习大模型?

你是否懂 AI,是否具备利用大模型去开发应用能力,是否能够对大模型进行调优,将会是决定自己职业前景的重要参数。

为了帮助大家打破壁垒,快速了解大模型核心技术原理,学习相关大模型技术。从原理出发真正入局大模型。在这里我和鲁为民博士系统梳理大模型学习脉络,这份 `LLM大模型资料`   分享出来:包括`LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程`等, 😝有需要的小伙伴,可以 **扫描下方二维码**免费领取🆓**⬇️⬇️⬇️

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/57aba133e8b04cda90efef21a29424c9.png#pic_center)

### **【大模型全套视频教程】**

教程从当下的市场现状和趋势出发,分析各个岗位人才需求,带你充分了解自身情况,get 到适合自己的 AI 大模型入门学习路线。

**从基础的 prompt 工程入手,逐步深入到 Agents,其中更是详细介绍了 LLM 最重要的编程框架 LangChain。最后把微调与预训练进行了对比介绍与分析。**

同时课程详细介绍了**AI大模型技能图谱知识树**,规划属于你自己的大模型学习路线,并且专门提前收集了大家对大模型常见的疑问,集中解答所有疑惑!

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d627e47455434cbf8709ffd7bec9d441.png)


**深耕 AI 领域技术专家带你快速入门大模型**

跟着行业技术专家免费学习的机会非常难得,相信跟着学习下来能够对大模型有更加深刻的认知和理解,也能**真正利用起大模型,从而“弯道超车”,实现职业跃迁!**

![图片](https://i-blog.csdnimg.cn/img_convert/087823ba3ad2a6cd9e5d90f14e53eb3e.gif)

**【精选AI大模型权威PDF书籍/教程】**

精心筛选的经典与前沿并重的电子书和教程合集,包含《深度学习》等一百多本书籍和讲义精要等材料。绝对是深入理解理论、夯实基础的不二之选。

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/8347fcb4e0064c3492ba1517d09e26eb.png#pic_center)

**【AI 大模型面试题 】**

除了 AI 入门课程,我还给大家准备了非常全面的**「AI 大模型面试题」,**包括字节、腾讯等一线大厂的 AI 岗面经分享、LLMs、Transformer、RAG 面试真题等,帮你在面试大模型工作中更快一步。

**【大厂 AI 岗位面经分享(92份)】**

![图片](https://i-blog.csdnimg.cn/img_convert/d175ee97c286deb4d5357046af587b76.png)

**【AI 大模型面试真题(102 道)】**


![图片](https://i-blog.csdnimg.cn/img_convert/05789337c1b4208e0816d7f7faafb977.png)

**【LLMs 面试真题(97 道)】**

![图片](https://i-blog.csdnimg.cn/img_convert/a4735fdac955685870973510b618b427.png)



**【640套 AI 大模型行业研究报告】**

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/41cc4ad6fb94460d842cd99a2d3ac025.jpeg#pic_center)


**【AI大模型完整版学习路线图(2025版)】**

明确学习方向,2025年 AI 要学什么,这一张图就够了!

![img](https://i-blog.csdnimg.cn/img_convert/5b51bade755eebf50755d7f3e044b43f.jpeg)

👇👇点击下方卡片链接免费领取全部内容👇👇

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/57aba133e8b04cda90efef21a29424c9.png#pic_center)

**抓住AI浪潮,重塑职业未来!**

科技行业正处于深刻变革之中。英特尔等巨头近期进行结构性调整,缩减部分传统岗位,同时AI相关技术岗位(尤其是大模型方向)需求激增,已成为不争的事实。具备相关技能的人才在就业市场上正变得炙手可热。

**行业趋势洞察:**

- **转型加速:** 传统IT岗位面临转型压力,拥抱AI技术成为关键。
- **人才争夺战:** 拥有3-5年经验、**扎实AI技术功底**和**真实项目经验**的工程师,在头部大厂及明星AI企业中的薪资竞争力**显著提升**(部分核心岗位可达较高水平)。
- **门槛提高:** “具备AI项目实操经验”正迅速成为简历筛选的重要标准,预计未来1-2年将成为普遍门槛。

**与其观望,不如行动!**

面对变革,主动学习、提升技能才是应对之道。掌握**AI大模型核心原理、主流应用技术与项目实战经验**,是抓住时代机遇、实现职业跃迁的关键一步。

![在这里插入图片描述](https://i-blog.csdnimg.cn/img_convert/20650b2fe6913667559dbe110d39416e.png)

**01 为什么分享这份学习资料?**

当前,我国在AI大模型领域的高质量人才供给仍显不足,行业亟需更多有志于此的专业力量加入。

**因此,我们决定将这份精心整理的AI大模型学习资料,无偿分享给每一位真心渴望进入这个领域、愿意投入学习的伙伴!**

我们希望能为你的学习之路提供一份助力。如果在学习过程中遇到技术问题,也欢迎交流探讨,我们乐于分享所知。

***\*02 这份资料的价值在哪里?\****

**专业背书,系统构建:**

- 本资料由我与**鲁为民博士**共同整理。鲁博士拥有**清华大学学士**和**美国加州理工学院博士学位**,在人工智能领域造诣深厚:

- - 在IEEE Transactions等顶级学术期刊及国际会议发表论文**超过50篇**。
  - 拥有多项中美发明专利。
  - 荣获**吴文俊人工智能科学技术奖**(中国人工智能领域重要奖项)。

- 目前,我有幸与鲁博士共同进行人工智能相关研究。

  

![在这里插入图片描述](https://i-blog.csdnimg.cn/img_convert/b4d1781d8a9f28dbae476fba44a03100.jpeg)

**内容实用,循序渐进:**

- 资料体系化覆盖了从**基础概念入门**到**核心技术进阶**的知识点。

- 包含丰富的**视频教程**与**实战项目案例**,强调动手实践能力。

- 无论你是初探AI领域的新手,还是已有一定技术基础希望深入大模型的学习者,这份资料都能为你提供**系统性的学习路径和宝贵的实践参考**,**助力你提升技术能力,向大模型相关岗位转型发展**。

  

  ![在这里插入图片描述](https://i-blog.csdnimg.cn/img_convert/47b2870f05d321db73b2001083c1e328.png)![在这里插入图片描述](https://i-blog.csdnimg.cn/img_convert/22020fd17886cbd43f17d1390bf45edd.png)![在这里插入图片描述](https://i-blog.csdnimg.cn/img_convert/ee611124182bbaac80b8aa60c15b6c17.png)



**抓住机遇,开启你的AI学习之旅!**

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/57aba133e8b04cda90efef21a29424c9.png#pic_center)
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐