V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
0xvincebye
V2EX  ›  Python

这种 512 状态反爬虫怎么绕过?

  •  
  •   0xvincebye · 2017-10-30 13:28:58 +08:00 · 9896 次点击
    这是一个创建于 2581 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如图因为一些原因需要爬取 http://www.cnvd.org.cn/漏洞信息 然而请求返回状态为 521,并返回一串代码

    
    <script>var x="return@Oct@window@for@https@false@reverse@setTimeout@while@f@firstChild@h@_phantom@addEventListener@17@substr@if@DOMContentLoaded@innerHTML@e@length@a@i@1509340839@4@catch@995@challenge@__phantomas@cookie@Path@Expires@var@Mon@replace@r@toLowerCase@div@0@cd@2@String@l@eval@document@20@join@30@fromCharCode@createElement@__jsl_clearance@try@location@function@charAt@39@href@match@06@GMT@captcha@1500@x@dc@else@attachEvent@onreadystatechange".replace(/@*$/,"").split("@"),y="11 1b=1m(){9(3.d||3.t){};11 18,20='1j=o.r|17|';11 a=[1m(1v){1 1c('1a.1h('+1v+')')},(1m(){11 c=1d.1i('16');c.j='<m 1p="\\'/\\'">1v</m>';c=c.b.1p;11 14=c.1q(/5?:\\/\\//)[17];c=c.g(14.l).15();1 1m(1v){4(11 n=17;n<1v.l;n++){1v[n]=c.1n(1v[n])};1 1v.1f('')}})()];18=[[(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])+(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[]),[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[]),(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])+((-~[]|19)+[]+[]),[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+[~~{}],([19]*((19^-~[]))+[])+(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[]),[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+[~~{}],[-~[]]+[~~{}]+([19]*((19^-~[]))+[])],[([(-~[]|-~(+!+{}))]*((-~[]|-~(+!+{})))+[]+[]),([(-~[]|-~(+!+{}))]*((-~[]|-~(+!+{})))+[]+[])],[[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+([(-~[]|-~(+!+{}))]*((-~[]|-~(+!+{})))+[]+[]),(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])+([19]*((19^-~[]))+[]),[-~[]]+[-~[]]+((-~{}<<-~{})+[]+[[]][~~[]]),(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[])+[-~[]]],[[-~[]]+[~~{}]],[[-~[]]+[-~[]]+((-~{}<<-~{})+[]+[[]][~~[]]),(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[])+[p],(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])+((-~{}<<-~{})+[]+[[]][~~[]]),([(-~[]|-~(+!+{}))]*((-~[]|-~(+!+{})))+[]+[])+[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))],[-~[]]+((-~{}<<-~{})+[]+[[]][~~[]])+[~~{}],[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))],[-~[]]+((-~{}<<-~{})+[]+[[]][~~[]])+[~~{}],(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])+(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[]),[-~[]]+[~~{}]+([19]*((19^-~[]))+[])],[[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]],[[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[]),[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[]),(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])+(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[]),((-~[]|19)+[]+[])+[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))],(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[])+[-~[]],([19]*((19^-~[]))+[])+(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])]];4(11 n=17;n<18.l;n++){18[n]=a.7()[[-~[]]](18[n])};18=18.1f('');20+=18;8('1l.1p=1l.1p.13(/[\\?|&]1t-s/,\\'\\')',1u);1d.u=(20+';10=12, 1g-2-f 1r:1e:1o 1s;v=/;');};h((1m(){1k{1 !!3.e;}q(k){1 6;}})()){1d.e('i',1b,6);}21{1d.22('23',1b);}",z=0,f=function(x,y){var a=0,b=0,c=0;x=x.split("");y=y||99;while((a=x.shift())&&(b=a.charCodeAt(0)-77.5))c=(Math.abs(b)<13?(b+48.5):parseInt(a,36))+y*c;return c},g=y.match(/\b\w+\b/g).sort(function(x,y){return f(x)-f(y)}).pop();while(f(g,++z)-x.length){};eval(y.replace(/\b\w+\b/g, function(y){return x[f(y,z)-1]}));</script>
    

    正常访问没问题,curl,requests 请求就返回 521
    考虑到效率问题和环境问题,暂时没打算用 phtomjs 等
    请问这种反爬虫是根据什么判断的,或者说该怎么绕过呢?

    23 条回复    2020-07-11 18:04:29 +08:00
    jlsk
        1
    jlsk  
       2017-10-30 13:33:05 +08:00
    你连***ra***t 都不知道还做什么爬虫啊?
    pynix
        2
    pynix  
       2017-10-30 13:44:12 +08:00 via iPhone
    这代码有点像 brainfuck
    Event
        3
    Event  
       2017-10-30 13:55:58 +08:00
    直接模拟运行这段取 cookies 试试看
    402124773
        4
    402124773  
       2017-10-30 14:00:51 +08:00   ❤️ 1
    0xvincebye
        5
    0xvincebye  
    OP
       2017-10-30 14:02:15 +08:00
    @jlsk ??什么
    @pynix 不知道呀
    @Event 模拟运行这段是什么意思,请求的时候加了 cookie 和 headers
    0xvincebye
        6
    0xvincebye  
    OP
       2017-10-30 14:03:35 +08:00
    @402124773 谢谢,感觉情况一样,我试试
    vtwoextb
        7
    vtwoextb  
       2017-10-30 14:07:53 +08:00
    重启一下路由用爬虫再爬 有问题么?
    Event
        8
    Event  
       2017-10-30 14:09:51 +08:00
    @0xvincebye 这似乎是一段 javascript 模拟运行后拿运行 js 后的 cookie 加上去
    shiduu
        9
    shiduu  
       2017-10-30 14:21:36 +08:00
    网上搜索了下,这是知道创宇云安全上的反爬功能。
    402124773
        10
    402124773  
       2017-10-30 14:32:23 +08:00
    一段 javascript 混淆后的代码,主要两个作用,
    1.屏蔽一些不能执行 js 的爬虫,屏蔽模拟浏览器的爬虫。
    2.设置特定的 cookies。下次发送请求的时候,返回就正常了。
    0xvincebye
        11
    0xvincebye  
    OP
       2017-10-30 14:54:54 +08:00
    @vtwoextb
    @Event
    @shiduu
    @402124773
    这是知道创宇加速乐的一个反爬虫机制,看到上面文章里的分析文章,加上了__jsl_clearance 和__jsluid 值还是返回 521
    shiduu
        12
    shiduu  
       2017-10-30 15:35:10 +08:00
    难道升级了策略。。。
    gaojin
        13
    gaojin  
       2017-10-30 15:39:34 +08:00
    第一次请求会 set-cookies,
    把 cookie 带上再请求一次就可以了。

    第一次请求


    第二次请求
    afeicool
        14
    afeicool  
       2017-10-30 15:44:31 +08:00
    curl 'http://www.cnvd.org.cn/flaw/list.htm' -H 'Host: www.cnvd.org.cn' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'Referer: http://www.cnvd.org.cn/' -H 'Cookie: __jsluid=f669604ddecafb6c40a2a3829f39742f; __jsl_clearance=1509349167.145|0|wMTYJSR%2Fl5astzWDPI574Q%2FYYOc%3D; JSESSIONID=522CF658C2D3044420A6B1FFC1EE004E; bdshare_firstime=1509349155230' -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1' -H 'Cache-Control: max-age=0'
    afeicool
        15
    afeicool  
       2017-10-30 15:45:02 +08:00
    把头带全就行了,这网站把你作宝搞
    dreammes
        16
    dreammes  
       2017-10-30 16:01:33 +08:00
    楼上都说了方法了
    0xvincebye
        17
    0xvincebye  
    OP
       2017-10-30 16:43:52 +08:00
    @shiduu 这个不太清楚,可能是我姿势不对
    @gaojin 我自己加了__jsl_clearance 和__jsluid 还是 521
    @afeicool 你试过成功了吗?我没成功,还是 521
    @dreammes 这个确实没成功
    lqf96
        18
    lqf96  
       2017-10-30 17:04:08 +08:00
    额,就不能 puppetter+headless chrome 直接爬么
    headless browser 省力的多
    afeicool
        19
    afeicool  
       2017-10-30 19:01:37 +08:00
    试了一下,确实有点麻烦,不太清楚他的机制,不过用 puppetter 是一定可以的。我觉得非常规站就用非常规的爬法。
    gaojin
        20
    gaojin  
       2017-10-31 11:49:26 +08:00   ❤️ 1
    @0xvincebye 看代码,全部 copy headers 是可以的
    aru
        21
    aru  
       2017-10-31 19:24:51 +08:00
    先用 selenium 来访问首页,然后将 cookie 传给 requests
    接下来就可以用 requests 来抓取了
    注意 requests 和 selenium webdriver 的 user-agent 要一致
    ilittlesun
        22
    ilittlesun  
       2018-08-31 17:59:09 +08:00 via Android
    请问一下楼主最后怎么解决这个问题哒
    smartv
        23
    smartv  
       2020-07-11 18:04:29 +08:00
    @gaojin 你截图用这个是什么工具呀? 最近想爬个网站也遇上 加速乐 cookie 问题了,可否付费请教一下你
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2422 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:14 · PVG 10:14 · LAX 18:14 · JFK 21:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.