虚拟机+Ngrok进行内网穿透

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

虚拟机网络配置如下:

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

可使用命令:

sudo ufw allow/deny 20:允许/拒绝访问20端口,20后可跟/tcp或/udp,表示tcp或udp封包。

查看某个端口是否打开命令
命令:nc -vz ip 80

UFW 是标准 Ubuntu安装过程中的一部分,它应该已经在系统上存在。如果因为某些原因,它没有被安装,可以通过输入下面的命令安装它:

sudo apt update

sudo apt install ufw

查看端口号
在Ubuntu中查看端口号的命令是netstat。可以使用以下命令来查看当前开放的端口:

sudo netstat -tunlp

其中,参数含义如下:
-t:仅显示 TCP 协议的连接
-u:仅显示 UDP 协议的连接
-n:不解析服务名称,使用端口号表示服务
-1:仅显示监听状态的连接
-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文件,内容如下。

import web
from handle import Handle

urls = (
    '/wx', 'Handle',
)

# class Handle(object):
#     def GET(self):
#         return "hello, this is handle view"

if __name__ == '__main__':
    app = web.application(urls, globals())
    app.run()

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

import hashlib
import web


class Handle(object):
    def GET(self):
        try:
            data = web.input()
            print("handle/GET func: data is", data)
            if len(data) == 0:
                print("hello, this is handle view123")
                return "hello, this is handle view123"
            signature = data.signature
            print("handle/GET func: signature: ", signature)
            timestamp = data.timestamp
            nonce = data.nonce
            echostr = data.echostr
            token = "xxx"  # 请按照公众平台官网\基本配置中信息填写
            print("handle/GET func: signature, timestamp, nonce, echostr: ", signature, timestamp, nonce, echostr)

            list = [token, timestamp, nonce]
            list.sort()
            sha1 = hashlib.sha1()
            map(sha1.update, list)
            hashcode = sha1.hexdigest()
            print("handle/GET func: hashcode, signature: ", hashcode, signature)
            if hashcode == signature:
                return echostr
            else:
                return ""
        except Exception as Argument:
            return Argument

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值