使用词干切换标识时,常规SOCKS服务器故障

Chr*_*ong 3 python proxy tor socks web-scraping

我在端口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
Run Code Online (Sandbox Code Playgroud)

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

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

from stem import Signal
from stem.control import Controller

with Controller.from_port(port = 9151) as controller:
  controller.authenticate(password)
  controller.signal(Signal.NEWNYM)
Run Code Online (Sandbox Code Playgroud)

如果我在没有使用socks(第一个代码片段)设置代理的情况下运行上述操作,我可以毫无问题地发出信号.

cha*_*ani 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)
Run Code Online (Sandbox Code Playgroud)