项目场景:
旧项目移植到新框架项目启动的过程中,开发人员在系统开发时需要访问第三方系统的接口,而大部分老旧接口因为 IP 或所处网络规则的限制,无法在本地机子上访问。
目前对于此类接口的调试方式是,注释调用代码。但可能导致开发将测试数据提交,引起生产问题。开发设备使用 Windows 系统,无法使用 iptables 命令解决。
有没有一钟办法,在不改变代码的前提下,将 Mock 加入到当下的开发测试环境中来?
探索思路:
更改 HOST 文件。
- 目前系统使用数据库查询 IP地址,并生成 CXF客户端调用,并非通过域名解析的方式,外部系统提供的也是 IP地址。修改代码与初衷不服,修改数据库可能造成测试环境中使用的用户操作异常(目前系统开发过程中也有用户简单使用)。
- 如果使用域名的方式,会增加维护组的负担,测试时也有切换网络环境的情况,一般维护组比开发早下班,联调时切换地址就变得很麻烦。
IP 拦截转发。
- 工具会报毒,探索正规方法。
- 使用 WIN 自带的
netsh interface portproxy
命令。
- 经测试,单纯的使用这个命令只能重定向访问本地的 IP,例如把
127.0.0.1:8080
转到127.0.0.8:7070
。
- 使用虚拟网卡 + netsh interface portproxy 命令。【推荐】
解决方案:
首先,使用虚拟网卡技术,设置需要测试的外系统IP,例如我要访问的外系统 IP 为:134.168.56.1
其次,使用netsh interface portproxy
命令设置代理转发。
#### 常用命令如下
## 查看列表
netsh interface portproxy show all
## 设置
## 模拟的外系统的IP地址是:134.168.56.1:8080,将重定向到本地的 127.0.0.1:12306
netsh interface portproxy add v4tov4 listenaddress=134.168.56.1 listenport=8080 connectaddress=127.0.0.1 connectport=12306
## 删除
netsh interface portproxy delete v4tov4 listenaddress=134.168.56.1 listenport=8080
PS:也可以使用可视化工具设置,在GITHUB上找到了这个,原理相同,也挺好用的:PortProxyGUI
最后,我们测试一下能否用新地址访问到本地的 Moco 测试服务: