识别黄牛脚本对入口带宽的异常占用,核心不是盯着带宽曲线,而是盯连接数、请求频率和流量形态的组合异常。黄牛脚本不以正常用户速度请求,它的特征是“机械、密集、脉冲式”,抓住这三点就能从日志里把它揪出来。
入口带宽异常占用排查:先别急着加带宽
当你发现服务器带宽突然被顶满,第一反应往往是升级带宽,但加完带宽问题依旧,黄牛脚本会持续抢占资源,你加多少它就能吃掉多少,排查入口带宽异常,关键要分清楚“人”和“脚本”,人访问页面有停顿、有滚动,脚本只有“抢”的动作。
黄牛脚本怎么识别?看这五个行为指纹
- 单IP并发连接数:正常用户打开一个页面不会超过几路连接,黄牛脚本会同时保持几十甚至上百条TCP连接。
- 请求时间间隔:正常用户有思考、滚动、延迟,间隔不均匀,脚本请求间隔几乎恒定,误差以毫秒计。
- User-Agent分布:大量请求携带相同UA,或者伪装成浏览器但缺少Accept-Language、Accept-Encoding等正常头。
- 资源加载特征:正常用户会请求页面里的图片、CSS、JS,脚本只打接口,对静态资源一律不碰。
- 时间规律:大促或秒杀开始前几十秒流量突然拉高,结束后瞬间回落,形成脉冲形态。
抢购脚本和正常流量区别在哪
用一张表可以直接看出差距:
| 对比维度 | 正常流量 | 黄牛脚本 |
|---|---|---|
| 单IP连接数 | 个位数 | 几十甚至上百 |
| 请求间隔 | 不均匀,有思考停顿 | 恒定,像定时器 |
| 资源请求 | 完整加载页面组件 | 只请求接口或页面主体 |
| 流量曲线 | 平缓或缓波 | 脉冲式突增突降 |
| 日志特征 | UA多样、带Referer | UA重复、Referer缺失或固定 |
业内专家指出,黄牛脚本的请求体比正常页面小得多,但连接数却成倍上升,所以带宽消耗往往集中在握手包和重复请求上。
用命令和日志验证异常流量
光看曲线还不够,你得落到具体IP和请求特征上,下面几步操作路径可以直接在Linux服务器上验证。
入口带宽异常占用排查的常用命令
- 第一步,查看当前连接数Top 10来源IP:
netstat -ant | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head - 第二步,查最近日志里请求数最高的IP:
tail -n 10000 access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head - 第三步,观察半连接状态:
ss -st | grep SYN,如果半连接接近上限,说明IP层已经拥堵,入口带宽被握手包耗尽。
从Nginx日志里揪出脚本IP
Nginx访问日志默认在/var/log/nginx/access.log,先按IP统计请求量,再按分钟看整体请求密度,用awk '{print $4}' access.log | cut -d: -f1-2 | uniq -c可以得到每分钟请求数,假设平时每分钟几百条,大促时突然变成几万条,那这一段日志就是异常流量集中区,这时再取异常时间段内的IP,分别去数连接数和请求次数,脚本IP会明显冒头。
用tcpdump确认请求特征
如果你遇到“网站入口带宽被占满怎么办?”这类问题时,别只盯带宽,用tcpdump -i eth0 -nn -s 0 -w capture.pcap port 80抓30秒包,然后用tcpdump -r capture.pcap | awk '{print $3}' | sort | uniq -c | sort -nr | head看来源IP分布,更关键的是看数据包长度和请求方法,正常浏览器请求包大小随机,脚本通常固定长度,且高频重复POST或GET某一个接口。
验证后如何处置:限流与封禁实操
识别出脚本IP后,处置顺序很重要:先限流,再封禁,最后上验证码,不要一上来就封IP,误伤共享出口用户得不偿失。
设置连接数限制和请求频率阈值
在Nginx配置里加入两条规则,第一步定义区域,放到nginx.conf的http{}块:
limit_req_zone $binary_remote_addr zone=hot:10m rate=10r/s;
第二步在location{}块里调用:
limit_req zone=hot burst=5;
这样每个IP每秒最多请求10次,允许突发5次,黄牛脚本动辄每秒几十次请求,会被直接拦下。
动态封禁与验证码兜底
写一个简单shell脚本,每分钟读取Nginx日志,统计单IP请求数,超过阈值就执行iptables -A INPUT -s IP -j DROP,注意封禁时间不宜过长,比如5分钟自动解除,更稳妥的做法是让可疑请求302跳转到验证码页,输入正确后再放行,验证码页面本身也要做轻量化设计,否则验证码流量也会挤占入口带宽。
平时怎么防:让带宽不再被脚本盯上
事后识别和处置只是补救,提前做几项设置能让脚本没机会接近入口带宽。
- 接口签名参数:在业务接口加时间戳和签名校验,脚本无法在短时间内批量伪造。
- 静态资源走CDN:图片、CSS、JS全部交给CDN,源站带宽只服务业务请求,消耗量自然下降。
- 高频接口加Redis缓存:对返回结构固定的请求直接命中缓存,脚本大量重复请求不会打到后端和入口链路。
- 部署WAF规则:常用WAF用户代理规则能识别大流量自动工具,在HTTP入口就拦截。
预防到位后,正常大促期间的流量曲线会平滑很多,即使有脚本突刺,带宽占用也不会瞬间爆表。
黄牛脚本对入口带宽的占用,本质是行为异常,只要在日志里抓住连接数、请求频率和脉冲曲线这三个特征,限流就有的放矢,别被“加带宽”掩盖问题,识别应当是第一步。
关于黄牛脚本怎么识别和带宽占用的几个问题
Q:黄牛脚本和CC攻击有什么不同?
两者都会占用带宽,但目的不同,CC攻击是为了消耗资源,让服务不可用,而黄牛脚本是为了拿到请求结果,会试图获得正常响应,表现上,黄牛脚本多集中在抢购时段,请求目标单一,UA和参数相对固定,CC攻击则往往随机打页面的不同接口,且不关心响应内容。
Q:入口带宽被占满,临时扩容有用吗?
临时扩容能保住正常用户的访问,但治标不治本,黄牛脚本会随带宽扩大而继续抢占,扩容红利最终又会被脚本消耗,更有效的方式是先在入口处做速率限制,再分析日志追溯脚本来源。
Q:识别黄牛脚本需要上昂贵的安全设备吗?
不需要,借助已有的Nginx日志、netstat和tcpdump就能判断大部分特征,小规模站点用简单iptables规则就能挡住,只有流量特别大才需要WAF或交换机层面的清洗。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/774570.html


