tcp端口转发

Windows

Windows内置了tcp端口转发的功能,通过netsh interface portproxy命令设置,PortProxy 对其做了封装,通过图形界面即可进行管理。

Linux

ssh就可以实现tcp端口转发,而且很强大。
假定client可建立到server的ssh连接。
可以在client上监听端口pl,通过client<–>server的ssh隧道,建立client:listen-port <==> client<-->server <==> target:target-port的连接,这称为本地端口转发。
可以在server上监听端口pl,通过server<–>client的ssh隧道,建立server:listen-port <==> server<-->client <==> target:target-port的连接,这称为远程端口转发。

本地端口转发,在client上执行:
ssh -L listen-port:target:target-port server

远程端口转发,在client上执行:
ssh -R listen-port:target:target-port server

其他选项:
-g	Allow remote hosts to connect to forwarded ports.
-N	Do not execute a shell or command.
-f	Fork into background after authentication.
不加-g,会在127.0.0.1上监听,加了-g,会在0.0.0.0上监听
不加-fN,会登陆到server上,登出时隧道也关闭;加了-fN,进程会在server后台运行

本地端口转发中,target和target-port都是指定好的,还有一种本地动态端口转发,选项是-D listen-port,这种转发不提前指定目的地址和目的端口,而是去读取应用发起的请求,从请求中获取目的信息。ssh将作为一个SOCKS server,支持SOCKS4和SOCKS5协议。

例子1
host1是一个公网服务器(有公网ip),但22端口没对公网开放,仅开放了若干其他端口对外提供TCP或基于TCP的应用层服务,这里假定端口为px、py、pz。
如果将host1上px转发到22端口,能访问host1的主机便可建立与host1的ssh连接。
在host1上执行 ssh -gfNL px:localhost:22 localhost
这里client、server均是host1,host1:22是target
其他主机登陆host1的命令是:ssh host1 -p px

例子2
host2是一个内网机器,能访问公网。
在例子1的配置后,host2已能建立与host1的ssh连接。
如果其他机器想要登陆host2,可通过host1的py端口转发到host2的22端口。
在host2上执行 ssh -gfNR py:localhost:22 host1 -p px
这里host2是client,host1是server,host2:22是target
其他主机登陆host2的命令是:ssh host1 -p py
这里也可不指定-g,先登陆到host1上,再执行ssh localhost -p py即可

例子3
host2所在的局域网中有一些http服务器,如何让能访问公网的机器上的浏览器可以通过host2访问这些网址?
在例子2中包括host1自身在内的其他机器已经能建立与host2的ssh连接了。
可通过host1的pz端口,通过host1<–>host2的连接,将http请求转发至目标http服务器。
在host1上执行 ssh -gD pz localhost -p py,然后在想要访问那些http服务器的机器上设置代理,服务器地址填host1,端口填pz。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值