Python - 如何创建代理隧道

时间:2017-09-05 21:06:26

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

我问了这个问题: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创建一个到proxyB的隧道,然后代理B来创建一个隧道代理进入最终网站的C ..

如何使用python执行此操作的示例?还是一些医生?

1 个答案:

答案 0 :(得分:1)

CONNECT没有主机头。即请求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等协议。