首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用阀杆切换标识时一般SOCKS服务器故障

使用阀杆切换标识时一般SOCKS服务器故障
EN

Stack Overflow用户
提问于 2015-01-19 23:37:05
回答 3查看 10.9K关注 0票数 3

我让Tor运行在9150端口上的远程服务器(Ubuntu)上,控制端口9151上运行。我已经确认这两种情况都是通过netstat -ant运行的。

下面是我的代码,它会导致SOCKS5Error: 0x01: General SOCKS server failure错误。

代码语言:javascript
复制
import socks
import socket
socks.set_default_proxy(socks.SOCKS5, server_ip, 9150)
socket.socket = socks.socksocket

我可以从任何库中发出请求,并成功地获得带有tor地址的响应。

但是,以下是导致错误的原因:

代码语言:javascript
复制
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 (第一个代码段)设置代理的情况下运行上面的,我就可以毫不费力地发出信号。

EN

回答 3

Stack Overflow用户

发布于 2015-12-29 18:28:15

一旦连接到Tor,就不能打开新的控制器。尝试在脚本顶部打开一个控制器。然后Tor连接和信号器都使用相同的控制器对象。

这似乎适用于Python3:

代码语言:javascript
复制
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)
票数 8
EN

Stack Overflow用户

发布于 2015-01-22 16:24:07

您的第一个代码片段是通过tor代理通信,但是Stem的Controller.from_port()方法也使用套接字模块。因此,Stem试图连接到您的本地控制端口,通过tor退出节点进行代理,然后无法连接。

票数 2
EN

Stack Overflow用户

发布于 2016-07-12 15:55:26

当您尝试打开到端口9051的新连接时,当一个旧连接仍然打开时,我看到了这个错误。我用这种方式解决了这个问题。

代码语言:javascript
复制
#----------------Cut Here----------------------

import stem
from stem import Signal
from stem.control import Controller
from stem.connection import connect
import time
#
# Create a new controller 
#
controller = Controller.from_port()
Password = "My_Personal_Password"
#
def renew_tor():
    global controller
    global Password
    print ('Renewing Tor Circuit')
    if "stem.control.Controller" not in str(controller):
      #if global controller exist no more
      controller = Controller.from_port()
    # debug output
    print (controller)
    # authenticare the connection with the server control port 
    controller.authenticate(Password)
    print ('Tor running version is : %s' % controller.get_version() )
    # force a new circuit
    controller.signal(Signal.NEWNYM)
    # wait for new circuit
    time.sleep(10)
    print ('New Tor circuit estabilished')

if __name__ == "__main__":
    for i in range (10000):
      print ( " Attempt n. : %i " % i)  
      renew_tor()


#----------------Cut Here(end)--------------------------------------------

通过您的个人密码,您可以使用以下命令创建一个散列

tor --哈希密码My_Personal_Password

生成的字符串具有以下格式

16:CA850F5648.........

这必须插入/etc/tor/torrc文件中。

下:

HashedControlPassword 16: CA850F5648 .

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28035413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档