就是隧道里保持相互通信的办法。
我现在研究到的就是 shell 定时执行,然后 lua 接收然后修改 hosts 文件,但是有些坑。
不知道是我固件问还是怎么,没法刷新 DNS,重启 dnsmasq 都没用。
根据知乎的一个问题回答为基础实现 lua 接收 Post 。
之前完全没接触过 lua,看着手册和 Google 弄了下面的代码。
##接收端
/www/cgi-bin/edithosts
#!/usr/bin/lua
local edithosts= require 'edithosts'
edithosts.Run()
/usr/lib/lua/edithosts
local edithosts= {}
function edithosts.Run()
local client = os.getenv("REMOTE_ADDR")
local GET = os.getenv("QUERY_STRING")
local POST = nil
local Domain = nil
local ifedit = "0"
local hostsFile = "/www/edithosts"
local hostsLog = "/www/edithosts.log"
local POSTLength = tonumber(os.getenv("CONTENT_LENGTH")) or 0
if (POSTLength > 0) then
POST = io.read(POSTLength)
Domain = string.sub(POST, 3)
end
if (Domain ~= nil) then
-- 修改 Hosts
local hostsMain = string.format("%s %s", client or '-', Domain or '-')
local hostsR = io.open(hostsFile ,"a+")
local hostsOld = hostsR:read()
hostsR:close()
ifedit = "2"
if (hostsMain ~= hostsOld) then
-- 如果内容不一样则修改 hosts 文件
local hostsIO = io.open(hostsFile, "w")
hostsIO:write(hostsMain)
hostsIO:close()
ifedit = "1"
-- 写入日志
local logIO = io.open(hostsLog, "a")
local nowTime = os.date("%Y-%m-%d %H:%M:%S")
local logMain = string.format("%s - %s - %s\n", client or '-', Domain or '-', nowTime or '-')
logIO:write(logMain)
logIO:close()
-- 重启 dnsmasq
local redns = os.execute("/etc/init.d/dnsmasq restart")
end
end
io.write("Content-type: text/html\nPragma: no-cache\n\n")
io.write(ifedit)
end
return edithosts
##发送请求
*/5 * * * * /usr/bin/postroom.sh
br-wan
是网口
/www/oldip 文件要预先创建
1.room 和 2.room 是自定义的域名
#!/bin/bash
interface=br-wan
NEW_IP=$(ip a show dev $interface |grep -oP "inet [0-9]+.[0-9]+.[0-9]+.[0-9]+" | sed 's/inet //g')
NOWTIME=`date`
IP_FILE='/www/oldip'
CURRENT_IP=`cat /www/oldip`
LOG_FILE="/www/post.log"
if [ ${NEW_IP} == ${CURRENT_IP} ] || [ ! ${NEW_IP} ]; then
echo ""
else
THIS_LOG=`curl -X POST --data 'd=1.room' 2.room:7080/cgi-bin/edithosts`
echo ${NOWTIME} >> ${LOG_FILE}
if [ ${THIS_LOG} ]; then
echo "TR069 OK" ${NEW_IP} >> ${LOG_FILE}
echo "" >> ${LOG_FILE}
echo ${NEW_IP} > ${IP_FILE}
else
echo "Error " ${THIS_LOG} >> ${LOG_FILE}
fi
fi
该如何完善这个功能呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.