【问题标题】:Python - How to create a tunnel of proxiesPython - 如何创建代理隧道
【发布时间】:2018-02-14 05:51:07
【问题描述】:

我问了这个问题:Wrap packets in connect requests until reach the last proxy

我了解到,要创建代理链,我必须:

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

在第二点之前我已经完成了我必须做的事情,因为我认为我只需将“CONNECT”标头添加到代理 A 的 http 请求中。但我的问题是, 在这个例子中的 http 请求:

CONNECT ipproxy:80 HTTP/1.1
Host: ?:80

在主机头中我应该再次放置代理 ip 还是其他东西?喜欢代理B ip还是最终站点域?

另外,我不明白如何从第三点继续到下一个...因为我不知道如何告诉代理 A 创建到代理 B 的隧道,然后代理 B 创建一个隧道代理到最终站点的 C..

如何使用 python 实现的示例?还是一些文档?

【问题讨论】:

标签: python python-3.x sockets proxy tunnel


【解决方案1】:

没有带有 CONNECT 的 Host 标头。 IE。请求 HTTP 代理 A 创建一条到您刚刚使用的 HTTP 代理 B 的隧道:

>>> CONNECT B_host:B_port HTTP/1.0
>>>
<<< 200 connections established
<<<

然后你有这个隧道通过代理 A 到代理 B。在这个隧道内你可以创建另一个隧道到目标 T,即在同一个套接字上发送和接收下一个:

>>> CONNECT T_host:T_port HTTP/1.0
>>>
<<< 200 connections established
<<<

请注意,并非所有代理都允许您连接到任意主机和端口,它们也可能不允许任意协议(如隧道内的隧道),而仅允许选择的协议(如 HTTPS)。

【讨论】:

  • 再次感谢。在我将您的答案标记为已接受之前,我想问您,袜子请求呢?对于 http 代理,我必须发送这些 CONNECT 数据包.. 对于袜子?我是否必须发送带有 CONNECT 标头的 HTTP 请求,例如 HTTP 代理?
  • @AllExJ:正如我在对您甚至引用的其他问题的回答中所写的那样:有一个文档 SOCKS 是如何工作的,您必须遵循它,就像您需要遵循的那样如果是 HTTP 代理,则为 CONNECT 的 RFC。尽管 SOCKS 更复杂(特别是如果您不仅实现 SOCKS4,还实现 SOCKS4a 和 SOCKS5),但基本思想与 HTTP 代理相同。
猜你喜欢
  • 2014-08-04
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 2012-09-16
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多