【2019-5-31】AC9改好GPIO增加User_Scripts基于华硕3.0.0.4.382.51610源码16M固件
本帖最后由 aoeII 于 2019-5-31 16:43 编辑采用ASUS官方源码修改编译而来。
源码下载地址:https://dlcdnets.asus.com/pub/ASUS/wireless/RT-AC1200G+/GPL_RT-AC1200GPlus_300438251610.zip?_ga=2.53265576.1240088749.1559268863-196246637.1546938074
固件说明:
1、修改init.c,适配GPIO(包含在了增加用户脚本User_Scripts源码修改文件里)
2、增加用户脚本User_Scripts功能,源码修改文件见帖子附件
3、用梅林源码里的wget 1.20替换官方源码里的1.16,以适应某些网站对tls 1.2的要求
wget 1.20 源码下载地址:https://github.com/RMerl/asuswrt-merlin.ng/tree/master/release/src/router/wget
4、修改Makefile,把源码中编译出来的curl 7.21.7安装到/usr/sbin下面(官方源码只编译不安装curl,除非选用speedtest组件)
修改方法:找到判断speedtest是否安装的语句注释或删除
curl-7.21.7-install: curl-7.21.7
@$(SEP)
install -D curl-7.21.7/lib/.libs/libcurl.so.4.2.0 $(INSTALLDIR)/curl-7.21.7/usr/lib/libcurl.so.4.2.0
$(STRIP) $(INSTALLDIR)/curl-7.21.7/usr/lib/libcurl.so.4.2.0
cd $(INSTALLDIR)/curl-7.21.7/usr/lib && ln -sf libcurl.so.4.2.0 libcurl.so && ln -sf libcurl.so.4.2.0 libcurl.so.4
# ifeq ($(RTCONFIG_SPEEDTEST),y)
# for speedtest
install -D curl-7.21.7/src/.libs/curl $(INSTALLDIR)/curl-7.21.7/usr/sbin/curl
$(STRIP) $(INSTALLDIR)/curl-7.21.7/usr/sbin/curl
# endif
用户脚本使用方法:
1、在系统设置里打开SSH,为安全起见,仅内网Lan可登录
2、用putty等终端软件登陆路由器SHELL环境,执行以下命令,并等待路由器重启nvram set jffs2_on=1
nvram set jffs2_enable=1
nvram set jffs2_format=1
nvram set jffs2_scripts=1
nvram commit
reboot
3、用Winscp登录路由器,可以看到/jffs下已自动建立configs和scripts两个子目录,可以写入自定义配置文件和脚本了。
附上一个我自己用的脚本/jffs/scripts/init-start,实现自定义hosts文件
#!/bin/sh
i=0
while [ $i -le 20 ]; do
success_start_service=`nvram get success_start_service`
if [ "$success_start_service" == "1" ]; then
break
fi
i=$(($i+1))
echo "autorun APP: wait $i seconds...";
sleep 1
done
#从下方开始你的脚本
rm -f /etc/hosts
cp -rf /jffs/configs/hosts /etc/hosts
sleep 30
killall -SIGHUP dnsmasq
dnspod动态域名更新脚本/jffs/scripts/wan-start(没有修改出custom_ddns,需要改动的地方比较多,先用这个凑合一下)#!/bin/sh
#################################################
# AnripDdns v5.08
# 基于DNSPod用户API实现的动态域名客户端
# 作者: 若海
# 介绍: http://www.anrip.com/ddnspod
# 时间: 2016-02-24 16:25:00
# Mod: 荒野无灯 http://ihacklog.com2016-03-16
# Mod: aoeii https://aoeii.com2019-05-30
#################################################
# 等待获得外网IP (wan0=第1wanwan1=第2wan)
i=0
while [ $i -le 30 ]; do
wan_ip_last3digits=`nvram get wan0_ipaddr | awk -F "." '{print $4}'`
if [ "$wan_ip_last3digits" != "255" ]; then
break
fi
i=$(($i+1))
echo "autorun APP: wait $i seconds...";
sleep 1
done
#延迟两分钟,等待ntp服务同步路由器时间
sleep 120
# 获得本地外网IP (wan0=第1wanwan1=第2wan)
arIpAdress() {
local inter=`nvram get wan0_ipaddr`
echo $inter
}
# 查询域名地址
# 参数: 待查询域名
arNslookup() {
local inter="http://ip.taobao.com/service/getIpInfo2.php?ip=myip"
local ipstr=`wget --quiet --output-document=- $inter$1`
if [ $? != 0 ]; then
local ipstr=`curl -s$inter$1`
fi
echo $ipstr$1 | awk -F"ip" '{print $2}' | awk -F'"' '{print $3}'
}
# 读取接口数据
# 参数: 接口类型 待提交数据
arApiPost() {
local agent="AnripDdns/5.07(mail@anrip.com)"
local inter="https://dnsapi.cn/${1:?'Info.Version'}"
if [ "x${arToken}" = "x" ]; then # undefine token
local param="login_email=${arMail}&login_password=${arPass}&format=json&${2}"
else
local param="login_token=${arToken}&format=json&${2}"
fi
wget --quiet --no-check-certificate --output-document=- --user-agent=$agent --post-data $param $inter
if [ $? != 0 ]; then
curl --silent -X POST -H 'charset=UTF-8;' --user-agent "$agent" --data "$param" $inter
fi
}
# 更新记录信息
# 参数: 主域名 子域名
arDdnsUpdate() {
local domainID recordID recordRS recordCD
# 获得域名ID
domainID=$(arApiPost "Domain.Info" "domain=${1}")
domainID=$(echo $domainID | sed 's/.\+{"id":"\(\+\)".\+/\1/')
# 获得记录ID
recordID=$(arApiPost "Record.List" "domain_id=${domainID}&sub_domain=${2}")
recordID=$(echo $recordID | sed 's/.\+\[{"id":"\(\+\)".\+/\1/')
# 更新记录IP
recordRS=$(arApiPost "Record.Ddns" "domain_id=${domainID}&record_id=${recordID}&sub_domain=${2}&record_line=默认&value=$hostIP")
recordCD=$(echo $recordRS | sed 's/.\+{"code":"\(\+\)".\+/\1/')
# 输出记录IP
if [ "$recordCD" == "1" ]; then
echo $recordRS | sed 's/.\+,"value":"\(\+\)".\+/\1/'
return 1
fi
# 输出错误信息
echo $recordRS | sed 's/.\+,"message":"\([^"]\+\)".\+/\1/'
}
# 动态检查更新
# 参数: 主域名 子域名
arDdnsCheck() {
local postRS
local hostIP=$(arIpAdress)
local lastIP=$(arNslookup)
echo "hostIP: ${hostIP}"
echo "lastIP: ${lastIP}"
if [ "$lastIP" != "$hostIP" ]; then
postRS=$(arDdnsUpdate $1 $2)
echo "postRS: ${postRS}"
if [ $? -ne 1 ]; then
return 1
fi
fi
return 0
}
###################################################
# 使用Token认证(免登陆,安全性更高,推荐使用) 请去 https://www.dnspod.cn/console/user/security 获取
arToken="12345,123456789abcdefghijklmnopq"
# 使用邮箱和密码认证(不启用Token用这个)
arMail=""
arPass=""
###################################################
# 检查更新域名
arDdnsCheck "aaa.com" "www"
arDdnsCheck "bbb.com" ""
arDdnsCheck "ccc.com" "pic"
if [ $? -ne 0 ]; then
echo -n '##'"$(date "+%Y-%m-%d %H:%M:%S")"'## ''更新DDNS成功' >> /jffs/ddns.log
else
echo -n '##'"$(date "+%Y-%m-%d %H:%M:%S")"'## ''IP未改变或更新失败' >> /jffs/ddns.log
fi
别忘了给脚本加上执行权限:
chmod +x /jffs/scripts/*.*固件及修改文件下载地址:
固件:
https://aoeii.com/router/image-1 ... et1.20-curl7.21.zip
Makefile:
https://aoeii.com/router/Makefile.zip
wget 1.20:
https://aoeii.com/router/wget_1.20.zip
启用user_scripts功能的源码修改
6666666666666666666 终于有AC9的固件更新了 楼主辛苦,顶
终于有AC9的固件更新了,
楼主辛苦,顶! 看看哈哈哈 没硬改的就看看,精简的用起来还不错
楼主牛逼~~~~~~~~~~~~~~~~~~ 楼主666666666666666666666666 马上测试一下 终于有人更新了!!!!:lol 感谢分享!!辛苦了~~~ 感谢分享!!辛苦了~~~ 卧槽,强大!!!大神入住AC9呐可喜可贺 感谢分享····