【发布时间】:2018-01-16 23:10:22
【问题描述】:
我知道类似的问题已经被问过好几次了:
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
我检查了所有相关的帖子并用谷歌搜索了很多,但仍然卡住了。
我在 Win10 上。我下载了 Tor 浏览器,运行它并确保它在端口 127.0.0.1:9150 上,并在管理员中使用 cmd netstat -aon。
然后我在 Python 中运行以下示例代码:
import socks
import socket
socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 9150)
socket.socket = socks.socksocket
最后一行socket.socket = socks.socksocket 给出了错误消息。
socks.GeneralProxyError: Socket error: 0x01: General SOCKS server failure
它应该返回一个套接字对象,该对象分配给打开套接字的 socket.socket。像这个例子:
https://deshmukhsuraj.wordpress.com/2015/03/08/anonymous-web-scraping-using-python-and-tor/
谁能告诉我怎么了? 谢谢。
更新
感谢draw010的回答,这段代码可以正常工作(运行Tor浏览器并且端口= 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)
注意,我们需要在torrc之前设置密码。
【问题讨论】:
-
谢谢,它有效。但是有什么办法可以强制改变IP吗? Tor 每隔几分钟就会更改一次 IP。
-
您可以在此处使用答案中的代码强制更改:stackoverflow.com/questions/33490484/… 您需要修改您的 torrc 以设置
HashedControlPassword,然后使用端口 9151 上的 Stem Controller 连接(对于 Tor 浏览器Bundle)并发出SIGNAL NEWNYM命令更改IP。请记住,您只能每 10-30 秒执行一次此操作,并且 Tor 只有有限数量的可用退出 IP 地址。如果其中任何一个答案有帮助,请考虑对它们进行投票。谢谢! -
谢谢,问题已解决。您可以在答案中复制粘贴您的 cmets 吗?所以我可以将其标记为解决方案并结束此案例。