SSH的三种端口转发

1、本地转发

本地转发,顾名思义就是把本地主机端口转发到远程主机端口

ssh -L 本地主机端口:远程主机:远程主机端口

举例:ssh -L 50000:www.google.com:80 user@host

当成功执行上面的命令之后,访问本地的50000端口,就等同于访问 www.google.com 的 80 端口。

这次是通过ssh主机来安全转发数据的,没有人知道你和远程主机之间传输了何种数据。

现在就算你能访问 www.google.com,你却依然不能其它主机,比如www.youtobe.com。

想要更全面的端口转发功能,还需动态转发。

 

2、远程转发

设想你在本机开发了一个web应用,想拿给别人看看,但现在你却处在内网,怎么办?

远程转发,顾名思义就是把远程主机端口转发到本地主机端口

ssh -R 登录主机端口:远程主机:远程主机端口

举例:ssh -R 8080:localhost:80 user@host

当成功执行上面的命令之后,访问ssh主机的 8080 端口就相当于访问 localhost:80

 

3、动态转发

动态转发无需指定远程主机及其端口

这个端口号需要在本地通过协议指定,该协议就是简单、安全、实用的 SOCKS 协议。

ssh -D 本地主机:本地主机端口

举例:ssh -D 127.0.0.1:50000 user@host

通过协议协商后,告诉你要访问的远程主机及端口,然后你与远程主机之间的数据就通过ssh主机传输了。

最常见的用途:在浏览器中设置代理类型为 SOCKS5,主机及端口:127.0.0.1:50000。

 

4、微信公众号调试

外网环境:

112.x.x.x  主机有固定ip和域名

内网环境

192.168.1.251

 

内网访问微信服务器,需要在251执行

ssh -D 0.0.0.0:1085 -l root 112.x.x.x -p xx -Nf -o ServerAliveInterval=60

http设置socks代理

    public HttpClientExecuteWithSocks() {

        Registry<ConnectionSocketFactory> reg = RegistryBuilder.<ConnectionSocketFactory>create()
                .register("http", PlainConnectionSocketFactory.INSTANCE)
                .register("https", new CustomConnectionSocketFactory(SSLContexts.createSystemDefault()))
                .build();

        PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(reg);
        this.httpclient = HttpClients.custom()
                .setConnectionManager(cm)
                .build();

        InetSocketAddress socksaddr = new InetSocketAddress("192.168.1.251", 1085);
        this.httpClientContext = HttpClientContext.create();
        this.httpClientContext.setAttribute("socks.address", socksaddr);
    }

 

 

posted @ 2017-12-20 17:45  等风来。。  Views(622)  Comments(0Edit  收藏  举报
------------------------------------------------------------------------------------------------------------ --------------- 欢迎联系 x.guan.ling@gmail.com--------------- ------------------------------------------------------------------------------------------------------------