开发指南 | OpenWrt免费内嵌花生壳PHTunnel实现内网穿透

简介: 本文将详解如何把花生壳PHTunnel封装成一个OpenWrt标准组件,并编译到自己的OpenWrt固件中,实现内网穿透功能。

花生壳PHTunnel SDK采用C语言实现,最小约80KB,支持TCP、UDP、HTTP、HTTPS协议,端到端的TLS加密通信,黑白名单防黑验证等,覆盖Windows、Linux、树莓派、Mac、安卓等主流操作系统。
本文将详解如何把花生壳PHTunnel封装成一个OpenWrt标准组件,并编译到自己的OpenWrt固件中,实现内网穿透功能。

花生壳PHTunnel组件制作

下载
先下载编译平台的二进制PHTunnel文件是我们第一步要做的,可到Oray官方网站的「开放平台」进行下载,进入https://open.oray.com/sdk 选择相应平台下载包。
1.png

规划目录结构
接下来的任务是规划自己的PHTunnel组件安装后,在openwrt系统上是怎样的目录结构。
首先核心的应用程序PHTunnel我们可以放在/usr/bin目录下,因为它是一个非管理员应用,所以一般比放在/usr/sbin目录下要更科学一些。
uci配置文件:由于openwrt的uci是常用的配置解决方案,所以需要一个uci配置文件,该文件通常放在/etc/config目录下,同时我们取名同样为PHTunnel,这样就可以使用uci set PHTunnel.xx.xx等操作PHTunnel的配置了。
根据PHTunnel列出的参数,uci的配置如下:

2.png


启动脚本:通常应用都是作为守护脚本运行,所以PHTunnel也会制作成守护程序,自动运行,所以需要在/etc/init.d中建立PHTunnel的启动脚本,名称也叫PHTunnel。
hotplug.d机制:为了及时响应网络状态,快速重启PHTunnel,可使用hotplug机制。这样在wan口断开重新连上网的时候,能马上重启PHTunnel。在/etc/hotplug.d/iface下需要创建一个xx-PHTunnel的脚本,其中xx代表脚本执行顺序,可以随便填。
这样,安装后的目录结构是如下图:

3.png

编写PHTunnel组件Makefile
根据目录结构规划,现在来编写组件,由于openwrt的组件是用makefile文件编写。
4.png
将makefile及规划的files目录统一放在PHTunnel目录内,然后放在openwrt的package/utils目录中即可(可放在package下的任何位置),再来看一下目录结构

5.png

这时执行make menuconfig后,就能看到PHTunnel组件了。
6.png
7.png
选中该组件后保存,执行make,就可以编译出带PHTunnel的固件了和对应的PHTunnel的ipk组件包了。

启动脚本
启动脚本用于启动与停止PHTunnel,启动后读取uci配置,变成PHTunnel的启动参数,然后启动PHTunnel程序,代码如下:
8.png
这里用到了openwrt的PROCD机制,这样可以在PHTunnel意外崩溃的情况下,自动重启。

hotplug脚本
9.png
用于在wan接口连接有效时,重新开启PHTunnel,加速重连速度。

PHTunnel-luci-app组件制作

功能
PHTunnel运行后,需要进行扫码登录,管理,解绑等操作,这些都是需要正常使用花生壳的交互操作,openwrt提供的luci是实现交互的最佳选择,也是最正式的方式,下面来制作基于luci的PHTunnel组件。

核心模块
luci的代码区域在/usr/lib/lua/luci中,所以所有交互的web代码都放在这个下面,首先是核心的基础库PHTunnel.lua,它将提供所有核心函数,如获取二维码,登录信息和解绑操等核心功能。

10.png
所有函数的核心都是调用wget来访问rpc服务和官方提供的web服务。

LUCI页面

完成核心函数库后,接下来就是根据luci的架构进行开发。首先是规划菜单与菜单项,如图:
11.png

完成这样的菜单,需要在controller目录下实现,如图:
12.png
其中setup页面用于设置基本参数,Status页面用于扫码与解绑,Log用于显示日志。

Setup页面

设置页面是一个纯UCI页面,我们可以使用luci提供的cbi模块开发。
13.png

显现的页面如图:
14.png

Status页面

