Socket使用Linux SSH代理发送数据


写这篇文章是为了解决项目开发中,在处理第三方接口时,在本地开发调试的问题。


场景:

某应用需要调用发送短信接口发送短信(或调用其他第三方接口),但是这些接口都有服务器IP鉴权,只允许从局方提供的服务器上才能调用。

需求:

接入第三方接口需要一个开发和反复调试的过程,每次将写好的程序上传到服务器上测试很是麻烦,看日志和断点调试又都不方便,现在需要让第三方接口把自己电脑认作是服务器,这样就方便开发调试了。

前提条件:

服务器要可以进行SSH连接,但又没有VPN(因为有VPN就没有这些问题了,拨进去就直接可以)


一、做如下准备:

1、一台可以通过Intenet进行ssh连接的linux服务器

     我们假设服务器IP地址为202.102.110.110,ssh端口22,登录账号root,登录密码123456

2、一个有IP地址鉴权,只允许该服务器访问的第三方接口

     我们假设这个接口为一个Socket接口,接口IP地址为202.102.119.119,端口为8080

3、ssh代理软件

     myentunnel,下载地址:http://ishare.iask.sina.com.cn/f/23849533.html?from=like,如果该连接不可以下载,百度一下即可,有很多资源。

4、firefox浏览器

     非必须,下面也会写一下firefox浏览器的代理配置,网上购买ssh账号就可以访问 facebook 这样的网站了。


二、配置ssh代理软件

1、运行myentunnel.exe,如图:

打开显示配置界面,如图:


2、配置SSH登录参数

输入服务器IP地址202.102.110.110、登陆账号、密码,这里我们设置本地代理端口为7070,后面需要用到。

点击保存——>连接,我们可以隐藏窗口,需要打开界面在电脑右下角可以找到。


三、Socket 连接使用代理像第三方接口发送数据

1、常规 Socket 连接代码如下:


[java]

​ view plain​

​copy​



  1. Socket socket = new Socket("202.102.119.119",8080);  
  2. socket.setSoTimeout(60000);  
  3. //……  



2、使用代理连接发送数据代码如下:

[java]

​ view plain​

​copy​



  1. Socket socket = new Socket(new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("127.0.0.1",7070)));//本地代理端口为7070  
  2. socket.connect(new InetSocketAddress("202.102.119.119",8080));  
  3. socket.setSoTimeout(60000);  
  4. //……  



这样以来,第三方接口鉴权IP获取的IP地址就是我们的服务器IP地址(202.102.110.110),而不会是我们自己电脑的IP地址了。



四、配置 firefox 浏览器使用socks5 代理

1、访问 http://www.ip138.com/ 可以查看我们的IP地址,下图是我的IP地址:


2、打开 firefox 浏览器,在地址栏输入about:config,搜索 remote ,设置 network.proxy.socks_remote_dns 的值为true,双击可以切换false和true。


3、点击浏览器上面菜单栏中的工具->高级->网络->设置->手动配置代理->输入socks主机为127.0.0.1,端口为7070 ->确定完成

此时再打开http://www.ip138.com/ 网站查看IP地址就变成服务器的IP地址了 202.102.110.110


PS:如果需要经常上一些国外的网站,像开始提到的 facebook,可以在网上买一个ssh代理服务器账号,使用上面的方法即可访问。