0
votes

I know similar questions have been asked several times:

General SOCKS server failure with python tor but working from tor browser

General SOCKS server failure when switching identity using stem

General SOCKS server failure while using tor proxy

I checked all related posts and googled a lot, but still got stuck.

I'm on Win10. I download Tor browser, run it and make sure it's on port 127.0.0.1:9150 with cmd netstat -aon in administrator. Then I run the following example code in Python:

import socks
import socket
socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 9150)
socket.socket = socks.socksocket

The last line socket.socket = socks.socksocket gives the Error message. socks.GeneralProxyError: Socket error: 0x01: General SOCKS server failure It's supposed to return a socket object which is assigned to socket.socket that opens a socket. Like this example:

https://deshmukhsuraj.wordpress.com/2015/03/08/anonymous-web-scraping-using-python-and-tor/

Can anyone tell me what's wrong? Thanks.

Update

Thanks to drew010's answer, this code will work (with Tor browser running and it's port = 9150):

import requests

proxies = {
    'http': 'socks5h://127.0.0.1:9150',
    'https': 'socks5h://127.0.0.1:9150'
}

url = 'http://icanhazip.com'

# request without Tor (original IP)
r = requests.get(url)
print(r.text)

# request with Tor (Tor IP)
r = requests.get(url, proxies=proxies)
print(r.text)

# Force change IP
from stem.control import Controller
from stem import Signal

with Controller.from_port(port = 9151) as controller:
    controller.authenticate('mypassword')  
    controller.signal(Signal.NEWNYM) 

# Changed Tor IP
r = requests.get(url, proxies=proxies)
print(r.text)

Note that we need to set password in torrc before.

1
Thanks, it works. But is there any way to force IP change? Tor changes IP every couple of minutes. - David
You can force a change using the code in the answer here: stackoverflow.com/questions/33490484/… You will need to modify your torrc to set a HashedControlPassword, then connect using Stem Controller on port 9151 (for Tor Browser Bundle) and issue the SIGNAL NEWNYM command to change IP. Bear in mind you can only do this once every 10-30 seconds, and Tor only has a limited number of usable Exit IP addresses. If either of those answers were helpful, please consider up-voting them. Thanks! - drew010
Thanks, problem solved. Could you copy-paste your comments in an answer? So I can mark it as a solution and end this case. - David

1 Answers

0
votes

by doing "socket.socket = socks.socksocket" you're actually replacing each future socket objects to actually be a socksocket object, which means after that you can just use regular sockets and they will go through your socks proxy.