该页面用于显示二维码,管理界面链接及解绑。相关代码在view/oray/PHTunnel_status.htm, view/oray/PHTunnel_inner_status.htm, view/oray/PHTunnel_log_off.htm,
PHTunnel_status.htm : 用于显示当前状态。
PHTunnel_inner_status.html : 用于后台实时检测绑定状态,当用户使用手机刷二维码绑定后,PHTunnel_status.htm页面动态显示绑定帐号。
PHTunnel_log_off : 用于解绑帐号15.png

Log页面

用于显示日志,该页面相对简单(view/oray/PHTunnel_log.htm)
16.png
通过uci获取日志路径,并使用cat命令将文件内容输出即可。

制作组件的makefile

与制作PHTunnel组件一样,将所有文件组织成目录树,并加入Makefile
17.png
Makefile
18.png
最后同样将组件复制到openwrt/package/utils/下,这样我们可以在配置界面中看到PHTunnel-luci-app组件
19.png
选择以上两个组件,充分编译后,即可在本地的luci界面上使用PHTunnel了。

相关文章
|
弹性计算 NoSQL 关系型数据库
又降价啦!2024年阿里云核心产品价格全线下调,最高幅度达55%
2024年3月1日开始,阿里云将开启新一轮的降价政策,核心产品价格全线下调,平均降幅20%,最高幅度达55%,阿里云希望通过此次大规模降价,让更多企业和开发者用上先进的公共云服务,加速云计算在中国各行各业的普及和发展。
又降价啦!2024年阿里云核心产品价格全线下调,最高幅度达55%
|
Linux
mount 挂载 NTFS 格式U盘
【1月更文挑战第4天】
1695 1
|
XML Java BI
JXLS 实现复杂数据报表的 导入导出功能
JXLS 实现复杂数据报表的 导入导出功能
1388 0
JXLS 实现复杂数据报表的 导入导出功能
|
缓存 监控 Java
手把手教你在服务器如何免费搭建一套GPS定位系统平台
GPS定位系统一般是指部署在服务器端可以监控各类GPS北斗卫星定位硬件设备的系统软件,比如实时的位置和行驶轨迹等等。
5615 0
手把手教你在服务器如何免费搭建一套GPS定位系统平台
|
6月前
|
机器学习/深度学习 人工智能 算法
解锁政策红利:大数据时代的企业与个人发展新契机
在大数据与机器学习时代,政策解读、预测分析和个性化匹配成为挖掘发展新动能的重要工具。无论是企业还是个人,都能借助先进技术轻松理解复杂政策,把握趋势先机。文章探讨了自由职业者、创业者及企业员工如何通过政策支持实现协同发展,并介绍了“政策宝”这一智慧助手,助力用户发现和利用政策红利,抓住机遇实现目标。探索政策宝库,开启发展新征程!
|
Ubuntu 安全 Docker
【DevOps】Docker 最佳实践指南(绝对干货)
祝您的 Docker 之旅一切顺利!
464 4
|
搜索推荐 算法 前端开发
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
413 4
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
|
12月前
|
弹性计算 安全 Windows
通过远程桌面连接Windows服务器提示“由于协议错误,会话将被中断,请重新连接到远程计算机”错误怎么办?
通过远程桌面连接Windows服务器提示“由于协议错误,会话将被中断,请重新连接到远程计算机”错误怎么办?
|
存储 Linux Go
如何在Github上Pull Request的教程
关于如何在GitHub上发起Pull Request(合并请求)的详细教程,包括Fork(分支)、Clone(克隆)、创建新分支、修改代码、提交更改、推送到远程仓库等步骤,并提供了解决权限问题的方法,如创建个人访问令牌(Personal Access Token)。
590 6
|
JSON 前端开发 JavaScript
革新Admin.NET框架:前端体验飞跃与代码生成自动化的双重革命,引领高效开发新时代!
【8月更文挑战第3天】Admin.NET是一款专为现代企业应用打造的高效框架,凭借强大的后台管理和灵活的扩展性深受开发者喜爱。本文探讨如何优化其前端体验与开发效率。首先,通过采用Flexbox和CSS Grid等技术实现响应式布局重构,确保了不同设备上的一致体验。其次,引入Vue.js或React实现组件化开发,提高代码复用性和维护性。再者,利用Webpack等工具进行性能优化,提升页面加载速度。此外,开发了代码生成器以自动生成CRUD模块,极大提高了开发效率。这些改进使Admin.NET前端开发更高效、灵活且易于维护。
472 0

热门文章

最新文章