幫助
花生殼PHTunnel SDK采用C語(yǔ)言實(shí)現(xiàn),最小約80KB,支持TCP、UDP、HTTP、HTTPS協(xié)議,端到端的TLS加密通信,黑白名單防黑驗(yàn)證等,覆蓋Windows、Linux、樹(shù)莓派、Mac、安卓等主流操作系統(tǒng)。
本文將詳解如何把花生殼PHTunnel封裝成一個(gè)OpenWrt標(biāo)準(zhǔn)組件,并編譯到自己的OpenWrt固件中,實(shí)現(xiàn)內(nèi)網(wǎng)穿透功能。
先下載編譯平臺(tái)的二進(jìn)制PHTunnel文件是我們第一步要做的,可到Oray官方網(wǎng)站的「開(kāi)放平臺(tái)」進(jìn)行下載,進(jìn)入https://open.oray.com/sdk 選擇相應(yīng)平臺(tái)下載包。
規(guī)劃目錄結(jié)構(gòu)
接下來(lái)的任務(wù)是規(guī)劃自己的PHTunnel組件安裝后,在openwrt系統(tǒng)上是怎樣的目錄結(jié)構(gòu)。
首先核心的應(yīng)用程序PHTunnel我們可以放在/usr/bin目錄下,因?yàn)樗且粋€(gè)非管理員應(yīng)用,所以一般比放在/usr/sbin目錄下要更科學(xué)一些。
uci配置文件:由于openwrt的uci是常用的配置解決方案,所以需要一個(gè)uci配置文件,該文件通常放在/etc/config目錄下,同時(shí)我們?nèi)∶瑯訛?/span>PHTunnel,這樣就可以使用uci set PHTunnel.xx.xx等操作PHTunnel的配置了。
根據(jù)PHTunnel列出的參數(shù),uci的配置如下:
啟動(dòng)腳本:通常應(yīng)用都是作為守護(hù)腳本運(yùn)行,所以PHTunnel也會(huì)制作成守護(hù)程序,自動(dòng)運(yùn)行,所以需要在/etc/init.d中建立PHTunnel的啟動(dòng)腳本,名稱也叫PHTunnel。
hotplug.d機(jī)制:為了及時(shí)響應(yīng)網(wǎng)絡(luò)狀態(tài),快速重啟PHTunnel,可使用hotplug機(jī)制。這樣在wan口斷開(kāi)重新連上網(wǎng)的時(shí)候,能馬上重啟PHTunnel。在/etc/hotplug.d/iface下需要?jiǎng)?chuàng)建一個(gè)xx-PHTunnel的腳本,其中xx代表腳本執(zhí)行順序,可以隨便填。
這樣,安裝后的目錄結(jié)構(gòu)是如下圖
根據(jù)目錄結(jié)構(gòu)規(guī)劃,現(xiàn)在來(lái)編寫組件,由于openwrt的組件是用makefile文件編寫。
將makefile及規(guī)劃的files目錄統(tǒng)一放在PHTunnel目錄內(nèi),然后放在openwrt的package/utils目錄中即可(可放在package下的任何位置),再來(lái)看一下目錄結(jié)構(gòu)
這時(shí)執(zhí)行make menuconfig后,就能看到PHTunnel組件了
選中該組件后保存,執(zhí)行make,就可以編譯出帶PHTunnel的固件了和對(duì)應(yīng)的PHTunnel的ipk組件包了。
啟動(dòng)腳本用于啟動(dòng)與停止PHTunnel,啟動(dòng)后讀取uci配置,變成PHTunnel的啟動(dòng)參數(shù),然后啟動(dòng)PHTunnel程序,代碼如下:
這里用到了openwrt的PROCD機(jī)制,這樣可以在PHTunnel意外崩潰的情況下,自動(dòng)重啟。
用于在wan接口連接有效時(shí),重新開(kāi)啟PHTunnel,加速重連速度。
PHTunnel運(yùn)行后,需要進(jìn)行掃碼登錄,管理,解綁等操作,這些都是需要正常使用花生殼的交互操作,openwrt提供的luci是實(shí)現(xiàn)交互的最佳選擇,也是最正式的方式,下面來(lái)制作基于luci的PHTunnel組件。
luci的代碼區(qū)域在/usr/lib/lua/luci中,所以所有交互的web代碼都放在這個(gè)下面,首先是核心的基礎(chǔ)庫(kù)PHTunnel.lua,它將提供所有核心函數(shù),如獲取二維碼,登錄信息和解綁操等核心功能。
所有函數(shù)的核心都是調(diào)用wget來(lái)訪問(wèn)rpc服務(wù)和官方提供的web服務(wù)。
完成核心函數(shù)庫(kù)后,接下來(lái)就是根據(jù)luci的架構(gòu)進(jìn)行開(kāi)發(fā)。首先是規(guī)劃菜單與菜單項(xiàng),如圖:
完成這樣的菜單,需要在controller目錄下實(shí)現(xiàn),如圖:
其中setup頁(yè)面用于設(shè)置基本參數(shù),Status頁(yè)面用于掃碼與解綁,Log用于顯示日志。
設(shè)置頁(yè)面是一個(gè)純UCI頁(yè)面,我們可以使用luci提供的cbi模塊開(kāi)發(fā)。
顯現(xiàn)的頁(yè)面如圖
該頁(yè)面用于顯示二維碼,管理界面鏈接及解綁。相關(guān)代碼在view/oray/PHTunnel_status.htm, view/oray/PHTunnel_inner_status.htm, view/oray/PHTunnel_log_off.htm,
PHTunnel_status.htm : 用于顯示當(dāng)前狀態(tài)。
PHTunnel_inner_status.html : 用于后臺(tái)實(shí)時(shí)檢測(cè)綁定狀態(tài),當(dāng)用戶使用手機(jī)刷二維碼綁定后,PHTunnel_status.htm頁(yè)面動(dòng)態(tài)顯示綁定帳號(hào)。
PHTunnel_log_off : 用于解綁帳號(hào)
Log頁(yè)面
用于顯示日志,該頁(yè)面相對(duì)簡(jiǎn)單(view/oray/PHTunnel_log.htm)
通過(guò)uci獲取日志路徑,并使用cat命令將文件內(nèi)容輸出即可。
與制作PHTunnel組件一樣,將所有文件組織成目錄樹(shù),并加入Makefile
Makefile
最后同樣將組件復(fù)制到openwrt/package/utils/下,這樣我們可以在配置界面中看到PHTunnel-luci-app組件
選擇以上兩個(gè)組件,充分編譯后,即可在本地的luci界面上使用PHTunnel了。
熱賣產(chǎn)品購(gòu)買/續(xù)費(fèi)
關(guān)注逸群科技
微信咨詢
北京逸群信息技術(shù)有限公司 Copyright ? 2009-2024 DDNS官網(wǎng). 花生殼DDNSCN服務(wù)中心 All Rights Reserved
網(wǎng)站備案:京ICP備09041960號(hào)-7 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證:京B2-20180304 虛擬專用網(wǎng):B1-20180824