-
Notifications
You must be signed in to change notification settings - Fork 724
/
ssr
executable file
·183 lines (155 loc) · 4.85 KB
/
ssr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#!/bin/bash
# 作者:老徐
# SSR免费分享网站(所有帐号均来源于网上别人的分享):http://ss.pythonic.life
# 源代码主页:https://github.com/the0demiurge
# 访问https://github.com/the0demiurge/CharlesScripts/blob/master/charles/bin/ssr获取本脚本的最新版
# 使用方法:把该脚本放到$PATH里面并加入可执行权限就行(比如说放到/usr/local/bin)
# 首次使用输入ssr install后安装时会自动安装到 $HOME/.local/share/shadowsocksr
# 输入ssr config进行配置,输入JSON格式的配置文件
# 输入ssr uninstall卸载
# 输入ssr help 展示帮助信息
set -e
if [ -z "$EDITOR" ]; then
EDITOR=vi
fi
WEBSITE=http://ss.pythonic.life
BRANCH=manyuser
GIT_REPO=https://github.com/shadowsocksrr/shadowsocksr.git
INSTALL_PATH=$HOME/.local/share/shadowsocksr
ssr_help() {
echo ShadowSocksR python client tool
echo -e if you have not installed ssr, run \`ssr install\` first
echo Usage:
echo -e "\t" "ssr help"
echo -e "\n" "Install/Uninstall"
echo -e "\t" "ssr install install shadowsocksr client"
echo -e "\t" "ssr uninstall uninstall shadowsocksr client"
echo -e "\n" "Config and Subscribe"
echo -e "\t" "ssr update update subscription from $WEBSITE"
echo -e "\t" "ssr config edit config.json"
echo -e "\t" "ssr xclip paste configs from clipboard to config.json"
echo -e "\n" "Start/Stop/Restart"
echo -e "\t" "ssr start start the shadowsocks service"
echo -e "\t" "ssr stop stop the shadowsocks service"
echo -e "\t" "ssr restart restart the shadowsocks service"
echo -e "\n" "Testing and Maintenance"
echo -e "\t" "ssr test get ip from cip.cc using socks5 proxy"
echo -e "\t" "ssr log cat the log of shadowsocks"
echo -e "\t" "ssr shell cd into ssr installation dir"
echo -e "\t" "ssr clean clean ssr configuration backups"
}
ssr_install() {
git clone -b $BRANCH $GIT_REPO $INSTALL_PATH
echo -e "Install finished!\nYou can visit my website $WEBSITE to acquire free ssr configs"
}
ssr_uninstall() {
echo "Danger! are you to remove $INSTALL_PATH forever?(y/N)"
read doit
if [ $doit == 'y' ]; then rm -rvf $INSTALL_PATH; fi
}
ssr_test() {
echo Testing Connection...
if [[ ! -z $(which jq 2>/dev/null) ]]; then
echo 'jq in use'
PORT=$(jq .local_port $INSTALL_PATH/config.json)
else
PORT=$(sed -r 's/\/\/.*$|\s+//g' $INSTALL_PATH/config.json | grep -oP '(?<!//)(?<="local_port":)\d+')
echo "local_port is $PORT; if any exceptions orrured, please install jq"
fi
echo 'connection information:'
curl ipinfo.io --socks5 localhost:$PORT
echo
curl cip.cc --socks5 localhost:$PORT
if [ $? == 0 ]; then
if [[ -z $(which proxychains4 2>/dev/null) ]]; then
echo "You may install proxychains4 and configure it properly to test net delay"
else
echo -e '\nChecking delay...'
proxychains4 ping -c 5 cip.cc
fi
fi
}
ssr_start() {
cd $INSTALL_PATH/shadowsocks/
python local.py -d start --pid-file=$INSTALL_PATH/ssr.pid --log-file=$INSTALL_PATH/ssr.log
sleep 1
ssr_test
}
ssr_stop() {
cd $INSTALL_PATH/shadowsocks/
python local.py -d stop --pid-file=$INSTALL_PATH/ssr.pid --log-file=$INSTALL_PATH/ssr.log
}
ssr_restart() {
ssr_stop
ssr_start
}
ssr_config() {
$EDITOR $INSTALL_PATH/config.json
ssr_restart
}
BLOCKED='
Update failed! For more information, see
https://github.com/the0demiurge/ShadowSocksShare-OpenShift/issues/17
And edit `$WEBSITE` in this script.'
ISSUE='
The response was empty, try it 10 mins later or report it on
https://github.com/the0demiurge/CharlesScripts/issues'
ssr_update() {
JSON=$(curl -L $WEBSITE/json)
# If failed
case $? in
0) ;;
*)
echo -e $BLOCKED
exit $?
;;
esac
# If json is empty
case $JSON in
'Not Found')
echo -e $BLOCKED
exit $?
;;
'' | '{}')
echo $ISSUE
exit 2
;;
esac
mv $INSTALL_PATH/config.json $INSTALL_PATH/config.json.bak.$(date +%y-%m-%d-%T)
echo -e "$JSON" | tee $INSTALL_PATH/config.json
ssr_restart
echo -e "Updated from $WEBSITE"
}
ssr_xclip() {
xclip -o | tee $INSTALL_PATH/config.json
ssr_restart
}
ssr_log() {
tail -f $INSTALL_PATH/ssr.log
}
ssr_shell() {
cd $INSTALL_PATH
$SHELL
}
ssr_clean() {
rm -ri $INSTALL_PATH/config.json.bak.*
}
ssr_main() {
case $1 in
help) ssr_help ;;
install) ssr_install ;;
uninstall) ssr_uninstall ;;
update) ssr_update ;;
config) ssr_config ;;
xclip) ssr_xclip ;;
start) ssr_start ;;
stop) ssr_stop ;;
restart) ssr_restart ;;
test) ssr_test ;;
log) ssr_log ;;
shell) ssr_shell ;;
clean) ssr_clean ;;
*) ssr_help ;;
esac
}
ssr_main $1