前回、torをUbuntu/CentOSへインストールし利用できるようにしたので、今回はPythonからtor経由でのアクセスを行うようにする。 色々なやり方はあるようなので、2つほど試してみる。
1. requesocksを使う場合
requestsのforkでsocksを使うことができるパッケージがあるので、これで対応するのが楽そうだ。 事前にpipでインストールをしておく。
sudo pip install -U requests[socks]
後は、以下のように使用してtor経由でアクセスをすると良い。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
get = requests.get('http://httpbin.org/ip',
proxies=dict(http='socks5://127.0.0.1:9050',
https='socks5://127.0.0.1:9050')).text
print(get)
blacknon@BS-PUB-DEVELOP:~$ cat tortest1.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
get = requests.get('http://httpbin.org/ip',
proxies=dict(http='socks5://127.0.0.1:9050',
https='socks5://127.0.0.1:9050')).text
print(get)
blacknon@BS-PUB-DEVELOP:~$
blacknon@BS-PUB-DEVELOP:~$ python ./tortest1.py
{
"origin": "51.255.196.218"
}
blacknon@BS-PUB-DEVELOP:~$ sudo systemctl restart tor
blacknon@BS-PUB-DEVELOP:~$ python ./tortest1.py
{
"origin": "109.163.234.8"
}
blacknon@BS-PUB-DEVELOP:~$ sudo systemctl restart tor
blacknon@BS-PUB-DEVELOP:~$ python ./tortest1.py
{
"origin": "188.65.144.2"
}
2. Pysocksを使う場合
Pysocksを使う場合、以下のようにする。 (インストールがされていない場合は、事前にpipでインストールをする)
sudo pip insall pysocks
#!/usr/bin/python
# -*- coding: utf-8 -*-
import socks,socket
import urllib2
socks.setdefaultproxy(proxy_type=socks.PROXY_TYPE_SOCKS5, addr='127.0.0.1', port=9050)
socket.socket = socks.socksocket
print(urllib2.urlopen('http://httpbin.org/ip').read())
blacknon@BS-PUB-DEVELOP:~$ cat tortest2.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import socks,socket
import urllib2
socks.setdefaultproxy(proxy_type=socks.PROXY_TYPE_SOCKS5, addr='127.0.0.1', port=9050)
socket.socket = socks.socksocket
print(urllib2.urlopen('http://httpbin.org/ip').read())
blacknon@BS-PUB-DEVELOP:~$ python tortest2.py
{
"origin": "89.234.157.254"
}
blacknon@BS-PUB-DEVELOP:~$ sudo systemctl restart tor
blacknon@BS-PUB-DEVELOP:~$ python tortest2.py
{
"origin": "51.15.53.134"
}
blacknon@BS-PUB-DEVELOP:~$ sudo systemctl restart tor
blacknon@BS-PUB-DEVELOP:~$ python tortest2.py
{
"origin": "163.172.212.115"
}
とりあえずこんな感じだろうか。