【问题标题】:Wrap packets in connect requests until reach the last proxy在连接请求中包装数据包,直到到达最后一个代理
【发布时间】:2018-02-11 18:32:21
【问题描述】:

我总是问自己,代理链如何构建这样的代理链:

我的电脑 -> proxy1 -> proxy2 -> proxy3 -> proxy4 -> proxy5 -> 站点

该程序如何使所有这些链都链接起来,请求通过所有这些代理发送到站点,并且答案通过所有这些代理发送到我的电脑?是否可以使用套接字库制作代理链:

mysocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

或其他类似的库?

我想知道它是如何工作的,因为我知道代理链是用 C 编写的,而且我只知道 Python,所以我无法分析源代码。

【问题讨论】:

    标签: python python-3.x sockets proxy


    【解决方案1】:

    代理链背后的主要思想是代理允许您建立通往另一个系统的隧道。例如,如果您想通过 HTTP 代理 A 和 SOCKS4 代理 B 访问系统 T,请执行以下操作:

    • 创建到代理 A 的 TCP 连接(即套接字)。
    • 发出 HTTP CONNECT 请求以建立到代理 B 的隧道 - 有关 CONNECT 的详细信息,请参阅RFC 2817。建立此隧道后,您的套接字仍连接到代理 A,但代理 A 会将您的所有数据发送到代理 B,反之亦然。
    • 在套接字上发送 SOCKS4 标头以通过代理 B 建立另一个隧道。此 SOCKS4 标头将从您的系统通过套接字发送到代理 A,然后将其转发给代理 B。然后 B 将连接到最终目标 T 基于此标头中的信息,然后将其接收到的任何数据(通过代理 A 从您的程序中获取)转发给 T,反之亦然。有关 SOCKS 协议的更多信息,请参阅Wikipedia

    从那时起,您从套接字发送到代理 A 的任何数据都将转发到代理 B,然后转发到目标 T。类似的 T 会将其响应发送回 B,B 将其发送回 A,A 将其发送到你的申请。

    是否可以使用套接字库创建代理链:

        mysocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)   
    

    或其他类似的库?

    从上面的描述中可以看出,需要这些步骤

    • 创建一个套接字
    • 将套接字连接到代理 A
    • 创建通过 A 到代理 B 的隧道 - 使用 HTTP 或 SOCKS 协议
    • 类似地通过 [A,B] 创建隧道到代理 C
    • 类似的创建一个通过 [A,B,C] 到 D 的隧道
    • ...直到您的最后一个代理被指示建立通往最终目标的隧道 T

    只要您对 HTTP 和 SOCKS 协议有适当的了解,这可以在 Python 中轻松实现。或者您可以简单地将您的 python 程序包装到类似于任何其他程序的代理链中。这将神奇地连接到连接并为您构建隧道。

    【讨论】:

      猜你喜欢
      • 2011-11-29
      • 2013-11-14
      • 2019-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多