无法在没有sudo的情况下通过tor在python脚本中路由请求

时间:2018-01-18 20:46:41

标签: python linux sudo tor

我正在尝试通过tor在python脚本中路由请求。 这是代码:

#!/usr/bin/env python3

import socket
import socks
from urllib import request

socks.set_default_proxy(socks.SOCKS5, '127.0.0.1', 9050)
socket.socket = socks.socksocket
ip = request.urlopen('https://api.ipify.org/').read()
print(ip)

当我尝试以用户身份运行它(只是“./ script.py”)时,它崩溃并出现以下错误:

urllib.error.URLError: <urlopen error Socket error: 0x01: General SOCKS server failure>

但是如果我使用 sudo “sudo ./script.py”)运行脚本,它会按预期工作并打印一个tor IP。如何在没有 sudo 的情况下让它工作?

编辑1 :我认为tor安装没问题,因为它适用于其他语言(例如,我可以从 Go 脚本执行请求。此外,我将代理dict传递给 requests.get()时可以让我的python脚本与tor一起工作(如下面的评论所示)。这个解决方案是可以接受的,但我仍然想知道,我的错误是什么脚本。

编辑2 :我正在运行Linux Mint 18.3 64位。 Python和Python3已预先安装。 Tor是通过存储库安装的( sudo apt-get install tor )。我尝试全局安装PySocks( sudo pip3安装PySocks )并且只针对当前用户( pip3 install --user PySocks )。

2 个答案:

答案 0 :(得分:1)

您是否尝试过查看:https://tor.stackexchange.com/questions/7101/general-socks-server-failure-while-using-tor-proxy?这似乎是您正在寻找的,他们表明这可以使用127.0.0.2上的中间连接解决。看看吧!

答案 1 :(得分:1)

我已经在我的机器上尝试了你的代码(在安装了正确的软件包之后)并且它可以正常工作。在系统中安装/运行Tor的方式应该是错误的。您可以随意在问题中添加有关安装的详细信息,我会尝试查看它。