mirror of
https://github.com/monlor/MIXBOX-ARCHIVE.git
synced 2026-03-10 23:41:27 +00:00
135 lines
5.1 KiB
Bash
135 lines
5.1 KiB
Bash
#!/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
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|