端口转发

来源:互联网 发布:新手淘宝客 编辑:程序博客网 时间:2024/05/01 09:55

今天遇到一个问题:一个发送java message到开发环境的TIBCO服务器C的程序在开发机器B上运行时遇到问题,想在本地自己机器A上debug一下。

但问题是本地A只能连接到开发机器B,不能连接到开发环境的TIBCO服务器C(防火墙的原因,JMS服务用的是7222端口)。

因此在A上eclipse里debug程序时,一直报错"cant connect to remote server C".


此时端口转发就有用了:端口转发(Port forwarding),有时被叫做隧道,是SSH为网络安全通信使用的一种方法。

简单的说就是将发送到C:7222端口的网包通过B转发。


具体使用方法简单到不能再简单了。大家熟知的putty附带的另一个小工具plink,以及openSSH都有这个功能。

plink:

plink username@B -L 1234:C:7222

B就是机器B的IP,username是登陆B机器时的用户名。C是机器C的IP

这个命令的意思就是,将发送到本地1234端口的包转发到C的7222端口。同时使用机器B做中转。

执行这个命令后,会提示输入username对应的密码。

完成后,在eclipse中,将程序中的“发送消息到C:7222”对应的代码改成“localhost:1234”,程序正常运行。


openSSH的命令和plink是完全一样的。

ssh yourserver -L 80:reddit.com:80 -g


参数解释:

-L listen-port:host:port   Forward local port to remote address

-g Allow remote hosts to connect to forwarded ports. 这样一个局域网中的其他人就可以连接我的机器localhost:1234,然后再发送到C:7222了


其实端口转发可以用来绕过防火墙。例如机器A和机器B之间有防火墙,他们之间只打开了22端口(ssh)。而此时A需要连接到B的8888端口上。我们可以简单的根据端口转发来实现:

plink username@B -L 1111:B:8888 (使用本地1111端口)

之后在A上就可以telnet 127.0.0.1 1111。此时可以发现可以连接上。


原创粉丝点击