前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >推荐一款实现内网穿透的测试神器:Ngrok

推荐一款实现内网穿透的测试神器:Ngrok

作者头像
测试开发技术
发布2020-01-17 17:53:34
4.8K0
发布2020-01-17 17:53:34
举报
文章被收录于专栏:测试开发技术

阅读全文大概需要 7 分钟。

1. 前言

公号一周多没有发技术推文了,最近年尾手头上的事情较多,推文被搁浅了。

工作日:年底基本被各种PPT准备、2019年总结、2020年规划、各种公司年底会议所覆盖。

休息日:上周六在筹备开源实战项目的事情,目前项目前期工作已正式启动,将以实际公司级的项目进行运作,并会根据学员期望,划分到对应的部门(前端研发部、后端研发部、测试部),公号中想通过项目实战学习提升的读者,欢迎加入!

更多关于开源项目实战介绍可查阅:年底特辑:新一代测试平台开源实战项目。另外,上周末,去参加了一位产品同事的婚礼,场面很隆重,形式感很重要。

一周多没尝到新鲜的技术推文,相信很多公号的忠实读者,已经等的有点急不可耐了,为了补偿大家,今天将给大家分享一款神器工具:Ngrok

2. Ngrok是什么

Ngrok是一款实现内网穿透的工具,更专业的解释的话,Ngrok 是一个反向代理工具,它是通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。并且可以捕获和分析所有通道上的流量,便于后期分析和重放。

有些读者可能会问:啥是内网穿透呢?白话来说就是将内网IP映射成对外可访问的域名

3. 为什么要用Ngrok

我们有时候会需要临时地将一个本地的Web网站部署到外网,以供他人体验评价或协助调试等等,通常我们会这么做:

  1. 找到一台运行于外网的Web服务器
  2. 服务器上有网站所需要的环境,否则自行搭建
  3. 将网站部署到服务器上
  4. 调试结束后,再将网站从服务器上删除

只不过是想向朋友展示一下网站而已,要不要这么麻烦,累感不爱了

有了ngrok之后,世界是如此的美好

  1. 首先注册并下载ngrok,得到一串授权码。
  2. 运行命令ngrok -authtoken 你的授权码 80,80是你本地Web服务的端口,而之后ngrok会记住你的授权码,直接ngrok 80就OK了。
  3. 你会得到一串网址,通过这个网址就可以访问你本地的Web服务了。

PS: 笔者在2017年,通过Ngrok结合自主开发的一个监控定位服务,帮一位亲戚追踪到了一个“被落入到传销组织的人口失踪案”。

4. Ngrok安装、使用

1、进入Ngrok官网(https://ngrok.com/),注册Ngrok账号并下载ngrok。(可直接用Github帐号授权登录)

2、登录成功后(https://ngrok.com/dashboard),进行授权码生成,点击左侧的Auth菜单,进行生成授权码。

3、根据官网给定的授权码,运行如下授权命令,如下:

代码语言:javascript
复制
./ngrok authtoken 5HNiAMs5vX91K6rSfwkJC_27oaFSaMUPfBi7KobjqHt

授权码和账户是绑定的,在授权命令运行后,ngrok会将授权码保存在~/.ngrok2/ngrok.yml中,所以只需要运行一次,以后都可以使用。

4、根据需要,运行命令开发端口,例如:

代码语言:javascript
复制
ngrok http 8000

需要注意的是,这里的端口8000可以根据需要替换成其他端口。这条命令的意思是将本地8000端口对应的服务暴露到外网中。

Forwarding,第一个是http协议对应的外网地址,第二个是https协议对应的外网地址。这样,凡是访问 http://4bd4c53e.ngrok.io的请求都将发送到localhost:8000。

5. 实战示例

接下来,我们以之前开发的Django REST API服务作为演示示例,具体如何开发搭建自主的API服务,可查阅:Python利用Django 构建Rest Api: 快速入门教程Python3+ Django3:自动生成Swagger接口文档 这两篇文章都有详细介绍。

1、查看Django REST API项目结构:

代码语言:javascript
复制
(env) ➜  drf_swagger tree -L 2
.
├── api
│   ├── __init__.py
│   ├── __pycache__
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   ├── models.py
│   ├── serializers.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── db.sqlite3
├── drf_swagger
│   ├── __init__.py
│   ├── __pycache__
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

5 directories, 15 files

2、修改项目文件中的settings.py文件中的ALLOWED_HOSTS值。

代码语言:javascript
复制
ALLOWED_HOSTS = ['*']

3、运行Django服务。

代码语言:javascript
复制
python manage.py runserver

4、访问http://127.0.0.1:8000/api/,可查看已添加的API接口。

5、接着运行`ngrok http 8000`命令,进行内网端口透穿外网映射,如下所示:

6、此时通过外网设备去访问:http://4bd4c53e.ngrok.io/api/ (外网地址)仍然可以正常访问。

该地址,已经成功可以被外网所访问。(WIFI、4G网络皆可)

7、除此之后,Ngrok还提供了一个Web管理页面,可以进行监控查看代理转发的所有请求,默认访问:http://127.0.0.1:4040/ 即可。

点击Status可以查看当前监控的状态:

8、需要注意的是,每次启动ngrok都会分配一个新的外网域名,所以需要每次更换配置或者更换访问地址,不太方便。当然,ngrok也提供了解决方法,那就是付费,可以设置固定域名。

如果只是需要简单的外网调试,用Free免费版就足够了,如果需要自定义二级域名的,可以花点小钱,升级到付费版。

5. 最后

除了上述介绍的Ngrok外,还有更简单的实现方式,就是使用国内的Ngrok,名称为 Sunny-Ngrok。网速更快,配置方面也更简单。

国内Ngrok官网:https://www.ngrok.cc/

注册账号后,可以直接添加隧道,如果不想花钱的,可以直接选择中国香港的Ngrok服务器。

点击立即购买后,进行隧道配置,在这个页面下可以配置要监听的服务端口、前置域名、验证信息等。

更多实用功能,感兴趣的读者,可以自行尝试。今天的文章就写到这里,亲爱的读者,这款神器,你Get到了吗?

希望这篇文章能帮到你!更多干货文章请关注我们。

如有疑问,请文末留言,最后,公号「测试开发技术」后台回复Python, 免费领取Python学习教程。

声明:封面或正文部分图片来源于网络,如有侵权,请联系删除。

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 前言
  • 2. Ngrok是什么
  • 3. 为什么要用Ngrok
  • 4. Ngrok安装、使用
  • 5. 实战示例
  • 5. 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档