一个Tor代理绕过访问限制的典型案例

一个Tor代理绕过访问限制的典型案例
Page content

在编写爬虫测试初期,我们一般会验证目标站点是否存在若干的访问限制防护措施。例如UA防护、访问频率限制、人机验证等。而些许站点虽然存在这样的防护,但也可以通过代理绕过。

图片验证

而当我们在遇到图片验证的时候,有以下几种选择。

capdemo.jpg

  • 云市场的识别API (金钱成本)
  • 打码平台 (金钱成本)
  • 自己训练样本识别 (时间成本,算法知识储备)
  • 放弃..

滑动验证

再者当出现滑动验证的时候,那可就比较够呛,我暂时知道以下几种。

geetest.png

  • 模拟js滑动(高失败率)
  • 训练真人滑动轨迹 (时间成本,算法知识储备)
  • 转写逻辑+训练轨迹 (时间成本,js调试能力,算法知识储备,耐心)
  • 再次放弃..

如果上述括号内的都具备了。那下文您啊就不用看啦

———–这是一条不起眼的大佬分割线———–

前段时间为了爬取关于虚拟货币方面的及时咨询就遇到这么个站点

bsj.png

通过使用调试工具我们可以看到。目标数据存在于中

bsj_raw.png

常规爬虫都会以轮询的方式对目标页进行爬取并应用相同的规则,在不同的时间节点取到不同的数据,而这个站,在刷了一段时间后,出现了这个么东西

hdyz.png

一个你不得不过的滑动验证..

这个时候我们将url丢入tor浏览器中发现,站点的滑动验证已经消失。

torres.png

这里我要提一下,此结果只是说明这个站点可以通过ip代理来绕过,使用tor仅仅是为了高效而又0成本造福群众。

tor网络就像下面这幅图一样杂乱

tornet.png

常规单条线路由 入口节点 -> 中转节点1 -> 中转接点2 -> 出口节点 组成,当然这个有点离题了。。抱歉没控制住。

也就是说,互联网上存在多少个tor节点,你就能有多少个代理!

yxzjsbl.png

此时我们可以通过借助在程序上部署tor代理来实现,

Tor端口说明

  • 9150 9050 socks5网络代理端口
  • 9151 9051 tor控制端口

部署说明

  • 图形化操作系统
    • 下载安装Tor浏览器启动即可 并通过netstat查看端口是否开启,具体命令不再赘述
  • 服务器 (这里以ubuntu为例)
    • sudo apt-get install tor -y
    • sudo vi /etc/tor/torrcControlPort#去掉后保存
    • sudo /etc/init.d/tor restart 重启tor服务
    • netstat -anot查看是否开始监听9x51端口

脚本控制切换线路模块

这里写一个简单的demo用来定时切换线路

  • stem tor控制模块
import logging
import time

import requests
from pyquery import PyQuery as jq
from stem import Signal
from stem.control import Controller

logging.basicConfig(format= "[%(asctime)s] >>> %(levelname)s  %(name)s: %(message)s",level=logging.INFO)
loger = logging.getLogger("Torctl")
controller = Controller.from_port(port=9151)
controller.authenticate()


def main():

    while True:
        time.sleep(2)
        loger.info('NewID')
        checkIP()
        controller.signal(Signal.NEWNYM)

def checkIP():
    try:
        resp = requests.get('https://ipinfo.info/html/my_ip_address.php', proxies={
            'https': 'socks5://127.0.0.1:9150'
        })
        loger.info(jq(resp.text)("#Text10 > p > span > b").text())
    except Exception as e:
        loger.error(e)
    

if __name__ == '__main__':
    main()

这样就完成了一个自动tor切换的脚本,你的代理已经在全世界飞了,当然实际根据被Ban时切换。

torchange.png