如果,在网站的页面里随机插入坏链接,或在检测到是爬虫时,返回无限大响应的请求,比如发送无限大的永不结束的 http header ,或用 chunked 编码返回无限的大压缩率数据来直接撑暴对方服务器内存。
据我所知,现在的 http 库都没有处理这种情况,比如 python 的 urllib3/requests/pyCURL 等。
下面随手写的一个小程序来模拟一个无限大响应,我的爬虫处理不了这种情况啊!如果有人想这样干我我一点办法都没有的!(这里还没用压缩数据,一用的话内存马上就暴了)
有谁知道有处理这类情况的库?
爬虫代码:
import requests
r=requests.get('http://localhost:8888', timeout=20)
程序:
#!/usr/bin/env python2
import socket
from time import sleep
host = ''
port = 8888
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
data = conn.recv(4096)
print data
headers = [
'HTTP/1.1 200 OK',
'Server: FuckingServer',
'Content-Type: text/plain',
'Transfer-Encoding: chunked',
]
conn.send('\r\n'.join(headers))
conn.send('\r\n\r\n')
data = '5\r\nFuck!\r\n2\r\n\r\n\r\n'*10000
end = '0\r\n\r\n'
while True:
conn.send(data)
sleep(1)
print '.'
conn.close()
1
windfarer 2016-09-15 16:18:39 +08:00
多来这么几个爬虫,你自己服务器就先爆了
|
2
doubleflower OP @windfarer 为什么?压缩数据啊,一点点流量就爆了对方内存。
|
3
mdzz 2016-09-15 16:36:33 +08:00
reference: https://en.wikipedia.org/wiki/Zip_bomb
|
4
choury 2016-09-15 16:38:49 +08:00 via Android 1
为什么你写的爬虫会被识别出来,要是能识别出来我直接给你返回 403 不是更好?
|
5
jackon 2016-09-15 16:39:01 +08:00 via iPhone
只是你自己的爬虫太弱而已
|
6
binux 2016-09-15 16:43:03 +08:00 1
|
7
doubleflower OP @choury 那样对方完全没有受到伤害啊,比如各种新闻客户端爬盗版文章的,你发现它频率太高不象真人就给它 403 它转头去爬别人家回来再爬你,而一爬直接爆了的话对方就很难受了
|
8
greatghoul 2016-09-15 16:48:26 +08:00 3
> 在网站的页面里随机插入坏链接
牺牲用户体验 > 或在检测到是爬虫时,返回无限大响应的请求 一般写爬虫超时,或者超量,就有机制自动 kill 掉了 最寂寞的就是写了一堆反爬虫的策略,发现都没有生效过,没人来爬。。。 |
9
doubleflower OP @greatghoul 不可见链接,有什么问题? 说说容易,请问你用什么机制自动 kill?
|
10
imn1 2016-09-15 17:15:48 +08:00
我收 chunk 超过一定字节就 close ,并记录,因为超出我的预期的字节数上限,我认为肯定某个环节出问题,根本还不到 unzip 这个步骤
|
11
maomaomao001 2016-09-15 17:15:54 +08:00 via Android
怎么检测是爬虫还是正常用户?
|
12
DesignerSkyline 2016-09-15 17:22:19 +08:00 via iPad
@greatghoul 犀利
|
13
greatghoul 2016-09-15 17:29:52 +08:00 1
kill 掉爬虫非常简单呀
https://gist.github.com/greatghoul/7352ba71134cf9079eb5e049c235cd64 楼主你写的爬虫太烂了。。 另外你的链接不可见,总要写在源码里面吧,人家分析你网站的时候要是觉察不出来那还写的什么爬虫,就算你随机返回,人家爬虫多测试几次就知道了,针对你的伎俩,分分钟就有应对策略了。 还什么超大响应,你不知道有 chunk 和 stream 这种东西吗?你以为那些抓取电影资源的爬虫都是把整部电影读进内存里面吗? |
14
doubleflower OP @maomaomao001 在文章列表里随机插一个被 css 隐藏起来的文章连接,用 css :nth-child 之类的技术设置不可见,普通用户不可能点的,爬虫不会分析 css 会爬去这个文章。
|
15
greatghoul 2016-09-15 17:45:30 +08:00 via iPhone
@doubleflower 你这规则也太简单了
|
16
doubleflower OP @greatghoul
那处理无限 header 呢?这总不能 stream 了吧。 ``` conn.send('\r\n'.join(headers)) conn.send('\r\n') data = 'aaa: ' + 'bbb' * 1000 + '\r\n' while True: conn.send(data) sleep(1) print '.' conn.close() ``` |
17
greatghoul 2016-09-15 17:56:07 +08:00
@doubleflower 那处理无限 header 呢?这总不能 stream 了吧。
都不用处理 httplib.IncompleteRead: IncompleteRead(0 bytes read) curl 都会很快中断,还别说专门写爬虫了。 |
18
laoyur 2016-09-15 17:57:46 +08:00 1
然后误伤一大片吃瓜群众,领导直接让你背锅
|
19
greatghoul 2016-09-15 18:03:26 +08:00
现在很多网站都是 js 动态渲染的,传统的发 request 的爬虫根本占不到 90.99999%,现在好多爬虫都是直接跑的 phantomjs ,还有跑在 Chrome Extension 上面的,那些弱鸡的规则压根不顶用,甚至还有直接截屏 ocr 的。。。
楼主你还停留在上个时代。 |
20
goodman001 2016-09-15 18:09:22 +08:00 via iPhone
@greatghoul 💪🏻💪🏻💪🏻精辟
|
21
imcocc 2016-09-15 18:11:48 +08:00 via iPhone 1
楼主不知道七伤拳 伤人先伤己吗
|
22
Troevil 2016-09-15 18:23:26 +08:00
爬虫会控制深度吧 不可能无限循环下去的吧
|
23
thinks 2016-09-15 21:04:30 +08:00 via Android
@greatghoul 确实很寂寞,和我写防火墙策略一样了,结果一年过去了连条深层一点的端口扫描纪录都没有…
|
24
wangxiaoer 2016-09-15 21:24:20 +08:00 1
笑死了,你这个杀敌一万,自损八千啊,你服务端维持那么多长连接你扛得住?再说了,定向爬取都特么要到源码分析抓取地址的啊?你这种小伎俩分分钟过滤掉啊
|
25
est 2016-09-15 21:47:05 +08:00 1
都没我的策略淫荡。。。判断是爬虫就随机插入脏数据。。。。。
比如电商。。就随机返回价格。。。让你们爬。 管够。 |
26
scnace 2016-09-15 23:09:39 +08:00 via Android
@greatghoul 截屏 ocr 有 demo 吗?好像看看🐸🐸
|
28
veelog 2016-09-16 15:51:41 +08:00 via Android
你们这样做有考虑过浏览器的感受吗??除非你能识别是浏览器请求还是爬虫请求
|
29
ty89 2016-09-20 18:42:23 +08:00
满桶水不响,半桶水响叮当
|
30
doubleflower OP @ty89 DSB
|
32
tsungkang 2016-09-22 18:03:37 +08:00
写了半年多爬虫的半桶水路过,其实只要是你用浏览器能访问到的一切东西,都能用爬虫来爬,干翻爬虫其实不用这么麻烦,一个牛逼的验证码,或者要求注册帐号,一下子就没辙了。
个人不建议去搞一些可能会牺牲用户体验的设计,之前爬过一个某机构的站(不止我们,还有很多人也在爬他们,我也不想去爬,只是领导安排而已),后来貌似对方知道了,一气之下加了一些判断,有时候故意卡个 1 、 2 分钟,写的爬虫倒是 30 秒搞不定就放弃换 ip 了,反而我用浏览器正常访问,有时候也被卡,严重影响用户体验。 |
33
yanzixuan 2016-09-28 17:49:47 +08:00
@greatghoul 真相了。
最大的笑话就是程序员不光找不到女朋友,就连爬虫都对你没兴趣。。。 |
34
yanzixuan 2016-09-28 17:52:02 +08:00
@greatghoul 弱问, phatomjs 的 eval 是沙盒,开多个但载入网页也是独立的么?
|
35
greatghoul 2016-09-28 21:35:25 +08:00
@yanzixuan 这个真没有研究过,以后用 firefox 作浏览器的时候,是可以多开的,彼此也可以隔离, phantomjs 应该也能做到彼此独立吧。
|
36
Technetiumer 2016-09-29 12:24:42 +08:00
Slowloris ?
|
37
lyz8 2016-09-30 22:05:13 +08:00
写爬虫都是设置 5 秒超时的
|
38
pyufftj 2016-10-02 20:48:48 +08:00
这样对网站的 seo 也是很不好的,毕竟 google 之流才是最大的爬虫
|
39
dongfang 2016-10-04 18:13:45 +08:00
|
40
good758 2017-12-22 11:06:54 +08:00
然后 百度谷歌也不喜欢了。
|