如何在python中创建一个简单而安全的Socks5代理?

2024-05-15 08:57:12 发布

您现在位置:Python中文网/ 问答频道 /正文

几天前,我想建立一个代理,可以让我安全和匿名地连接到网站和服务器。一开始这似乎是一个非常简单的想法,我会创建一个HTTP代理,在客户端和代理之间使用SSL,然后创建一个SSL连接,连接到客户端和服务器,然后将这些信息转发给客户端和服务器。我花了一天的时间研究和编写代码来实现这一点。但我后来意识到,有人可能会破坏代理,使用代理必须解密的会话密钥,并读取发送到服务器和从服务器发送的数据。在

经过进一步的研究,我似乎需要一个袜子代理。然而,关于socks代理的python版本的文档并不多(主要是如何连接到socks代理)。我找到了The PySocks Module并阅读了袜子.py文件。它看起来很适合创建客户机,但我不知道如何使用它来创建代理。在

我想知道是否有人有一个简单的socks5代理示例,或者是否有人可以为我指出一些可以帮助我开始学习和构建socks5代理的材料?在


Tags: 代码服务器信息http客户端ssl代理网站
1条回答
网友
1楼 · 发布于 2024-05-15 08:57:12

我建议使用requesocksstem(假设为Tor)。The official ^{} library is provided by Tor。下面是一个基于我编写的scraper的简化示例,它也使用fake_useragent,因此您看起来像一个浏览器:

import requesocks

from fake_useragent import UserAgent
from stem import Signal
from stem.control import Controller


class Proxy(object):
    def __init__(self, 
                 socks_port=9050,
                 tor_control_port=9051,
                 tor_connection_password='password')

        self._socks_port = int(socks_port)
        self._tor_control_port = int(tor_control_port)
        self._tor_connection_password = tor_connection_password
        self._user_agent = UserAgent()
        self._session = None
        self._update_session()

    def _update_session(self):
        self._session = requesocks.session()

        # port 9050 is the default SOCKS port
        self._session.proxies = {
            'http':  'socks5://127.0.0.1:{}'.format(self._socks_port),
            'https': 'socks5://127.0.0.1:{}'.format(self._socks_port),
        }

    def _renew_tor_connection(self):
        with Controller.from_port(port=self._tor_control_port) as controller:
            controller.authenticate(password=self._tor_connection_password)
            controller.signal(Signal.NEWNYM)

    def _sample_get_response(self, url):
        if not self._session:
            self._update_session()

        # generate random user agent string for every request
        headers = {
            'User-Agent': self._user_agent.random,
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Language': 'en-us,en;q=0.5',
        }  # adjust as desired

        response = self._session.get(url, verify=False, headers=headers)
        return response

在执行此脚本之前,必须运行Tor服务,还必须修改torrc文件以启用控制端口(9051)。在

如果您是从源代码处编译Tor,Tor将torrc文件放入/usr/local/etc/tor/torrc,如果您安装了预构建的包,/etc/tor/torrc或{}。如果安装了Tor浏览器,请查找 Browser/TorBrowser/Data/Tor/torrc在Tor浏览器目录中(在Mac OS X上,必须右键单击或命令单击Tor浏览器图标并选择“显示软件包内容”,然后Tor浏览器目录变为 可见)。在

找到torrc文件后,需要取消对相应行的注释:

^{pr2}$

请注意,上面的HashedControlPassword是密码“password”。如果要设置其他密码(推荐),请在torrc文件中添加HashedControlPassword,注意tor hash-password "<new_password>"的输出,其中<new_password>是要设置的密码。在

一旦您更改了torrc文件,您将需要重新启动tor以使更改生效(请注意,您实际上只需要向tor发送HUP信号,而不是实际重新启动它)。要重新启动它:

sudo service tor restart

我希望这对你有所帮助,至少能让你开始寻找你想要的东西。在

相关问题 更多 >