本地开发利器ngrok-打穿你的内网

1,878 阅读3分钟

由于ipv4公网ip数量有限,许多办公室或者校园网都是基于NAT技术共用公网ip。本机被分配的ip都是局域网ip, 可以借由路由器访问外网,但是无法直接被外网服务访问。所以相信大家在开发当中或多或少都碰到过以下情况:

  1. 开发对接的第三方服务有回调通知,但需要提供公网访问地址。比如微信支付的回调和公众号开发。
  2. 开发需要和远程团队调试,大家不在一个局域网内。
  3. 自己整了一个牛逼的项目,开发到一半想给微信基友看看炫一下。

可能有人会说针对以上情况部署到公司带公网的服务器其实就ok了。但实际上服务器上缺少ide, 对于开发阶段来说调试及定位bug都非常不方便,另外就是有些demo项目可能只是演示需要,搞一台公网服务器属实浪费资源。 本文介绍一款内网穿透工具ngrok,简单安装部署就能将内网服务暴露至公网访问!

ngrok介绍

ngrok是一款开源的内网穿透工具,它主要分为客户端和服务端,且客户端支持windows、macOs、linux等多个平台。一般来说只需要下载客户端并启动就行了。

基本原理

它的基本原理是通过客户端与公网服务端建立通道及映射关系,然后服务端提供可访问的公网地址。当外网访问此公网地址时,ngrok服务端根据映射关系找到客户端,然后转发给客户端的服务。话不多说,接下来开整! WechatIMG319.png

ngork客户端安装及启动

安装

首先下载好客户端之后进行解压,安装包可以通过官网下载。

# 以macOS为例
unzip /path/to/ngrok.zip

启动

# 启动并指定要暴露的端口
./ngrok http 8888

这时你本地的端口就生成了对应可访问的外网地址,如图: image.png

ngrok测试

此时我启动一个简单的python web服务在8888端口,并用生成的公网域名来测试是否可用。

#  python 服务代码
from flask import Flask

app = Flask(__name__)


# 定义一个/hello路由
@app.route("/hello", methods=["POST", "GET"])
def push():
    print("OMG! i am free")
    return "hello, world"


if __name__ == '__main__':
    # 服务启动在8888端口
    app.run(port=8888)

然后通过浏览器访问,并查看服务的打印日志,可以看到内网的服务通过公网地址访问成功了! image.png image.png

ngrok可视化界面

除此之外,启动了客户端之后,还可以通过http://localhost:4040/访问ngrok的可视化界面,这里不仅展示了详细的请求和响应信息,还提供了一个Replay按钮。说实话这个功能可太顶了,比如说我做微信支付对接调试,支付一次产生一次回调。而有了这个请求重放,我调试失败之后不用再去支付产生请求了,直接重放就行了。 image.png

写在后面

内网穿透工具确实给我的日常开发带来了很大的便利,解决了我因为频繁在服务器debug导致的烦恼和掉发!当然ngrok的功能也远比本文介绍的丰富,如有需要可以自己再去深入探索。 如果觉的本篇文章对你有所帮助,欢迎点个赞!

PS: 这里推荐一个从0到1搭建小程序电商商城的项目:商城,欢迎一起交流学习!

微信搜索公众号「Frank的梦呓」,回复「100pdf」获取100本计算机相关电子书!!!