添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
如果让你限制迅雷的种子下载你会吗?不开车,纯技术分享

如果让你限制迅雷的种子下载你会吗?不开车,纯技术分享

引言

迅雷下载一直都是大家喜欢用的下载工具软件,但是往往它有一个小问题,你知道吗?

不要想歪啦!!

假如你的服务器带宽和硬件资源不是很够,那么直接放空让用户直接通过迅雷下载网站资源,这样下去,你的服务器资源肯定会拖垮的。最终的结局就是你访问你的网站,想看个小视频或者小电影呀,最终的结果就是 页面500

为啥迅雷下载过多,会有这个问题呢?

这得从迅雷的机制来谈起,首先迅雷它得用户分很多,同时用户下载资源,又不会考虑咱家服务器的好不好,有没有劲儿啊 。那都是一顿操作猛如虎的,批量下载开始凑数。

可能一个客户端,任务就是几十上百个。那迅雷为满足用户的要求,就基于 多线程 的机制来跑任务。这样成倍数 (客户端数*多线程数的任务) 的客户端下载,是你,你顶的主吗?

打个比方: 现在下载一部电影,大小为1GB。假如服务带宽为5MB。 你的下行网速为100KB/S。这样10个下载任务,估算为1M。

那现在10个客户端,20个任务整起来,那就需要20M才可以满足,你的5M网速的机器满足得了别人吗? 而且我们这里也还没考虑上行网速,工作时服务器资源的开销。难道别人做了事儿,你不给钱吗? 那就是白嫖

这里当然是给大家举例,一般大型公司的网卡都是千兆和万兆网卡的

所以面对过多的任务客户端下载,咱们还有有必要进行拦截的,不然就是牵一发而动全身。

那如何对迅雷进行下载呢?

画面迎面走来一个好看的小姐姐,你都不认识她,你能怎么限制呢? 既然要适当的限制下载请求,那首先肯定需要先识别到迅雷这个东西,然后可以根据单位时间里面。你下载的次数进行安排。

例如:你1s超过10次。就开始进行不让你进行下载文件,这样就可以满足到我们的要求

怎么识别迅雷呢?

这个就得说说迅雷的下载机制,其实它本质也是发送一个HTTP请求到你的服务端,一般发送一个请求头就会有一个 HTTP_USER_AGENT 来标识这个客户端,如果咱们一旦发现了它 ,就立马把它拿捏住。死都不放开。

比如:浏览器访问一个网站也携带 HTTP_USER_AGENT 头,迅雷下载的时候,服务端照样会接受到这样的客户端得头。如下是浏览器访问的标识头

一般像Apache就会内置这个变量,直接调用这个变量做判断,而对应判断的值,你可以提前的打开日志等级为 alert 。这样每次迅雷访问就可以记录下来,拿到值后 就是开干。 作为颜值的代表,给大家放到下面了。

注意:它是Apache里面日志的设置方式,一共有9个等级,开的越多,记录的信息就月详细,线上不要看的太低,不然文件可能会撑爆。

LogLevel alert rewrite:trace8

设置后,每次访问就有这个头,你仔细看!!!

那限制的规则呢?

在你下载目录下面,添加一个.htaccess文件,里面写上下面的规则内容。

# 开启Apache的重写引擎
RewriteEngine on
#拿到HTTP请求发送客户HTTP_USER_AGENT和迅雷的标识做对比,只钥满足我就让这个请求重定向
#到winner.txt,不让它下载需要的资源啦。 当然也可以直接return 返回 503 都是阔以得
# NC代表大小写不敏感,OR是或的条件判断
RewriteCond %{HTTP_USER_AGENT} 67.0.3396.99 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow  [NC]
RewriteRule . winner.txt

从而做到让原来准备下载一个文件资料的额,结果就按照重定向的规则去下载到其它的内容里面去。 这样就是拦截迅雷的请求,或者还在家拒绝掉它 。

那怎么做到次数的限制,这里就得下载一个扩展 mod_limitipconn 。然后在里面编写限制流量访问的IP

ExtendedStatus On  
LoadModule limitipconn_module modules/mod_limitipconn.so  
<IfModule mod_limitipconn.c>  
    <Location />                                              #对应根目录  
          MaxConnPerIP 6                                  #最大并发数