ngrok编译
ngrok编译
安装golang
官方golang安装文档:https://golang.google.cn/doc/install
配置国内源
go env -w GOPROXY=https://goproxy.cn,direct
关掉GO111MODULE
go env -w GO111MODULE=off
配置访问github
proxy_host=$1 # 192.168.126.173
proxy_port=$1 # 7890
export https_proxy=http://${proxy_host}:${proxy_port}
export http_proxy=http://${proxy_host}:${proxy_port}
export all_proxy=socks5://${proxy_host}:${proxy_port}
下载源码
git clone https://github.com/inconshreveable/ngrok.git
生成证书
# 设置域名
export NGROK_DOMAIN="new.liuyunuo.cn"
# 生成CA私钥
openssl genrsa -out rootCA.key 2048
# 使用CA私钥,生成CA自签证书
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
# 生成设备私钥
openssl genrsa -out device.key 2048
# 使用设备私钥,生成设备证书请求
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
# 使用CA证书和CA私钥,给设备证书请求签名,生成设备证书
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
拷贝证书
拷贝证书到ngrok项目中(证书会编译到项目中)
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
编译make
make release-server release-client
使用
有证书问题
修改源码忽略证书
diff --git a/src/ngrok/client/debug.go b/src/ngrok/client/debug.go
index 749fcf0..83ecbb5 100644
--- a/src/ngrok/client/debug.go
+++ b/src/ngrok/client/debug.go
@@ -1,3 +1,4 @@
+//go:build !release// +build !releasepackage client
diff --git a/src/ngrok/client/release.go b/src/ngrok/client/release.go
index 4c4b117..ba21a19 100644
--- a/src/ngrok/client/release.go
+++ b/src/ngrok/client/release.go
@@ -1,3 +1,4 @@
+//go:build release// +build releasepackage client
diff --git a/src/ngrok/client/tls.go b/src/ngrok/client/tls.go
index 63a707a..f2a305d 100644
--- a/src/ngrok/client/tls.go
+++ b/src/ngrok/client/tls.go
@@ -31,5 +31,5 @@ func LoadTLSConfig(rootCertPaths []string) (*tls.Config, error) {pool.AddCert(certs[0])}- return &tls.Config{RootCAs: pool}, nil
+ return &tls.Config{RootCAs: pool, InsecureSkipVerify: true}, nil}
diff --git a/src/ngrok/client/update_debug.go b/src/ngrok/client/update_debug.go
index e001b6a..064c25c 100644
--- a/src/ngrok/client/update_debug.go
+++ b/src/ngrok/client/update_debug.go
@@ -1,3 +1,4 @@
+//go:build !release && !autoupdate// +build !release,!autoupdatepackage client
diff --git a/src/ngrok/client/update_release.go b/src/ngrok/client/update_release.go
index 2971731..09bc941 100644
--- a/src/ngrok/client/update_release.go
+++ b/src/ngrok/client/update_release.go
@@ -1,3 +1,4 @@
+//go:build release || autoupdate// +build release autoupdatepackage client
diff --git a/src/ngrok/server/tls.go b/src/ngrok/server/tls.go
index e59545b..ada52c0 100644
--- a/src/ngrok/server/tls.go
+++ b/src/ngrok/server/tls.go
@@ -36,6 +36,7 @@ func LoadTLSConfig(crtPath string, keyPath string) (tlsConfig *tls.Config, err e}tlsConfig = &tls.Config{
+ ClientAuth: tls.NoClientCert,Certificates: []tls.Certificate{cert},}
测试
可以工作
编译脚本参考
脚本只是编译,源码需要自己根据git diff 记录修改哦
#!/bin/bashset -e
set -x
CURRENT_PATH=$(cd $(dirname $0) && pwd)# 设置域名
NGROK_DOMAIN="new.liuyunuo.cn"# 设置中国代理
go env -w GOPROXY=https://goproxy.cn,direct# 关闭Module模式
go env -w GO111MODULE=off mkdir -p certs
cd certs# 生成CA私钥
openssl genrsa -out rootCA.key 2048
# 使用CA私钥,生成CA自签证书
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=${NGROK_DOMAIN}" -days 3650 -out rootCA.pem
# 生成设备私钥
openssl genrsa -out device.key 2048
# 使用设备私钥,生成设备证书请求
openssl req -new -key device.key -subj "/CN=${NGROK_DOMAIN}" -out device.csr
# 使用CA证书和CA私钥,给设备证书请求签名,生成设备证书
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 3650cd ${CURRENT_PATH}cp certs/rootCA.pem assets/client/tls/ngrokroot.crt
cp certs/device.crt assets/server/tls/snakeoil.crt
cp certs/device.key assets/server/tls/snakeoil.keyGOOS=linux GOARCH=amd64 make release-server
mkdir -p ngrok_server_linux_amd64
cp ./bin/ngrokd ./ngrok_server_linux_amd64/cat << 'EOF' > "./ngrok_server_linux_amd64/start.sh"
#!/bin/bashscriptPath=$(cd $(dirname $0) && pwd)
cd ${scriptPath}
./ngrokd_wdt.sh 2>&1 >/dev/null &EOFcat << EOF > "./ngrok_server_linux_amd64/ngrokd_wdt.sh"
#!/bin/bashscriptPath=\$(cd \$(dirname \$0) && pwd)
cd \${scriptPath}for ((;;))
doecho "restart ngrokd" >> ngrokd.log./ngrokd -domain="${NGROK_DOMAIN}" -httpAddr=":16080" -httpsAddr=":16443" -tunnelAddr=":4443"sleep 1
doneEOFchmod a+x ./ngrok_server_linux_amd64/*
tar -zcvf ngrok_server_linux_amd64.tgz ngrok_server_linux_amd64GOOS=linux GOARCH=amd64 make release-client
mkdir -p ngrok_client_linux_amd64
cp ./bin/ngrok ./ngrok_client_linux_amd64/cat << 'EOF' > "./ngrok_client_linux_amd64/start.sh"
#!/bin/bashscriptPath=$(cd $(dirname $0) && pwd)
cd ${scriptPath}
./ngrok_wdt.sh 2>&1 >/dev/null &EOFcat << 'EOF' > "./ngrok_client_linux_amd64/ngrok_wdt.sh"
#!/bin/bashscriptPath=$(cd $(dirname $0) && pwd)
cd ${scriptPath}for ((;;))
doecho "restart ngrok" >> ngrok.log./ngrok -config ngrok.cfg -log=stdout -log-level="DEBUG" start sshsleep 1
doneEOFcat << EOF > "./ngrok_client_linux_amd64/ngrok.cfg"
server_addr: "${NGROK_DOMAIN}:4443"
trust_host_root_certs: false
tunnels:ssh:proto:tcp: 22remote_port: 15022EOFchmod a+x ./ngrok_client_linux_amd64/*
tar -zcvf ngrok_client_linux_amd64.tgz ngrok_client_linux_amd64GOOS=linux GOARCH=arm64 make release-client
mkdir -p ngrok_client_linux_arm64
cp ./bin/linux_arm64/ngrok ./ngrok_client_linux_arm64/cat << 'EOF' > "./ngrok_client_linux_arm64/start.sh"
#!/bin/bashscriptPath=$(cd $(dirname $0) && pwd)
cd ${scriptPath}
./ngrok_wdt.sh 2>&1 >/dev/null &EOFcat << 'EOF' > "./ngrok_client_linux_arm64/ngrok_wdt.sh"
#!/bin/bashscriptPath=$(cd $(dirname $0) && pwd)
cd ${scriptPath}for ((;;))
doecho "restart ngrok" >> ngrok.log./ngrok -config ngrok.cfg -log=stdout -log-level="DEBUG" start sshsleep 1
doneEOFcat << EOF > "./ngrok_client_linux_arm64/ngrok.cfg"
server_addr: "${NGROK_DOMAIN}:4443"
trust_host_root_certs: false
tunnels:ssh:proto:tcp: 22remote_port: 15022EOFchmod a+x ./ngrok_client_linux_arm64/*
tar -zcvf ngrok_client_linux_arm64.tgz ngrok_client_linux_arm64
相关文章:
ngrok编译
ngrok编译 安装golang 官方golang安装文档:https://golang.google.cn/doc/install 配置国内源 go env -w GOPROXYhttps://goproxy.cn,direct关掉GO111MODULE go env -w GO111MODULEoff 配置访问github proxy_host$1 # 192.168.126.173 proxy_port$1 # 7890 exp…...
YOLOv5改进 | 卷积篇 | 通过RFAConv重塑空间注意力(深度学习的前沿突破)
一、本文介绍 本文给大家带来的改进机制是RFAConv,全称为Receptive-Field Attention Convolution,是一种全新的空间注意力机制。与传统的空间注意力方法相比,RFAConv能够更有效地处理图像中的细节和复杂模式(适用于所有的检测对象都有一定的…...
056:vue工具 --- CSS在线格式化
第056个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…...
自定义IDEA代码补全插件
目标: 对于项目中的静态方法(主要是各种工具类里的静态方法),可以在输入方法名时直接提示相关的静态方法,选中后自动补全代码,并导入静态类。 设计: 初步构想,用户选择要导入的文…...
uniapp uview1.0 页面多个upload上传、回显之后处理数据
<view class"img-title w-s-color-3 f-28 row">商品图片</view><u-upload ref"images" :header"header" :file-list"fileListImages" :action"action" name"iFile" icon-name"camera"u…...
生活中的物理2——人类迷惑行为(用笔扎手)
1实验 材料 笔、手 实验 1、先用手轻轻碰一下笔尖(未成年人须家长监护) 2、再用另一只手碰碰笔尾 你发现了什么?? 2发现 你会发现碰笔尖的手明显比碰笔尾的手更痛 你想想为什么 3原理 压强f/s 笔尖的面积明显比笔尾的小 …...
vue3表格导入导出.xlsx
在这次使用时恰好整出来了,希望大家也能学习到,特此分享出来 使用前确保安装以下模块,最好全局配置element-plus ### 展示一下 ### ###导出选项 ### ###导入de数据 ### 安装的模块 npm install js-table2excel // 安装js-table2excel n…...
vscode dart语言出现蓝色波浪线
pubspec.yaml 注释掉:flutter_lints: ^2.0.0 analysis_options.yaml 注释掉:include: package:flutter_lints/flutter.yaml...
一种磁盘上循环覆盖文件策略
目录标题 1. 前言2. 软件设计流程思路3. 模拟测试3.1 分区准备工作3.2 模拟写数据3.3 测试 1. 前言 实际开发中经常需要存储数据, 无论是存储日志,还是二进制数据(图片,雷达数据或视频文件等), 不能一直存,是否存在一种策略: 当磁盘空间不足时…...
elementui消息弹出框MessageBox英文内容不换行问题
问题:当MessageBox内容为中文时,会自动换行,但当内容为英文时不会触发自动换行 如图,内容名称为英文时,名称太长会戳出提示框,不会自动换行 为数字英文会在英文数字处换行但是我们往往不需要它换行 解决方…...
WPF——样式和控件模板、数据绑定与校验转换
样式和控件模板 合并资源字典 Style简单样式的定义和使用 ControlTemplate控件模板的定义和使用 定义 使用 Trigger触发器 数据绑定与校验转换 数据绑定的设置 代码层实现绑定 数据模板DataTemplate xml文件的读取与显示 方法的返回值作为源绑定到控件中ObjectDataProvider L…...
服务器数据恢复-raid5故障导致上层分区无法访问的数据恢复案例
服务器数据恢复环境&故障: 一台服务器上3块硬盘组建了一组raid5磁盘阵列。服务器运行过程中有一块硬盘的指示灯变为红色,raid5磁盘阵列出现故障,服务器上层操作系统的分区无法识别。 服务器数据恢复过程: 1、将故障服务器上磁…...
石器时代H5小游戏架设教程
本文讲解石器时代 H5 之恐龙宝贝架设教程,想研究 H5 游戏如何实现,那请跟着此次教程学习在拥有小游戏源码的情况下该如何搭建起来 开始架设 1. 架设条件 石器时代架设需要准备: 一台linux 服务器,建议 CentOs 7.6 版本…...
计算机网络-网络协议
一、TCP/IP协议 作为一个小萌新,当然我无法将tcp/ip协议的大部分江山和盘托出,但是其中很多面试可能问到的知识,我觉得有必要总结一下! 首先,在学习tcp/ip协议之前,我们必须搞明白什么是tcp/ip协议。 1、…...
多维时序 | MATLAB实现KOA-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测
多维时序 | MATLAB实现KOA-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现KOA-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现KOA-CNN-B…...
业务出海如何快速将站点搬迁到AWS云中?
随着国内市场趋于饱和,竞争压力越来越大,越来越多的企业选择出海,把业务放在海外做,从而追求更广阔的市场,获取更多客户。那都在讲出海,那怎么将站点完完整整的搬到海外呢?大家都会想࿰…...
ansible剧本playbook
Palybook组层部分 tasks 任务包含要在目标主机上执行的操作,使用模块定义这些操作,每个任务都是一个模块的调用variables变量:存储和传递数据,变量可以自定义,可以在palybook当中定义为全局变量,也可以在外部传参temp…...
.NET 中string类型的字符串内部化机制
当创建一个字符串时,如果具有相同字符序列的字符串已经存在于内存中,那么新创建的字符串会指向已经存在的那个字符串的内存地址,而不是创建一个全新的副本。这有助于节省内存,并提高字符串操作的效率。 因此相同内容的字符串变量…...
公共字段自动填充——后端
场景:当处理一些请求时,会重复的对数据库的某些字段进行赋值(如:在插入和更新某个物品时,需要更新该物品的更新时间和更新者的信息),这样会导致代码冗余。 如: 思路: 自…...
nginx upstream 6种负载均衡策略介绍
upstream参数 参数描述service反向服务地址加端口weight权重max_fails失败多少次,认为主机已经挂掉,踢出fail_timeout踢出后重新探测时间backup备用服务max_conns允许最大连接数slow_start当节点恢复,不立即加入 负载均衡策略 轮询&#x…...
基于Antd4 和React-hooks的项目开发
基于Antd4 和React-hooks的项目开发 https://github.com/dL-hx/react-cnode 项目依赖使用 react 16.13react-redux 7.xreact-router-dom 5.xredux 4.xantd 4axiosmoment 2.24 (日期格式化)qs 项目视图说明 首页主题详情用户列表用户详情关于 配置按需加载 https://3x.an…...
Spring中用到的设计模式
一、工厂模式 BeanFactory 1、简单工厂模型,是指由一个工厂对象决定创建哪一种产品类的实例,工厂类负责创建的对象较少,客户端只需要传入工厂类的参数,对于如何创建对象的逻辑不需要关心 优点: 只需传入一个正确的参数…...
常用网络接口自动化测试框架
(一)GUI界面测试工具:jmeter 1、添加线程组 2、添加http请求 3、为线程组添加察看结果树 4、写入接口参数并运行 5、在查看结果树窗口查看结果 6、多组数据可增加CSVDataSetConfig(添加.csv格式的文件,并在参数值里以${x}格式写入) 此时变量…...
【重点】【贪心】55.跳跃游戏
题目 法1:贪心 class Solution {public boolean canJump(int[] nums) {int maxIndex nums.length - 1;int curMaxIndex 0;for (int i 0; i < nums.length; i) {if (i < curMaxIndex) {curMaxIndex Math.max(i nums[i], curMaxIndex);if (curMaxIndex &…...
灰度化、二值化、边缘检测、轮廓检测
灰度化 定义 灰度图像是只含亮度信息,不含色彩信息的图像。灰度化处理是把彩色图像转换为灰度图像的过程,是图像处理中的基本操作。OpenCV 中彩色图像使用 BGR 格式。灰度图像中用 8bit 数字 0~255 表示灰度,如:0 表…...
基于JAVA的高校大学生创业管理系统 开源项目
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统公告模块2.2 创业项目模块2.3 创业社团模块2.4 政府政策模块2.5 创业比赛模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 系统公告表3.2.2 创业项目表3.2.3 创业社团表3.2.4 政策表 四、系统展示五、核心代码5.…...
神经网络学习小记录76——Tensorflow2设置随机种子Seed来保证训练结果唯一
神经网络学习小记录76——Tensorflow2设置随机种子Seed来保证训练结果唯一 学习前言为什么每次训练结果不同什么是随机种子训练中设置随机种子 学习前言 好多同学每次训练结果不同,最大的指标可能会差到3-4%这样,这是因为随机种子没有设定导致的&#x…...
ai学习笔记-入门
目录 一、人工智能是什么?可以做什么? 人工智能(Artificial Intelligence): 人工智能的技术发展路线: 产业发展驱动因素:数据、算力、算法 二、人工智能这个工具的使用原理入门 神经网络⭕数学基础 1.神经网络的生物表示 …...
workflow系列教程(5-1)HTTP Server
往期教程 如果觉得写的可以,请给一个点赞关注支持一下 观看之前请先看,往期的博客教程,否则这篇博客没办法看懂 workFlow c异步网络库编译教程与简介 C异步网络库workflow入门教程(1)HTTP任务 C异步网络库workflow系列教程(2)redis任务 workflow系列教程(3)Series串联任务流…...
php-使用wangeditor实现富文本(完成图片上传)-npm
官网参考连接:快速开始 | wangEditor 样式: 一、新建一个临时文件夹test1和一个文件夹wangeditor 临时文件夹test1:临时存放通过npm下载的文件文件夹wangeditor:用于存放在临时文件夹test1拷贝的css和js 二、安装 editor 在确保有…...
带做骑传奇私服网站/一键建站免费
前言 上篇文章给大家分享了前10个spark的企业面试题2020年最新Spark企业级面试题【上】,今天后续来了,来分享剩下的那个几个面试题。也祝大家找到自己喜欢的工作,一起加油,编写不易 请给老哥一个一键三连吧。 一、手写Spark-Wor…...
工信部网站备案系统/网站推广的渠道有
冯.诺依曼体系结构,个人的理解:物理电学补充:所有的物质,是由分子或原子组成的。分子是能保持物质化学性质不变的最小微粒。分子是由原子组成的,可分为单原子分子和多原子分子。原子的原子核式结构:原子的中心为原子核,电子在不同轨道上绕着原…...
app网站公司名称/哔哩哔哩b站在线看免费
前言Excel是很多公司非常流行的工具,数据分析师和数据科学家经常发现他们把它作为数据分析和可视化工具的一部分,但这并不总是最好的选择。尤其是在数据量很大的时候,Excel容易让我们无法使用其他应用程序,而且有些报告需要30分钟…...
php做电商网站的难点/百度推广关键词越多越好吗
熊猫帮帮主cnblogs 2018/1/25 问题描述:在Windows下将中文文件名的文件打成压缩包,在Linux下解压出现文件名乱码。 问题原因:Windows和Linux下采用不同中文编码格式,导致在Linux下解压时出现文件名乱码。 解决方案:在命…...
网站建设 时间安排/seo是什么平台
需求 对于部署在阿里云上的重要系统一般是不让其他人访问的,所以会在负载均衡(SLB)上加上访问控制列表。而使用ASDL拨号上网的宽带来说一般公网IP都不会固定的,会随时变更公网IP,所以此脚本正是解决此需求。 说明 脚本运行前需要先安装aliyun…...
电子商务网站开发需要注意问题/百度收录提交
****文件操作命令**** ls #以默认方式显示文件列表 -a 显示所有文件 -l 显示文件属性 -lt 按照修改时间进行排序cd #切换路径 / 根目录 .. 上一级目录 ../.. 上二级目录 ~ 切换到用户目录cp #拷贝文件 cp /root/source 将root目录下的source文件复制到当前目录 cp source targe…...