说明

本文参考自:
http://ningning.today/2016/03/07/python/python-requests-tor-crawler/
http://stackoverflow.com/questions/6216653/how-to-let-tor-change-ip-automatically

工具

国外ubuntu服务器一台。

安装

1、安装tor

1
apt-get update && apt-get install tor

2、生成密码

1
tor --hash-password mypassword

3、编辑/etc/tor/torrc,加上

1
2
3
ControlPort 9051
HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C
MaxCircuitDirtiness 10

16后面的hash根据上一条命令生成的hash来修改, MaxCircuitDirtiness 10代表10秒更换一次ip,可以自定义。
4、重启tor服务

1
/etc/init.d/tor restart

编写代码

代码基本上来自http://ningning.today/2016/03/07/python/python-requests-tor-crawler/ ,但是发现不能用,只修改了几行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
import requests
import requesocks
import time
url = 'https://api.ipify.org?format=json'
def getip_requests(url):
print "(+) Sending request with plain requests..."
r = requests.get(url)
print "(+) IP is: " + r.text.replace("\n", "")
def getip_requesocks(url):
print "(+) Sending request with requesocks..."
session = requesocks.session()
session.proxies = {'http': 'socks5://127.0.0.1:9050',
'https': 'socks5://127.0.0.1:9050'}
r = session.get(url)
print "(+) IP is: " + r.text.replace("\n", "")
def main():
print "Running tests..."
getip_requests(url)
while True:
getip_requesocks(url)
time.sleep(10);
if __name__ == "__main__":
main()

效果

ip_change
可以看到,第一个是自己的ip,之后是使用tor代理获得的ip,每十秒换一个。