Python反向代理连接

时间:2017-09-30 16:14:38

标签: python tcp proxy

enter image description here

我试图让HTTP / S代理服务器无需手动移植即可正常工作。

  • 计算机A已安装代理服务器
  • 机器A位于NAT(或带防火墙的路由器)后面。
  • 机器B尝试通过机器A代理浏览互联网。
  • 机器B不在NAT后面。
  • 在建立连接之前,两台机器都互相认识。
  • 在完整规模中,会有多台机器A但只有一台机器B

机器A不需要在路由器上配置任何东西。

根据this answer,我已经考虑过使用uPnP,但作为这个问题的标题,我想知道是否可以反转机器的角色。

而不是机器B启动连接,机器A将执行此操作。所以机器A将是客户端而机器B将是服务器。记住机器A事先知道机器B的IP地址。

在这种情况下,计算机A仍可用作代理,但在标准TCP连接中具有客户端的角色。

我知道这需要一个定制的代理服务器,这是没问题的,因为代理服务器是在python中实现的,我可以访问源代码,并且可以修改它。

  • 这是否与普通的HTTP / S代理兼容?具体来说,我将在机器B上使用python requests
  • 这个方法有名字吗?研究反向让我对反向代理进行研究,AFAIK与我尝试的事情没有任何关系完成。
  • 我有什么遗失的东西吗?还是另类解决方案? (除了uPnP)

2 个答案:

答案 0 :(得分:1)

一个简单的解决方案是OpenSSH端口转发。

首先将“机器B”上的端口20000转发到具有远程端口转发功能的“机器A”上的端口10000:

[A]$ ssh -N -R 20000:localhost:10000 Machine_B

然后在具有动态端口转发的“机器A”上的端口10000上设置隧道:

[A]$ ssh -N -D 10000 localhost

现在您可以在“机器B”上使用127.0.0.1:20000作为SOCKS5代理:

[B]$ curl --socks5 127.0.0.1:20000 example.com

答案 1 :(得分:0)

它称为“反向”,您需要shootback来反向TCP隧道,它像OpenSSH端口转发和pysocks之类的Socks5代理服务器一样工作,它比HTTP / S代理服务器更好。

在MachineB(您)上

python3 master.py -m 0.0.0.0:10000 -c 0.0.0.0:10800

在MachineA(远程)上

python socks5.py start --port=1080
python slaver.py -m <MachineA_IP>:10000 -t 127.0.0.1:1080

现在在MachineB上,您可以将浏览器或任何应用程序设置为袜子5

localhost:10800