How to connect Tor with Python
เรารู้กันดีว่า Tor เป็น Anonymous proxy ที่ระบุตัวตนไม่ได้ แต่เราก็ต้องแลกมากกับความว่า ช้า
ในเมื่อเรารู้กันดีอยู่แล้ว เรามาเริ่มใช้งานกันเลยดีกว่า ผมแนะนำให้ Install ผ่าน Package management จะดีกว่า Download browser มาลง
For MacOS
# Install via HomeBrew
$ brew install tor
# Start Tor
$ tor
หลังจากลงเสร็จจะมี configuration file ที่เราควรจะเอาไปเพื่ออะไรนิดหน่อย สำหรับ MacOS file จะอยู่ที่ /usr/local/etc/tor/torrc
ให้เพิ่มไปตามนี้
$ cat /usr/local/etc/tor/torrc
# For new Identity
ControlPort 9051
เรามาเริ่มเขียน Python ต่อไปยัง Tor กัน แต่ก่อนอื่นต้องลง Lib socks
requests
or urllib2
หรืออะไรก็ได้ที่ส่ง http request ได้
#!/usr/bin/env python
"""
Author: Blythe LilYoojun
Lib Require: socks and Tor proxy
"""
import socket
import socks
import requests
ipcheck_url = 'http://checkip.amazonaws.com/'
def connentTor():
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', 9050)
socket.socket = socks.socksocket
if __name__ == '__main__':
connentTor()
print(requests.get(ipcheck_url).text)
ผลลัพธ์
$ pyhton simpleTor.py
5.214.112.76
เท่านี้ไม่พอ เรายังอยากได้ เปลี่ยน IP Address ทุกครั้งที่มีการส่ง request
ทุกครั้งที่เรา start tor
มันจะเปิด port ตามที่ config ไว้ในไฟล์ torrc
ไว้ให้เราเข้าไป control อะไรบ้างอย่าง แต่ในที่นี้เราจะส่งสัญญาณบอก tor ว่าเราจะของ IP ใหม่นะ ซึ่งเราสามารถลองส่งค่าต่างๆ ด้วยการ telnet ไปยัง port 9051 ได้เลย
$ telnet localhost 9051
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
AUTHENTICATE
250 OK
SIGNAL NEWNYM
250 OK
อีก Shell หนึ่งเปิด run simpleTor.py จะได้ ip ใหม่มา ทุกๆ การส่งสัญญาณ NEWNYM
$ pyhton simpleTor.py
17.100.43.8
ได้แล้ว เรามาลองเขียนเป็น program กันดู
#!/usr/bin/env python
"""
Author: Blythe LilYoojun
Lib Require: socks and Tor proxy
"""
import socket
import socks
import requests
ipcheck_url = 'http://checkip.amazonaws.com/'
def connentTor():
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', 9050)
socket.socket = socks.socksocket
def getNewIP():
socks.setdefaultproxy()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("127.0.0.1", 9051))
s.send("AUTHENTICATE\r\n")
r = s.recv(128)
if r.startswith("250"):
s.send("SIGNAL NEWNYM\r\n")
s.close()
connentTor()
if __name__ == '__main__':
connentTor()
print(requests.get(ipcheck_url).text)
getNewIP()
print(requests.get(ipcheck_url).text)
เท่านี้เราก็จะได้ Python script ที่ต่อไปยัง Tor แล้วได้ IP ใหม่ทุกๆ การ request แล้วครับ
Reference