当前位置:   article > 正文

虚拟机+Ngrok进行内网穿透_虚拟机内网穿透

虚拟机内网穿透

背景:笔者采用的WORKSTATION PRO"17+Ubuntu系统。笔者的虚拟机可以连接外网,主机或通过SSH远程也能连接我的虚拟机。通过内网穿透方式实现外网访问。我选择使用ngrok工具来实现这一目标。

虚拟机网络配置如下:

虚拟机的相关网络端口需要开放:

  1. 可使用命令:
  2. sudo ufw allow/deny 20:允许/拒绝访问20端口,20后可跟/tcp或/udp,表示tcp或udp封包。
  3. 查看某个端口是否打开命令
  4. 命令:nc -vz ip 80
  5. UFW 是标准 Ubuntu安装过程中的一部分,它应该已经在系统上存在。如果因为某些原因,它没有被安装,可以通过输入下面的命令安装它:
  6. sudo apt update
  7. sudo apt install ufw
  8. 查看端口号
  9. 在Ubuntu中查看端口号的命令是netstat。可以使用以下命令来查看当前开放的端口:
  10. sudo netstat -tunlp
  11. 其中,参数含义如下:
  12. -t:仅显示 TCP 协议的连接
  13. -u:仅显示 UDP 协议的连接
  14. -n:不解析服务名称,使用端口号表示服务
  15. -1:仅显示监听状态的连接
  16. -p:显示进程名或进程 ID

其它相关命令自行查询。

在虚拟机中,后端服务需要启动

ngrok原理如下图所示。

Ngrok配置步骤如下:

在ngrok官网注册好之后,登录管理界面后,会出现下图控制中心。

控制中心选择Linux系统,按照他给出的步骤进行ngrok下载和安装。

将ngrok安装好后,采用 ngrok http 8080进行启动。启动界面如下,图中forwarding就是URL,

将URL链接复制到网页上,默认打开界面如图

当你访问网址为你自己构建的网页时,笔者的测试界面如下图:链接为:https://2e9b-220-89-248-151.ngrok-free.app/wx

即穿越成功,下面是测试代码,我用的微信公众号的开发文档中的例子。

首先创建一个main.py文件,内容如下。

  1. import web
  2. from handle import Handle
  3. urls = (
  4. '/wx', 'Handle',
  5. )
  6. # class Handle(object):
  7. # def GET(self):
  8. # return "hello, this is handle view"
  9. if __name__ == '__main__':
  10. app = web.application(urls, globals())
  11. app.run()

再创建一个handle.py文件,进行get请求解析,

  1. import hashlib
  2. import web
  3. class Handle(object):
  4. def GET(self):
  5. try:
  6. data = web.input()
  7. print("handle/GET func: data is", data)
  8. if len(data) == 0:
  9. print("hello, this is handle view123")
  10. return "hello, this is handle view123"
  11. signature = data.signature
  12. print("handle/GET func: signature: ", signature)
  13. timestamp = data.timestamp
  14. nonce = data.nonce
  15. echostr = data.echostr
  16. token = "xxx" # 请按照公众平台官网\基本配置中信息填写
  17. print("handle/GET func: signature, timestamp, nonce, echostr: ", signature, timestamp, nonce, echostr)
  18. list = [token, timestamp, nonce]
  19. list.sort()
  20. sha1 = hashlib.sha1()
  21. map(sha1.update, list)
  22. hashcode = sha1.hexdigest()
  23. print("handle/GET func: hashcode, signature: ", hashcode, signature)
  24. if hashcode == signature:
  25. return echostr
  26. else:
  27. return ""
  28. except Exception as Argument:
  29. return Argument

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号