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

时间:2015-01-19 23:37:05

标签: python proxy web-scraping tor socks

我在端口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(第一个代码段)运行上面的而没有设置代理,我可以毫无问题地发出信号。

3 个答案:

答案 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 .........