[ ! "`nvram get ss_enable`" = "1" ] && exit 1 [ `ps |grep $0|grep -v grep|wc -l ` -gt 2 ] && exit 1 [ -f /tmp/cron_ss.lock ] && exit 1 cd /tmp #nvram set tkcssr="link/S6v4iuNmjynywEZ0?is_ss=0" #nvram set ssr_url=" -u ssftp:ftp ftp://202.109.226.26/AiCard_01/opt/www/default/" #nvram commmit nvram set ss_3p_enable=1 nvram set ss_3p_gfwlist=1 nvram set ss_3p_kool=1 nvram set ss_ss_sub1=1 nvram unset ss_check nvram set ss_updatess=1 nvram set ss_update=0 nvram set ss_update_hour=05 nvram set ss_update_min=35 nvram commit #DNS="`nvram get ss_DNS_Redirect`" #[ "$DNS" = "1" ] && nvram set ss_DNS_Redirect=0 && nvram commit sed -e '/autoss.sh/d' /etc/storage/cron/crontabs/admin > /etc/storage/cron/crontabs/admin.1 cat >>/etc/storage/cron/crontabs/admin.1 <<-ABCDEFG 29 5 * * * [ \`nvram get ss_enable\` = 1 ] && cd /tmp && wget -q -O .sh https://gitee.com/yzqiang/autoss/raw/master/autoss.sh || cp /etc/storage/autoss.sh autoss.sh && sh autoss.sh refresh 4,14,24,34,44,54 * * * * [ \`nvram get ss_enable\` = 1 ] && cd /tmp && wget -q -O autoss.sh https://gitee.com/yzqiang/autoss/raw/master/autoss.sh || cp /etc/storage/autoss.sh autoss.sh && sh autoss.sh ABCDEFG mv /etc/storage/cron/crontabs/admin.1 /etc/storage/cron/crontabs/admin mtd_storage.sh save >/dev/null 2>/dev/null killall crond && crond if [ ! "`stat -c %s /tmp/autoss.sh`" = "`stat -c %s /etc/storage/autoss.sh 2>/dev/null`" ] ; then cp /tmp/autoss.sh /etc/storage/autoss.sh mtd_storage.sh save >/dev/null 2>/dev/null killall crond && crond fi ##################### SSR Server ########### url="https://www.youtube.com/intl/zh-CN/yt/about/" if [ ! "$1" = "refresh" ] ; then rm /tmp/tmp.txt 2>/dev/null #curl -o /tmp/tmp.txt -s -k -L --retry 3 -r 0-10239 -m 5 $url 2>/dev/null curl -o /tmp/tmp.txt -s -k -L --retry 3 -m 5 https://www.google.com.hk/?gws_rd=ssl 2>/dev/null [ ! -s /tmp/tmp.txt ] && curl -o /tmp/tmp.txt -s -k -L --retry 3 -m 5 https://www.google.com.hk/?gws_rd=ssl 2>/dev/null [ ! -s /tmp/tmp.txt ] && curl -o /tmp/tmp.txt -s -k -L --retry 3 -m 8 https://www.google.com.hk/?gws_rd=ssl 2>/dev/null [ -s /tmp/tmp.txt ] && exit 0 fi ######################## get from tckssr ######################## get_from_tckssr() { rm ss.txt > /dev/null 2>&1 tkcssr="`nvram get tkcssr`" if [ ! "$tkcssr"x = "x" ] || [ "1" = "1" ] ; then iss="https://www.capsule.cf/"$tkcssr iss="https://www.capsule.cf/link/S6v4iuNmjynywEZ0?is_ss=0" #iss="https://capsule.cf/link/S6v4iuNmjynywEZ0?is_ss=0" #curl -o ss.txt -s -k -L -m 30 $iss 2>/dev/null #以下为4位自定义端口 curl -o ss.txt -s -k -L -m 30 https://www.capsule.cf/link/S6v4iuNmjynywEZ0?is_ss=0 2>/dev/null #以下为单端口多用户 #curl -o ss1.txt -s -k -L -m 30 https://www.capsule.cf/link/uqCxfyeFth56MN0a?is_ss=0 2>/dev/null #cat ss1.txt >>ss.txt if [ -s ss.txt ] ; then Server="" Port="" Pass="" Method="" Usage="" sed 's/"//g' ss.txt| sed 's/nvram set //g' | grep -E 'rt_ss_server_|rt_ss_port_|rt_ss_password_|rt_ss_method_|rt_ss_usage_' | sed -r 's/\_x([0-9]|[0-9][0-9]|[0-9][0-9][0-9])=/=/g' | while read i do var1=`echo $i|awk -F '=' '{print $1}'` var2=`echo $i|awk -F '=' '{print $2}'` case "$var1" in "rt_ss_server") Server="$var2" ;; "rt_ss_port") Port="$var2" ;; "rt_ss_password") Pass="$var2" ;; "rt_ss_method") Method="$var2" ;; "rt_ss_usage") Usage="$var2" Usage=${Usage//:/:} ;; esac if [ ! "$Server" = "" ] && [ ! "$Port" = "" ] && [ ! "$Pass" = "" ] && [ ! "$Method" = "" ] && [ ! "$Usage" = "" ] ; then [ "${Server:0:2}" = "cn" ] || [ "${Server:0:2}" = "tw" ] && continue result=$(echo $Server | grep level3 ) [[ "$result" != "" ]] && [ ! "${Server:0:4}" = "hk35" ] && [ ! "${Server:0:4}" = "hk34" ] && [ ! "${Server:0:4}" = "hk20" ] && [ ! "${Server:0:4}" = "hk21" ] && [ ! "${Server:0:4}" = "hk22" ] && [ ! "${Server:0:4}" = "hk23" ] && echo $Server:$Port:$Pass:$Method:$Usage >>ss.ini # [ "${Server:0:2}" = "jp" ] && [ ! "${Server:0:3}" = "jp3" ] && [ ! "${Server:0:3}" = "jp4" ] && echo $Server:$Port:$Pass:$Method:$Usage >>ss.ini # [ "${Server:0:2}" = "us" ] && echo $Server:$Port:$Pass:$Method:$Usage >>ss.ini # [ "${Server:0:2}" = "hk" ] && [ ! "${Server:0:4}" = "hk10" ] && [ ! "${Server:0:4}" = "hk15" ] && [ ! "${Server:0:3}" = "hk2" ] && [ ! "${Server:0:3}" = "hk4" ] && [ ! "${Server:0:3}" = "hk5" ] && echo $Server:$Port:$Pass:$Method:$Usage >>ss.ini # [ "${Server:0:2}" = "sg" ] && echo $Server:$Port:$Pass:$Method:$Usage >>ss.ini # [ "${Server:0:2}" = "us" ] && echo $Server:$Port:$Pass:$Method:$Usage >>ss.ini # [ "${Server:0:2}" = "uk" ] && echo $Server:$Port:$Pass:$Method:$Usage >>ss.ini # [ "${Server:0:2}" = "fr" ] && echo $Server:$Port:$Pass:$Method:$Usage >>ss.ini # [ "${Server:0:2}" = "jp" ] && echo $Server:$Port:$Pass:$Method:$Usage >>ss.ini # [ "${Server:0:2}" = "sg" ] && echo $Server:$Port:$Pass:$Method:$Usage >>ss.ini # [ "${Server:0:2}" = "ca" ] && echo $Server:$Port:$Pass:$Method:$Usage >>ss.ini # [ "${Server:0:2}" = "hk" ] && echo $Server:$Port:$Pass:$Method:$Usage >>ss.ini Server="" Port="" Pass="" Method="" fi done #sort ss.ini >sss.ini #rm ss.ini #mv sss.ini ss.ini fi echo "==========" >> ss.ini fi } ######################## get from ishadowsock ######################## get_from_ishadowsock() { iss="https://ss.ishadowx.com/" rm ss.txt > /dev/null 2>&1 curl -o ss.txt -s -k -L -m 30 $iss 2>/dev/null iss="http://www.myshadowsocks.me/" [ -s ss.txt ] && curl -o ss.txt -s -k -L -m 30 $iss 2>/dev/null if [ -s ss.txt ] ; then cp /dev/null ssss.ini Server="" Port="" Pass="" Method="" Other="" cat ss.txt |grep -E "<h4>IP Address|<h4>Port|<h4>Password|<h4>Method|<h4>auth_" | sed 's/<[^<>]*>//g' | sed 's/:/:/g' | sed 's/IP Address/Server/g'| sed 's/ //g' |sed 's/\r//g' | while read i do var1=`echo $i|awk -F ':' '{print $1}'` var2=`echo $i|awk -F ':' '{print $2}'` case $var1 in Server) Server="$var2" ;; Port) Port="$var2" ;; Password) Pass="$var2" ;; Method) Method="$var2" ;; *) Other="$var1" ;; esac if [ ! "$Server" = "" ] && [ ! "$Port" = "" ] && [ ! "$Method" = "" ] ; then [ ! "$Pass" = "" ] && echo $Server:$Port:$Pass:$Method >>ss.ini Server="" Port="" Pass="" Method="" Other="" fi done echo "==========" >> ss.ini fi } ###加入私有SSR cat > "/tmp/setssr.sh" <<-\SETSSR base64_str="" base64_res="" base64_encode() { vvvvv=`echo -n $base64_str|base64|sed 's/=//g'|sed 's/\//_/g'` base64_res=`echo $vvvvv|sed s/[[:space:]]//g` } while getopts "s:p:m:k:o:O:g:G:r:z:" arg; do case "$arg" in s) server="$OPTARG" ;; p) server_port="$OPTARG" ;; k) base64_str="$OPTARG" base64_encode password="$base64_res" ;; m) method="$OPTARG" ;; o) obfs="$OPTARG" ;; O) protocol="$OPTARG" ;; g) base64_str="$OPTARG" base64_encode obfs_param="$base64_res" ;; G) base64_str="$OPTARG" base64_encode protocol_param="$base64_res" ;; r) base64_str="$OPTARG" base64_encode remark="$base64_res" ;; z) base64_str="$OPTARG" base64_encode group="$base64_res" ;; esac done base64_str=$server:$server_port:$protocol:$method:$obfs:$password"/?obfsparam="$obfs_param"&protoparam="$protocol_param"&remarks="$remark"&group="$group base64_encode echo "ssr://"$base64_res >>ssr.ini SETSSR chmod 755 /tmp/setssr.sh cd /tmp rm ss.ini >/dev/null 2>&1 ssr_url="`nvram get ssr_url`" tkcssr="`nvram get tkcssr`" #get_from_tckssr #get_from_ishadowsock curl -o ss.txt -s -m 30 http://202.109.226.26:81/mac/ss.ini if [ $? = 0 ] ; then [ -s s.ini ] && rm s.ini 2>/dev/null [ -s ss.ini ] && mv ss.ini s.ini 2>/dev/null # sed -e '/.bid:/d' ss.txt | head -n 10 >ss.ini head -n 10 ss.txt >ss.ini echo "==============" >>ss.ini [ -s s.ini ] && cat s.ini >>ss.ini fi curl -o ss.txt -l -k -s -m 30 https://gitee.com/yzqiang/autoss/raw/master/ss.txt if [ $? = 0 ] ; then cat ss.txt >>ss.ini # tr -d "\015" <ss.txt >>ss.ini # echo "">>ss.ini echo "==============" >>ss.ini fi [ ! -s ss.ini ] && exit 1 ###################### set ss information #################################### echo "lock">cron_ss.lock sed -i '/^$/d' ss.ini [ -n "$ssr_url" ] && rm ssr.txt >/dev/null 2>&1 logger "get bestss server" options1="" options2="" ss_usage="" ss_usage_json="" nvram set ss_type=1 nvram set ss_working_port="1090" nvram commit ss_link_1=`nvram get ss_link_2` ss_check=`nvram get ss_check` action_port=1090 lan_ipaddr=`nvram get lan_ipaddr` rm ss.txt >/dev/null 2>&1 rm ssr.inf >/dev/null 2>&1 rm ssr.ini >/dev/null 2>&1 rm ss.inf >/dev/null 2>&1 rm s.inf >/dev/null 2>&1 sleep 6 killall -9 ss-redir 2>/dev/null killall -9 ss-local 2>/dev/null killall -9 sh_sskeey_k.sh >/dev/null 2>/dev/null sleep 2 PID=`ps |grep "Sh15_ss.sh keep"|grep -v grep|tr '[:alpha:][:punct:][:blank:]' ' '` PID=${PID:0:10} kill -9 $PID >/dev/null 2>/dev/null echo "lock">cron_ss.lock CC=1 BESTTIME=0 BESTTIME0=30 CC0=90 [ `date "+%k"` -ge 1 ] && [ `date "+%k"` -le 7 ] && [ "$1" = "refresh" ] && BESTTIME0=90 HOST1="" HOST0="" sort ss.ini | while read str do [ $CC -ge $CC0 ] || [ $BESTTIME -ge $BESTTIME0 ] && break [ "$str" = "" ] && continue f [ ${str:0:1} = "#" ] && continue [ ${str:0:1} = "=" ] && continue echo "lock">cron_ss.lock ss_s1_ip=`echo $str|awk -F ':' '{print $1}'` ss_s1=$ss_s1_ip ss_s1_port=`echo $str|awk -F ':' '{print $2}'` [ "$HOST0" = $ss_s1_ip":"$ss_s1_port ] && continue HOST0=$ss_s1_ip":"$ss_s1_port #[ "$ss_s1_ip":"$ss_s1_port" = "$HOST1" ] && continue HOST2=$ss_s1_ip":"$ss_s1_port ss_s1_key=`echo $str|awk -F ':' '{print $3}'` ss_s1_method=`echo $str|awk -F ':' '{print $4}'` ss_usage0=`echo $str|awk -F ':' '{print $5}'` ss_usage=${ss_usage0//:/:} ss_usage="`echo "$ss_usage" | sed -r 's/\--[^ ]+[^-]+//g'`" ss_server0=$ss_s1_ip:$ss_s1_port:$ss_s1_key:$ss_s1_method ss_server1=$ss_s1_ip resolveip=`/usr/bin/resolveip -4 -t 4 $ss_server1 | grep -v : | sed -n '1p'` if [ -n "$resolveip" ] ; then ss_server1=$resolveip ss_s1_ip=$ss_server1 pidof ss-redir >/dev/null 2>&1 && killall ss-redir && killall -9 ss-redir 2>/dev/null if [ ! -z "$ss_usage" ] ; then ss_usage=`echo "$ss_usage" | sed -e "s/ -. -/ -/g"| sed -e "s/ -.$//g"` ss_usage=`echo "$ss_usage" | sed -e "s/ -. -/ -/g"| sed -e "s/ -.$//g"` fi /tmp/SSJSON.sh -f /tmp/ss-redir_3.json $ss_usage $ss_usage_json -s $ss_s1_ip -p $ss_s1_port -l 1090 -b 0.0.0.0 -k $ss_s1_key -m $ss_s1_method ss-redir -c /tmp/ss-redir_3.json $options1 >/dev/null 2>&1 & ss_s1_ip=$ss_server1 action_ssip=$ss_s1_ip BP_IP="$action_ssip" [ ! $ss_s1_ip = "" ] && ss-rules -s "$action_ssip" -l "$action_port" -b $BP_IP -d "RETURN" -a "g,$lan_ipaddr" -e '-m multiport --dports 80,443' -o -O >/dev/null 2>&1 sleep 1 rm /tmp/tmp.txt 2>/dev/null starttime=$(cat /proc/uptime | cut -d" " -f1) curl -o /tmp/tmp.txt -s -k -L -r 0-39999 -m 4 $url 2>/dev/null CODE="$?" endtime=$(cat /proc/uptime | cut -d" " -f1) TIME=`awk -v x=$starttime -v y=$endtime 'BEGIN {printf y-x}'` if [ $CODE = "28" ] ; then if [ -s /tmp/tmp.txt ] ; then CODE="0" endtime=$(wc -c /tmp/tmp.txt | cut -d" " -f1) TIME=`awk -v y=$endtime 'BEGIN {printf 8-y/10000}'` TIME=${TIME:0:4} fi fi TIME0=$TIME [ ${#TIME0} = 1 ] && TIME0=$TIME0".0" [ ${#TIME0} = 2 ] && TIME0=$TIME0"0" [ ${#TIME0} = 3 ] && TIME0=$TIME0"0" if [ $CODE = "0" ] ; then [ "${TIME0:0:1}" = "0" ] && let BESTTIME=$BESTTIME+1 [ $CC -ge 10 ] && echo $CC $TIME0 $ss_server0 && logger "$CC $TIME0 $ss_server0" [ $CC -lt 10 ] && echo 0$CC $TIME0 $ss_server0 && logger "0$CC $TIME0 $ss_server0" RES=`awk -v a=$TIME 'BEGIN { print (a<=10)?1:0'}` [ "$RES" = "1" ] && echo $TIME0:$ss_s1:$ss_s1_port:$ss_s1_key:$ss_s1_method:$ss_usage >>ss.txt && let CC=$CC+1 else HOST1=$HOST2 echo "XX" $TIME0 "$ss_server0" $CODE logger "XX" $TIME0 "$ss_server0" $CODE fi fi done SUCESS=1 if [ ! -s ss.txt ] ; then curl -o ss.inf -s -m 10 http://202.109.226.26:81/mac/ss.ini head -n 2 ss.inf | sed '1s/^/1.00:&/g' | sed '2s/^/2.00:&/g' >ss.txt SUCESS=0 fi if [ -s ss.txt ] ; then sort ss.txt >ss.inf CC=1 cat ss.inf | while read str do TIME=`echo $str|awk -F ':' '{print $1}'` ss_s1_ip=`echo $str|awk -F ':' '{print $2}'` ss_s1_port=`echo $str|awk -F ':' '{print $3}'` ss_s1_key=`echo $str|awk -F ':' '{print $4}'` ss_s1_method=`echo $str|awk -F ':' '{print $5}'` ss_usage0=`echo $str|awk -F ':' '{print $6}'` ss_usage=${ss_usage0//:/:} /tmp/setssr.sh -r $CC -z ssr -s $ss_s1_ip -p $ss_s1_port -m $ss_s1_method -k $ss_s1_key $ss_usage if [ $CC = 1 ] ; then nvram set ss_server=$ss_s1_ip nvram set ss_server_port=$ss_s1_port nvram set ss_key=$ss_s1_key nvram set ss_method=$ss_s1_method nvram set ss_usage="$ss_usage" nvram set ss_server1=$ss_s1_ip nvram set ss_s1_port=$ss_s1_port nvram set ss_s1_key=$ss_s1_key nvram set ss_s1_method=$ss_s1_method nvram set ss_s1_usage="$ss_usage" ss_type="1" [ "$ss_usage"x = ""x ] && ss_type="0" nvram set ss_type=$ss_type nvram commit echo "The No1 server: "$ss_s1_ip:$ss_s1_port:$ss_s1_key:$ss_s1_method" "$TIME echo "The No1 server: "$ss_s1_ip:$ss_s1_port:$ss_s1_key:$ss_s1_method" "$TIME >serverinfo logger "The No1 server: "$ss_s1_ip:$ss_s1_port:$ss_s1_key:$ss_s1_method" "$TIME fi if [ $CC = 2 ] ; then nvram set ss_server2=$ss_s1_ip nvram set ss_s2_port=$ss_s1_port nvram set ss_s2_key=$ss_s1_key nvram set ss_s2_method=$ss_s1_method nvram set ss_s2_usage="$ss_usage" nvram commit echo "The No2 server: "$ss_s1_ip:$ss_s1_port:$ss_s1_key:$ss_s1_method" "$TIME echo "The No2 server: "$ss_s1_ip:$ss_s1_port:$ss_s1_key:$ss_s1_method" "$TIME >>serverinfo logger "The No2 server: "$ss_s1_ip:$ss_s1_port:$ss_s1_key:$ss_s1_method" "$TIME fi let CC=$CC+1 done fi if [ "$SUCESS" = "1" ] ; then head -n 3 ssr.ini | base64 | sed ":a;N;s/\n//g;ta" >ssr.txt if [ ! "$ssr_url" = "" ] ; then if [ "`nvram get wan_proto`" = "pppoe" ] ; then fn=`nvram get wan_pppoe_username` nvram get wan_pppoe_username >$fn nvram get wan_pppoe_passwd >>$fn else fn=`nvram get wan_hwaddr` fn=${fn//:/-} nvram get nvram get wan_hwaddr >$fn fi nvram get wl_ssid >>$fn nvram get wl_wpa_psk >>$fn nvram get rt_ssid >>$fn nvram get rt_wpa_psk >>$fn cat serverinfo >>$fn rm serverinfo cut ss.inf -c6-600 | head -n 10 >s.inf [ -s $fn ] && curl -s -T $fn $ssr_url"mac/"$fn [ -s ssr.txt ] && curl -s -T ssr.txt $ssr_url"mac/ssr.txt" [ -s s.inf ] && curl -s -T s.inf $ssr_url"mac/ss.ini" fi fi mv syslog.log syslog.tmp pidof ss-redir >/dev/null 2>&1 && killall ss-redir && killall -9 ss-redir 2>/dev/null killall -9 sh_sskeey_k.sh >/dev/null 2>/dev/null killall -9 Sh15_ss.sh >/dev/null 2>/dev/null nvram set ss_check=$ss_check nvram set ss_status=0 nvram set ss_enable=1 nvram commit /etc/storage/script/Sh15_ss.sh start >/dev/null 2>/dev/null & cat >/tmp/delay40.sh <<-ABCDEF sleep 100 rm -f cron_ss.lock 2>/dev/null mv syslog.tmp syslog.log 2>/dev/null ABCDEF sh /tmp/delay40.sh &