前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开发指南 | 内嵌花生壳PHTunnel实现内网穿透

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

原创
作者头像
贝锐科技
修改2020-03-23 18:18:42
2.3K1
修改2020-03-23 18:18:42
举报
文章被收录于专栏:贝锐科技贝锐科技

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

花生壳PHTunnel组件制作

下载

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

规划目录结构

接下来的任务是规划自己的PHTunnel组件安装后,在openwrt系统上是怎样的目录结构。

首先核心的应用程序PHTunnel我们可以放在/usr/bin目录下,因为它是一个非管理员应用,所以一般比放在/usr/sbin目录下要更科学一些。

uci配置文件:由于openwrt的uci是常用的配置解决方案,所以需要一个uci配置文件,该文件通常放在/etc/config目录下,同时我们取名同样为PHTunnel,这样就可以使用uci set PHTunnel.xx.xx等操作PHTunnel的配置了。

根据PHTunnel列出的参数,uci的配置如下:

启动脚本:通常应用都是作为守护脚本运行,所以PHTunnel也会制作成守护程序,自动运行,所以需要在/etc/init.d中建立PHTunnel的启动脚本,名称也叫PHTunnel。

hotplug.d机制:为了及时响应网络状态,快速重启PHTunnel,可使用hotplug机制。这样在wan口断开重新连上网的时候,能马上重启PHTunnel。在/etc/hotplug.d/iface下需要创建一个xx-PHTunnel的脚本,其中xx代表脚本执行顺序,可以随便填。

这样,安装后的目录结构是如下图

编写PHTunnel组件Makefile

根据目录结构规划,现在来编写组件,由于openwrt的组件是用makefile文件编写。

将makefile及规划的files目录统一放在PHTunnel目录内,然后放在openwrt的package/utils目录中即可(可放在package下的任何位置),再来看一下目录结构

这时执行make menuconfig后,就能看到PHTunnel组件了

选中该组件后保存,执行make,就可以编译出带PHTunnel的固件了和对应的PHTunnel的ipk组件包了。

启动脚本

启动脚本用于启动与停止PHTunnel,启动后读取uci配置,变成PHTunnel的启动参数,然后启动PHTunnel程序,代码如下:

这里用到了openwrt的PROCD机制,这样可以在PHTunnel意外崩溃的情况下,自动重启。

hotplug脚本

用于在wan接口连接有效时,重新开启PHTunnel,加速重连速度。

PHTunnel-luci-app组件制作

功能

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

核心模块

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

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

LUCI页面

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

完成这样的菜单,需要在controller目录下实现,如图:

其中setup页面用于设置基本参数,Status页面用于扫码与解绑,Log用于显示日志。

Setup页面

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

显现的页面如图

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 : 用于解绑帐号

Log页面

用于显示日志,该页面相对简单(view/oray/PHTunnel_log.htm)

通过uci获取日志路径,并使用cat命令将文件内容输出即可。

制作组件的makefile

与制作PHTunnel组件一样,将所有文件组织成目录树,并加入Makefile

Makefile

最后同样将组件复制到openwrt/package/utils/下,这样我们可以在配置界面中看到PHTunnel-luci-app组件

选择以上两个组件,充分编译后,即可在本地的luci界面上使用PHTunnel了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 花生壳PHTunnel组件制作
    • 下载
      • 规划目录结构
        • 编写PHTunnel组件Makefile
          • 启动脚本
            • hotplug脚本
            • PHTunnel-luci-app组件制作
              • 功能
                • 核心模块
                  • LUCI页面
                    • Setup页面
                      • Status页面
                        • Log页面
                          • 制作组件的makefile
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档