我在端口9150上的远程服务器(Ubuntu)上运行Tor,控制端口在9151上。我已经确认两者都是通过netstat -ant运行。
这是我的代码,它引出了SOCKS5Error: 0x01: General SOCKS server failure
错误。
import socks
import socket
socks.set_default_proxy(socks.SOCKS5, server_ip, 9150)
socket.socket = socks.socksocket
我可以从任何库发出请求,并使用转发地址成功获得回复。
但是以下是导致错误的原因:
from stem import Signal
from stem.control import Controller
with Controller.from_port(port = 9151) as controller:
controller.authenticate(password)
controller.signal(Signal.NEWNYM)
如果我使用socks(第一个代码段)运行上面的而没有设置代理,我可以毫无问题地发出信号。
答案 0 :(得分:8)
连接Tor后,无法打开新控制器。尝试在脚本顶部打开一个控制器。然后,Tor连接和信号器都使用相同的控制器对象。
这似乎适用于Python3:
import time
import socket
import socks
import requests
from bs4 import BeautifulSoup
from stem import Signal
from stem.control import Controller
controller = Controller.from_port(port=9051)
def connectTor():
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5 , "127.0.0.1", 9050, True)
socket.socket = socks.socksocket
def renew_tor():
controller.authenticate(<INSERT YOUR PASSPHRASE HERE>)
controller.signal(Signal.NEWNYM)
def show_my_ip():
url = "http://www.showmyip.gr/"
r = requests.Session()
page = r.get(url)
soup = BeautifulSoup(page.content, "lxml")
ip_address = soup.find("span",{"class":"ip_address"}).text.strip()
print(ip_address)
for i in range(10):
renew_tor()
connectTor()
showmyip()
time.sleep(10)
答案 1 :(得分:1)
您的第一个代码段是通过tor代理流量,但Stem的Controller.from_port()方法也使用套接字模块。因此,Stem尝试连接到本地控制端口,通过tor出口节点进行代理,然后无法连接。
答案 2 :(得分:0)
我看到当您尝试打开到端口9051的新连接时发生此错误,而旧连接仍处于打开状态。我用这种方式解决了这个问题。
<?php
//
// A very simple PHP example that sends a HTTP POST to a remote site
//
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.example.com/tester.phtml");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
"postvar1=value1&postvar2=value2&postvar3=value3");
// in real life you should use something like:
// curl_setopt($ch, CURLOPT_POSTFIELDS,
// http_build_query(array('postvar1' => 'value1')));
// receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
curl_close ($ch);
// further processing ....
if ($server_output == "OK") { ... } else { ... }
?>
您可以使用个人密码使用命令
创建哈希tor --hash密码My_Personal_Password
,结果字符串的格式为
<强> 16:CA850F5648 ......... 强>
必须将其插入文件/ etc / tor / torrc
下:
HashedControlPassword 16:CA850F5648 .........