2017-09-03 27 views
0

我总是问自己proxychains如何构建这样一个代理链:包裹包中的连接请求,直到到达最后一个代理

我的电脑 - > PROXY1 - > Proxy2将 - > Proxy3服务器 - > proxy4 - > proxy5 - >网站

这个计划如何使可能的,这一切链连接,并要求通过所有这些代理和答案通过所有这些代理去我的电脑去现场?这是否可以使用套接字库做一个代理链:

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

或其他一些类似的库吗?

我想知道它是如何工作的,因为我知道proxychains是用C语言编写,因为我只知道Python的,我不能分析源。

回答

2

proxychains背后的主要思想是,代理允许你建立一个隧道到另一个系统。例如,如果你想通过HTTP代理和SOCKS4代理B进入系统T优执行以下操作:

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

从此以后你从插座代理一个发送将被转发到代理B,然后转发到目标T.类似牛逼的任何数据将发送其响应回到B将发回给A,其会将它发送到您的应用程序。

这是不可能性,使使用套接字库代理链:

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

或其他一些图书馆这样吗?

正如你可以从该描述见上文需要

  • 的步骤创建一个套接字
  • 连接插座代理一个
  • 通过A创建隧道到代理乙 - 要么与HTTP或SOCKS协议
  • 类似创建经由隧道[A,B]到代理ç
  • 类似创建通过[A,B,C]的隧道d
  • ...直到您的最后一个代理被指示将通道建立到最终目标为止T

只要您具有HTTP和SOCKS协议的相应知识,就可以在Python中轻松实现。或者你可以简单地将你的Python程序包装成类似于任何其他程序的代理链。这将神奇地钩入连接并为您建造隧道。

+0

我不知道我怎么能感谢你... – AllExJ

相关问题