前言
我有一个软件在虚拟机里,监听一个端口。我想在宿主机上能访问这个端口,显然,一个端口转发就能解决的事情。但是,我发现事情没那么简单。因为,这个软件太狡猾了,它的端口规定必须是在回环地址127.0.0.1上,改成0.0.0.0会阻止你进一步的操作。接下来,就要将这种不可能的事情实现。
准备
已知软件开放地址: 127.0.0.1:49158
需要在虚拟机转发到的地址: 0.0.0.0:49158
需要在宿主机能访问的地址:127.0.0.1:49158
虚拟机
前面我们提到,只要端口挂载在0.0.0.0上,就可以用端口转发完成。那么端口在127.0.0.1上呢?是不是也可以用端口转发将127.0.0.1的转发到0.0.0.0呢?
准备LCX
LCX是一个端口转发工具 ,具有两大功能,一个是端口转发,一个是端口映射[1]。127.0.0.1的端口,可以通过LCX将其映射到0.0.0.0某个端口上,但不是转发。
首先在这里下载lcx.exe或者portmap(linux版本),这里我虚拟机用的是win7,因此我下载了lcx.exe。linux版使用方法请参考[1]。
下载后放进虚拟机环境中,下图是我们用的虚拟机,用的是NAT网络,不是桥接哦。
使用LCX
我们用的是端口映射的方式将localhost的端口映射到0.0.0.0某个端口上,则运行以下命令:
1 | lcx.exe -tran 49158 127.0.0.1 49158 |
tran指定在0.0.0.0上的端口,接下来两个参数表示转发到哪里。这里表示,来自0.0.0.0:49158的分组,转发到127.0.0.1:49158中,实现一次端口映射。成功后将能看到下图的界面。
然后使用ipconfig /all
查看虚拟机的ip地址,这里是10.0.2.15,这个ip地址当然是内网的拉。
配置端口转发
如图设置端口转发,主机表示宿主机,子系统表示虚拟机。
宿主机
其实现在宿主机可以直接访问了。
大功告成←_←,耗了我一个下午。。。