开发指南 | 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了。

相关文章
|
安全 Linux 网络安全
组网神器WireGuard安装与配置教程(超详细)
组网神器WireGuard安装与配置教程(超详细)
63774 2
|
传感器 Linux
在Linux中使用libmodbus库进行Modbus RTU主从机通信
Modbus RTU是一种常见的工业通信协议,用于在自动化系统中传输数据。libmodbus是一个流行的C库,用于在Linux系统上实现Modbus通信。本文将介绍如何使用libmodbus库在Linux上创建Modbus RTU主从机通信的示例代码。
7154 0
|
XML Java BI
JXLS 实现复杂数据报表的 导入导出功能
JXLS 实现复杂数据报表的 导入导出功能
1812 0
JXLS 实现复杂数据报表的 导入导出功能
|
存储 BI 数据库
PowerApps教程-实现简单的增删改查
PowerApps是Microsoft提供的低代码开发平台,允许用户无需编写大量代码,通过直观的界面设计快速创建应用程序。通过PowerApps的数据连接功能,系统可以轻松地与其他Microsoft 365服务(如SharePoint、Excel)进行集成,实现数据的无缝交互。本文详细介绍了如何使用PowerApps快速开发一个支持增删改查的报表页面,采用SharePoint上的List作为数据源。
772 0
|
12月前
|
监控 Linux C#
《C#与.NET Core跨平台开发的融合架构与实践逻辑》
本文深入解析了利用C#与.NET Core开发跨平台桌面应用的核心逻辑,探讨如何突破操作系统壁垒实现文件管理、图像处理和系统监控等功能的统一体验。阐述了.NET Core对不同系统底层差异的抽象与适配,包括文件系统规则的转化、图形硬件调用的平衡、系统内核信息的解读,以及C#语言特性在跨平台开发中的互补作用。强调跨平台开发需培养“系统无关”的抽象思维,通过技术融合实现功能逻辑与用户体验的跨平台一致性,重塑桌面应用的开发边界。
278 0
|
Ubuntu 安全 Docker
【DevOps】Docker 最佳实践指南(绝对干货)
祝您的 Docker 之旅一切顺利!
811 4
|
自然语言处理 JavaScript 程序员
UTF-8 GBK UTF8 GB2312 之间的区别和关系
【8月更文挑战第24天】UTF-8(Unicode Transformation Format-8bit)是一种多字节编码方案,用于解决国际化字符编码问题,英文使用一个字节编码,中文使用三个字节。它涵盖了全球所有国家的字符,具备良好的通用性,可在支持UTF-8的浏览器上显示。尽管可包含字节顺序标记(BOM),但通常不使用。GBK是在GB2312基础上扩展的标准,使用双字节编码,包括所有中文字符,但通用性较弱。UTF-8和GBK之间需通过Unicode转换。对于含有大量英文字符的网站或论坛,使用UTF-8编码可节省存储空间。
1059 5
|
开发工具 Android开发 图形学
【2015~2024】大牛直播SDK演化史
大牛直播SDK始创于2015年,旨在提供低延迟的RTMP推拉流解决方案,特别适用于毫秒级延迟的应用场景。初始版本针对Android平台实现RTMP直播推送,随后扩展至Windows、iOS和Linux平台,支持RTMP与RTSP播放器,延迟稳定在一秒以内。SDK涵盖实时推流、播放、GB28181设备接入、录像、多路流媒体转发、轻量级RTSP服务等多种功能,并支持H.265编码格式。该SDK适用于在线教育、智慧安防等多个行业场景,并已发展成为GitHub上获得超过10000星标的强大跨平台流媒体内核直播SDK。
980 1
|
SQL 关系型数据库 数据库
python使用DBUtil连接池封装psycopg2/hologres
这段代码是一个Python类`PsycopgConn`,用于管理PostgreSQL数据库连接池。类使用了`dbutils.pooled_db.PooledDB`来创建连接池,支持多线程,并提供了获取连接、关闭连接池、执行查询(`SelectSql`)、插入(`InsertSql`)和更新(`UpdateSql`)SQL的方法。类实现单例模式以确保只有一个实例存在。连接配置包括主机、端口等
|
开发框架 前端开发 JavaScript
探索现代Web开发中的框架选择:Blazor、Angular和React的全面比较与分析
【8月更文挑战第31天】随着Web开发技术的发展,选择合适的框架对项目成功至关重要。本文对比了三大前端框架:Blazor、Angular和React。Blazor是微软推出的.NET Web客户端开发框架,支持C#编写前端代码;Angular由Google支持,基于TypeScript,适用于大型应用;React是由Facebook维护的高效JavaScript库。
654 0