Files
MIXBOX-ARCHIVE/apps/shadowsocks/scripts/ss_online_update.sh
2020-03-05 00:08:40 +08:00

135 lines
5.1 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/sh
#copyright by monlor
source /etc/mixbox/bin/base
eval `mbdb export shadowsocks`
online_config=${mbroot}/apps/${appname}/config/ssserver_online.conf
local_config=${mbroot}/apps/${appname}/config/ssserver.conf
decode_url_link(){
link=$1
num=$2
len=$((${#link}-$num))
mod4=$(($len%4))
if [ "$mod4" -gt "0" ]; then
var="===="
newlink=${link}${var:$mod4}
echo -n "$newlink" | sed 's/-/+/g; s/_/\//g' | base64 -d 2>/dev/null
else
echo -n "$link" | sed 's/-/+/g; s/_/\//g' | base64 -d 2>/dev/null
fi
}
get_ss_config() {
decode_link="$1"
server=$(echo "$decode_link" |awk -F':' '{print $1}')
server_port=$(echo "$decode_link" |awk -F':' '{print $2}')
protocol=$(echo "$decode_link" |awk -F':' '{print $3}')
encrypt_method=$(echo "$decode_link" |awk -F':' '{print $4}')
obfs=$(echo "$decode_link" |awk -F':' '{print $5}'|sed 's/_compatible//g')
#password=$(echo "$decode_link" |awk -F':' '{print $6}'|awk -F'/' '{print $1}')
password=$(decode_url_link $(echo "$decode_link" |awk -F':' '{print $6}'|awk -F'/' '{print $1}') 0)
obfsparam_temp=$(echo "$decode_link" |awk -F':' '{print $6}'|grep -Eo "obfsparam.+"|sed 's/obfsparam=//g'|awk -F'&' '{print $1}')
[ -n "$obfsparam_temp" ] && obfsparam=$(decode_url_link $obfsparam_temp 0) || obfsparam=''
protoparam_temp=$(echo "$decode_link" |awk -F':' '{print $6}'|grep -Eo "protoparam.+"|sed 's/protoparam=//g'|awk -F'&' '{print $1}')
[ -n "$protoparam_temp" ] && protoparam=$(decode_url_link $protoparam_temp 0|sed 's/_compatible//g') || protoparam=''
remarks_temp=$(echo "$decode_link" |awk -F':' '{print $6}'|grep -Eo "remarks.+"|sed 's/remarks=//g'|awk -F'&' '{print $1}')
[ -n "$remarks_temp" ] && remarks=$(decode_url_link $remarks_temp 0 | tr "\n" " " | sed -r 's/[ ]|,|\[|\]|\*|\\|\///g') || remarks="$server"
group_temp=$(echo "$decode_link" |awk -F':' '{print $6}'|grep -Eo "group.+"|sed 's/group=//g'|awk -F'&' '{print $1}')
[ -n "$group_temp" ] && group=$(decode_url_link $group_temp 0) || group='AutoSuBGroup'
# [ -n "$group" ] && group_base64=`echo $group | base64_encode | sed 's/ -//g'`
# [ -n "$server" ] && server_base64=`echo $server | base64_encode | sed 's/ -//g'`
#把全部服务器节点写入文件 /usr/share/shadowsocks/serverconfig/all_onlineservers
}
local_update() {
if [ -n "$ssuri" ]; then
# 检测ss ssr
NODE_FORMAT1=`echo $ssuri | grep -E "^ss://"`
NODE_FORMAT2=`echo $ssuri | grep -E "^ssr://"`
if [ -n "$NODE_FORMAT1" ];then
logsh "$service" "暂不支持ss节点订阅..." && exit 1
elif [ -n "$NODE_FORMAT2" ];then
urllinks=$(echo $ssuri | sed 's/ssr:\/\///g')
decode_link=$(decode_url_link $urllinks 0)
get_ss_config $decode_link
read -p "确定要添加节点:[$remarks,$server,$server_port,$password,$encrypt_method...][1/0]? " res
if [ "$res" == '1' ]; then
cat "$local_config" | grep -v "$remarks" > ${mbtmp}/server.conf
mv -f ${mbtmp}/server.conf "$local_config"
echo "ssr,$remarks,$server,$server_port,$password,$encrypt_method,$protocol,$obfs,$protoparam,$obfsparam" >> "$local_config"
fi
fi
fi
}
online_update() {
cat ${mbroot}/apps/${appname}/config/subscribe_link.txt | while read ssr_subscribe_link
do
logsh "$service" "更新订阅地址:$ssr_subscribe_link"
for i in $(seq 1 6); do
logsh "$service" "$i次下载节点..."
wgetsh ${mbtmp}/ssr_subscribe_file.txt $ssr_subscribe_link
if [ $? -ne 0 ]; then
logsh "$service" "下载订阅节点失败1秒后重试"
sleep 1
else
break
fi
done
[ ! -f ${mbtmp}/ssr_subscribe_file.txt ] && logsh "$service" "下载订阅节点失败!" && exit 1
decode_url_link `cat ${mbtmp}/ssr_subscribe_file.txt` 0 > ${mbtmp}/ssr_subscribe_file_temp1.txt
# 检测ss ssr
NODE_FORMAT1=`cat ${mbtmp}/ssr_subscribe_file_temp1.txt | grep -E "^ss://"`
NODE_FORMAT2=`cat ${mbtmp}/ssr_subscribe_file_temp1.txt | grep -E "^ssr://"`
if [ -n "$NODE_FORMAT1" ];then
logsh "$service" "暂不支持ss节点订阅..." && exit 1
elif [ -n "$NODE_FORMAT2" ];then
maxnum=$(decode_url_link `cat ${mbtmp}/ssr_subscribe_file.txt` 0 | grep "MAX=" | awk -F"=" '{print $2}' | grep -Eo "[0-9]+")
if [ -n "$maxnum" ]; then
urllinks=$(decode_url_link `cat ${mbtmp}/ssr_subscribe_file.txt` 0 | sed '/MAX=/d' | shuf -n $maxnum | sed 's/ssr:\/\// /g')
else
urllinks=$(decode_url_link `cat ${mbtmp}/ssr_subscribe_file.txt` 0 | sed 's/ssr:\/\// /g')
fi
[ -z "$urllinks" ] && logsh "$service" "订阅节点解析失败!" && exit 1
echo -n > $online_config
for link in $urllinks
do
decode_link=$(decode_url_link $link 0)
get_ss_config $decode_link
logsh "$service" "添加${appname}订阅节点:$remarks[$server]" -s
echo "ssr,$remarks,$server,$server_port,$password,$encrypt_method,$protocol,$obfs,$protoparam,$obfsparam" >> $online_config
done
logsh "$service" "ss订阅节点更新完成"
fi
rm -rf ${mbtmp}/ssr_subscribe_file.txt
done
}
if [ "$1" == "add" ]; then
echo "URI地址添加节点..."
action="uri"
ssuri="$2"
local_update
else
echo "在线更新ssr订阅节点..."
online_update
fi