项目场景:

旧项目移植到新框架项目启动的过程中,开发人员在系统开发时需要访问第三方系统的接口,而大部分老旧接口因为 IP 或所处网络规则的限制,无法在本地机子上访问。

目前对于此类接口的调试方式是,注释调用代码。但可能导致开发将测试数据提交,引起生产问题。开发设备使用 Windows 系统,无法使用 iptables 命令解决。

有没有一钟办法,在不改变代码的前提下,将 Mock 加入到当下的开发测试环境中来?


探索思路:

  1. 更改 HOST 文件。
  • 目前系统使用数据库查询 IP地址,并生成 CXF客户端调用,并非通过域名解析的方式,外部系统提供的也是 IP地址。修改代码与初衷不服,修改数据库可能造成测试环境中使用的用户操作异常(目前系统开发过程中也有用户简单使用)。
  • 如果使用域名的方式,会增加维护组的负担,测试时也有切换网络环境的情况,一般维护组比开发早下班,联调时切换地址就变得很麻烦。
  1. IP 拦截转发。
  • 工具会报毒,探索正规方法。
  1. 使用 WIN 自带的netsh interface portproxy命令。
  • 经测试,单纯的使用这个命令只能重定向访问本地的 IP,例如把 127.0.0.1:8080 转到 127.0.0.8:7070
  1. 使用虚拟网卡 + netsh interface portproxy 命令。【推荐】

解决方案:

首先,使用虚拟网卡技术,设置需要测试的外系统IP,例如我要访问的外系统 IP 为:134.168.56.1

ingress重定向 另外域名 重定向ip_ingress重定向 另外域名


其次,使用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 测试服务:

ingress重定向 另外域名 重定向ip_IP_02


ingress重定向 另外域名 重定向ip_重定向_03