123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #!/bin/sh
- PATH="/usr/sbin:/usr/bin:/sbin:/bin"
- checkmd5(){
- local nowmd5=$(md5sum /tmp/adguard.list 2>/dev/null)
- nowmd5=${nowmd5%% *}
- local lastmd5=$(uci get AdGuardHome.AdGuardHome.gfwlistmd5)
- if [ "$nowmd5" != "$lastmd5" ]; then
- /etc/init.d/AdGuardHome reload
- uci get AdGuardHome.AdGuardHome.gfwlistmd5="$nowmd5"
- [ "$2" == "noreload" ] && return
- uci commit AdGuardHome
- fi
- }
- configpath=$(uci get AdGuardHome.AdGuardHome.configpath)
- [ "$1" == "del" ] && sed -i '/programaddstart/,/programaddend/d' $configpath && checkmd5 && exit 0
- gfwupstream=$(uci get AdGuardHome.AdGuardHome.gfwupstream)
- if [ -z $gfwupstream ]; then
- gfwupstream="tcp://208.67.220.220:5353"
- fi
- if [ ! -f "$configpath" ]; then
- echo "please make a config first"
- exit 1
- fi
- wget-ssl --no-check-certificate https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt -O- | base64 -d > /tmp/gfwlist.txt
- cat /tmp/gfwlist.txt | awk -v upst="$gfwupstream" 'BEGIN{getline;}{
- s1=substr($0,1,1);
- if (s1=="!")
- {next;}
- if (s1=="@"){
- $0=substr($0,3);
- s1=substr($0,1,1);
- white=1;}
- else{
- white=0;
- }
- if (s1=="|")
- {s2=substr($0,2,1);
- if (s2=="|")
- {
- $0=substr($0,3);
- split($0,d,"/");
- $0=d[1];
- }else{
- split($0,d,"/");
- $0=d[3];
- }}
- else{
- split($0,d,"/");
- $0=d[1];
- }
- star=index($0,"*");
- if (star!=0)
- {
- $0=substr($0,star+1);
- dot=index($0,".");
- if (dot!=0)
- $0=substr($0,dot+1);
- else
- next;
- s1=substr($0,1,1);
- }
- if (s1==".")
- {fin=substr($0,2);}
- else{fin=$0;}
- if (index(fin,".")==0) next;
- if (index(fin,"%")!=0) next;
- if (index(fin,":")!=0) next;
- match(fin,"^[0-9\.]+")
- if (RSTART==1 && RLENGTH==length(fin)) {print "ipset add gfwlist "fin>"/tmp/doipset.sh";next;}
- if (fin=="" || finl==fin) next;
- finl=fin;
- if (white==0)
- {print(" - '\''[/"fin"/]"upst"'\''");}
- else{
- print(" - '\''[/"fin"/]#'\''");}
- }END{print(" - '\''[/programaddend/]#'\''")}' > /tmp/adguard.list
- grep programaddstart $configpath
- if [ "$?" == "0" ]; then
- sed -i '/programaddstart/,/programaddend/c\ - '\''\[\/programaddstart\/\]#'\''' $configpath
- sed -i '/programaddstart/'r/tmp/adguard.list $configpath
- else
- sed -i '1i\ - '\''[/programaddstart/]#'\''' /tmp/adguard.list
- sed -i '/upstream_dns:/'r/tmp/adguard.list $configpath
- fi
- checkmd5
- rm -f /tmp/gfwlist.txt /tmp/adguard.list
|