immortalwrt/package/jsda/luci-app-ssr-plus-jsda/root/usr/bin/ssr-switch

183 lines
4.5 KiB
Plaintext
Raw Normal View History

2019-05-23 21:10:57 +08:00
#!/bin/sh /etc/rc.common
#
# Copyright (C) 2017 openwrt-ssr
# Copyright (C) 2017 yushi studio <ywb94@qq.com>
#
# This is free software, licensed under the GNU General Public License v3.
# See /LICENSE for more information.
#
cycle_time=60
switch_time=3
normal_flag=0
server_locate=0
server_count=0
NAME=shadowsocksr
ENABLE_SERVER=nil
CONFIG_SWTICH_FILE=/var/etc/${NAME}_t.json
2019-07-02 18:06:49 +08:00
logfile="/tmp/ssrplus.log"
clean_log(){
logrow=$(grep -c "" ${logfile})
if [ $logrow -ge 500 ];then
cat /dev/null > ${logfile}
echo "$LOGTIME Log<6F><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ޣ<EFBFBD><DEA3><EFBFBD><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD>" >> ${logfile}
fi
}
2019-05-23 21:10:57 +08:00
[ -n "$1" ] && cycle_time=$1
[ -n "$2" ] && switch_time=$2
uci_get_by_name() {
local ret=$(uci get $NAME.$1.$2 2>/dev/null)
echo ${ret:=$3}
}
uci_get_by_type() {
local ret=$(uci get $NAME.@$1[0].$2 2>/dev/null)
echo ${ret:=$3}
}
DEFAULT_SERVER=$(uci_get_by_type global global_server)
CURRENT_SERVER=$DEFAULT_SERVER
#<23>жϴ<D0B6><CFB4><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
check_proxy() {
2019-07-02 18:06:49 +08:00
/usr/bin/ssr-check www.google.com 80 $switch_time 1 || /usr/bin/ssr-check www.youtube.com 80 $switch_time 1
if [ "$?" == "0" ]; then
return 0
else
/usr/bin/ssr-check www.baidu.com 80 $switch_time 1 && /usr/bin/ssr-check www.17173.com 80 $switch_time 1
if [ "$?" == "0" ]; then
#goole<6C><65>ͨbaiduͨ<75><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return 1
else
return 2
fi
fi
return 0
2019-05-23 21:10:57 +08:00
}
test_proxy() {
2019-07-02 18:06:49 +08:00
local servername=$(uci_get_by_name $1 server)
local serverport=$(uci_get_by_name $1 server_port)
ret=$(ping -c 3 $servername | grep 'loss' | awk -F ',' '{ print $3 }' | awk -F "%" '{ print $1 }')
[ -z "$ret" ] && return 1
[ "$ret" -gt "50" ] && return 1
ipset add ss_spec_wan_ac $servername 2>/dev/null
ret=$?
#/usr/bin/ssr-check $servername $serverport $switch_time
/usr/bin/ssr-check $servername 80 $switch_time 1
local ret2=$?
if [ "$ret" = "0" ] ;then
ipset del ss_spec_wan_ac $servername 2>/dev/null
fi
if [ "$ret2" = "0" ] ;then
return 0
else
return 1
fi
2019-05-23 21:10:57 +08:00
}
search_proxy() {
2019-07-02 18:06:49 +08:00
let server_count=server_count+1
[ "$normal_flag" = "1" -a "$server_count" -le "$server_locate" ] && return 0
[ "$(uci_get_by_name $1 switch_enable)" != "1" ] && return 1
[ $ENABLE_SERVER != nil ] && return 0
[ "$1" = "$CURRENT_SERVER" ] && return 0
local servername=$(uci_get_by_name $1 server)
local serverport=$(uci_get_by_name $1 server_port)
ipset add ss_spec_wan_ac $servername 2>/dev/null
ret=$?
#/usr/bin/ssr-check $servername $serverport $switch_time
/usr/bin/ssr-check $servername 80 $switch_time 1
local ret2=$?
if [ "$ret" = "0" ] ;then
ipset del ss_spec_wan_ac $servername 2>/dev/null
fi
if [ "$ret2" = "0" ] ;then
server_locate=$server_count
ENABLE_SERVER=$1
return 0
else
return 1
fi
2019-05-23 21:10:57 +08:00
}
2019-07-02 18:06:49 +08:00
2019-05-23 21:10:57 +08:00
#ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD>õĴ<C3B5><C4B4><EFBFBD>
select_proxy() {
2019-07-02 18:06:49 +08:00
config_load $NAME
ENABLE_SERVER=nil
mkdir -p /var/run /var/etc
server_count=0
config_foreach search_proxy servers
2019-05-23 21:10:57 +08:00
}
#<23>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
switch_proxy() {
2019-07-02 18:06:49 +08:00
/etc/init.d/shadowsocksr restart $1
return 0
2019-05-23 21:10:57 +08:00
}
start() {
2019-07-02 18:06:49 +08:00
#<23><>֧<EFBFBD><D6A7>kcptun<75><6E><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>л<EFBFBD>
[ $(uci_get_by_name $DEFAULT_SERVER kcp_enable) = "1" ] && return 1
2019-05-23 21:10:57 +08:00
while [ "1" = "1" ] #<23><>ѭ<EFBFBD><D1AD>
do
2019-07-02 18:06:49 +08:00
sleep $cycle_time
clean_log
#<23>жϵ<D0B6>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊȱʡ<C8B1><CAA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if [ "$CURRENT_SERVER" != "$DEFAULT_SERVER" ] ;then
#echo "not default proxy"
echo "$(date "+%Y-%m-%d %H:%M:%S") Current server is not default Main server, try to switch back." >> ${logfile}
#<23><><EFBFBD><EFBFBD>ȱʡ<C8B1><CAA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
if test_proxy $DEFAULT_SERVER ;then
#echo "switch to default proxy"
echo "$(date "+%Y-%m-%d %H:%M:%S") Main server is avilable." >> /tmp/ssrplus.log
#ȱʡ<C8B1><CAA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
CURRENT_SERVER=$DEFAULT_SERVER
switch_proxy $CURRENT_SERVER
echo "switch to default ["$(uci_get_by_name $CURRENT_SERVER server)"] proxy!" >> ${logfile}
continue
else
echo "$(date "+%Y-%m-%d %H:%M:%S") Main server is NOT avilable.Continue using current server." >> ${logfile}
fi
fi
#<23>жϵ<D0B6>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
check_proxy
current_ret=$?
if [ "$current_ret" = "1" ] ;then
#<23><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>޿<EFBFBD><DEBF>õķ<C3B5><C4B7><EFBFBD><EFBFBD><EFBFBD>
#echo "current error"
echo "$(date "+%Y-%m-%d %H:%M:%S") Current server error, try to switch another server." >> ${logfile}
2019-05-23 21:10:57 +08:00
2019-07-02 18:06:49 +08:00
select_proxy
if [ "$ENABLE_SERVER" != nil ] ;then
#<23><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
#echo $(uci_get_by_name $new_proxy server)
echo "$(date "+%Y-%m-%d %H:%M:%S") Another server is avilable, now switching server." >> ${logfile}
CURRENT_SERVER=$ENABLE_SERVER
switch_proxy $CURRENT_SERVER
normal_flag=1
echo "$(date "+%Y-%m-%d %H:%M:%S") ShadowsocksR server switch OK" >> ${logfile}
else
normal_flag=0
fi
else
normal_flag=0
echo "$(date "+%Y-%m-%d %H:%M:%S") ShadowsocksR No Problem." >> ${logfile}
fi
2019-05-23 21:10:57 +08:00
done
}