├── README.md
├── mtail.png
├── a.go
├── kscapi.go
├── demo001.drawio
└── shadowsocks.sh
/README.md:
--------------------------------------------------------------------------------
1 | # gist
2 |
--------------------------------------------------------------------------------
/mtail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/UlricQin/gist/master/mtail.png
--------------------------------------------------------------------------------
/a.go:
--------------------------------------------------------------------------------
1 | packag main
2 |
3 | func main() {
4 | if life.is_sad() || code.has_bug() || me.no_girlfriend() || purse.flat() {
5 | drink_tea()
6 | god.say("The world is awesome")
7 | }
8 | } // 码农茶坊
9 |
10 | func foo() {}
11 |
--------------------------------------------------------------------------------
/kscapi.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "fmt"
5 | "io/ioutil"
6 | "log"
7 | "net/http"
8 | "net/url"
9 |
10 | "github.com/ulricqin/awsauth"
11 | )
12 |
13 | var (
14 | service = "kec"
15 | region = "cn-beijing-6"
16 | ak = "***"
17 | sk = "***"
18 | )
19 |
20 | func main() {
21 | endpoint := fmt.Sprintf("http://%s.%s.api.ksyun.com/", service, region)
22 |
23 | query := url.Values{
24 | "Action": []string{"MonitorInstances"},
25 | "Version": []string{"2016-03-04"},
26 | "InstanceId.1": []string{"472ddf6c-6ab5-4f0e-ae94-35ad7723317c"},
27 | }
28 |
29 | url := endpoint + "?" + query.Encode()
30 | req, err := http.NewRequest("GET", url, nil)
31 | if err != nil {
32 | log.Println("new request fail", err)
33 | return
34 | }
35 |
36 | req.Header.Set("Accept", "application/json")
37 | req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
38 |
39 | awsauth.Sign4(req, awsauth.Credentials{AccessKeyID: ak, SecretAccessKey: sk}, region, service)
40 |
41 | client := &http.Client{}
42 |
43 | res, err := client.Do(req)
44 | if err != nil {
45 | log.Println("http get fail", err)
46 | return
47 | }
48 |
49 | defer res.Body.Close()
50 |
51 | bs, err := ioutil.ReadAll(res.Body)
52 | if err != nil {
53 | log.Println("read response fail", err)
54 | return
55 | }
56 |
57 | fmt.Println(string(bs))
58 | }
59 |
--------------------------------------------------------------------------------
/demo001.drawio:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/shadowsocks.sh:
--------------------------------------------------------------------------------
1 | #! /bin/bash
2 | PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
3 | export PATH
4 | #=================================================================#
5 | # System Required: CentOS 6+, Debian 7+, Ubuntu 12+ #
6 | # Description: One click Install Shadowsocks-Python server #
7 | # Author: Teddysun #
8 | # Thanks: @clowwindy #
9 | # Intro: https://teddysun.com/342.html #
10 | #=================================================================#
11 |
12 | clear
13 | echo
14 | echo "#############################################################"
15 | echo "# One click Install Shadowsocks-Python server #"
16 | echo "# Intro: https://teddysun.com/342.html #"
17 | echo "# Author: Teddysun #"
18 | echo "# Thanks: @clowwindy #"
19 | echo "#############################################################"
20 | echo
21 |
22 | # Make sure only root can run our script
23 | function rootness(){
24 | if [[ $EUID -ne 0 ]]; then
25 | echo "Error:This script must be run as root!" 1>&2
26 | exit 1
27 | fi
28 | }
29 |
30 | # Check OS
31 | function checkos(){
32 | if [ -f /etc/redhat-release ];then
33 | OS=CentOS
34 | elif [ ! -z "`cat /etc/issue | grep bian`" ];then
35 | OS=Debian
36 | elif [ ! -z "`cat /etc/issue | grep Ubuntu`" ];then
37 | OS=Ubuntu
38 | else
39 | echo "Not support OS, Please reinstall OS and retry!"
40 | exit 1
41 | fi
42 | }
43 |
44 | # Get version
45 | function getversion(){
46 | if [[ -s /etc/redhat-release ]];then
47 | grep -oE "[0-9.]+" /etc/redhat-release
48 | else
49 | grep -oE "[0-9.]+" /etc/issue
50 | fi
51 | }
52 |
53 | # CentOS version
54 | function centosversion(){
55 | local code=$1
56 | local version="`getversion`"
57 | local main_ver=${version%%.*}
58 | if [ $main_ver == $code ];then
59 | return 0
60 | else
61 | return 1
62 | fi
63 | }
64 |
65 | # Disable selinux
66 | function disable_selinux(){
67 | if [ -s /etc/selinux/config ] && grep 'SELINUX=enforcing' /etc/selinux/config; then
68 | sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
69 | setenforce 0
70 | fi
71 | }
72 |
73 | # Pre-installation settings
74 | function pre_install(){
75 | # Not support CentOS 5
76 | if centosversion 5; then
77 | echo "Not support CentOS 5, please change to CentOS 6+ or Debian 7+ or Ubuntu 12+ and try again."
78 | exit 1
79 | fi
80 | # Set shadowsocks config password
81 | echo "Please input password for shadowsocks-python:"
82 | read -p "(Default password: teddysun.com):" shadowsockspwd
83 | [ -z "$shadowsockspwd" ] && shadowsockspwd="teddysun.com"
84 | echo
85 | echo "---------------------------"
86 | echo "password = $shadowsockspwd"
87 | echo "---------------------------"
88 | echo
89 | # Set shadowsocks config port
90 | while true
91 | do
92 | echo -e "Please input port for shadowsocks-python [1-65535]:"
93 | read -p "(Default port: 8989):" shadowsocksport
94 | [ -z "$shadowsocksport" ] && shadowsocksport="8989"
95 | expr $shadowsocksport + 0 &>/dev/null
96 | if [ $? -eq 0 ]; then
97 | if [ $shadowsocksport -ge 1 ] && [ $shadowsocksport -le 65535 ]; then
98 | echo
99 | echo "---------------------------"
100 | echo "port = $shadowsocksport"
101 | echo "---------------------------"
102 | echo
103 | break
104 | else
105 | echo "Input error! Please input correct numbers."
106 | fi
107 | else
108 | echo "Input error! Please input correct numbers."
109 | fi
110 | done
111 | get_char(){
112 | SAVEDSTTY=`stty -g`
113 | stty -echo
114 | stty cbreak
115 | dd if=/dev/tty bs=1 count=1 2> /dev/null
116 | stty -raw
117 | stty echo
118 | stty $SAVEDSTTY
119 | }
120 | echo
121 | echo "Press any key to start...or Press Ctrl+C to cancel"
122 | char=`get_char`
123 | #Install necessary dependencies
124 | if [ "$OS" == 'CentOS' ]; then
125 | yum install -y wget unzip openssl-devel gcc swig python python-devel python-setuptools autoconf libtool libevent
126 | yum install -y automake make curl curl-devel zlib-devel perl perl-devel cpio expat-devel gettext-devel which
127 | else
128 | apt-get -y update
129 | apt-get -y install python python-dev python-pip python-setuptools curl wget unzip gcc swig automake make perl cpio
130 | fi
131 | # Get IP address
132 | echo "Getting Public IP address, Please wait a moment..."
133 | IP=$(curl -s -4 icanhazip.com)
134 | if [[ "$IP" = "" ]]; then
135 | IP=$(curl -s -4 ipinfo.io/ip)
136 | fi
137 | echo -e "Your main public IP is\t\033[32m$IP\033[0m"
138 | echo
139 | #Current folder
140 | cur_dir=`pwd`
141 | cd $cur_dir
142 | }
143 |
144 | # Download files
145 | function download_files(){
146 | if [ "$OS" == 'CentOS' ]; then
147 | # Download shadowsocks chkconfig file
148 | if ! wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks -O /etc/init.d/shadowsocks; then
149 | echo "Failed to download shadowsocks chkconfig file!"
150 | exit 1
151 | fi
152 | else
153 | if ! wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-debian -O /etc/init.d/shadowsocks; then
154 | echo "Failed to download shadowsocks chkconfig file!"
155 | exit 1
156 | fi
157 | fi
158 | }
159 |
160 | # Config shadowsocks
161 | function config_shadowsocks(){
162 | cat > /etc/shadowsocks.json<<-EOF
163 | {
164 | "server":"0.0.0.0",
165 | "server_port":${shadowsocksport},
166 | "local_address":"127.0.0.1",
167 | "local_port":1080,
168 | "password":"${shadowsockspwd}",
169 | "timeout":300,
170 | "method":"aes-256-cfb",
171 | "fast_open":false
172 | }
173 | EOF
174 | }
175 |
176 | # firewall set
177 | function firewall_set(){
178 | echo "firewall set start..."
179 | if centosversion 6; then
180 | /etc/init.d/iptables status > /dev/null 2>&1
181 | if [ $? -eq 0 ]; then
182 | iptables -L -n | grep '${shadowsocksport}' | grep 'ACCEPT' > /dev/null 2>&1
183 | if [ $? -ne 0 ]; then
184 | iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport ${shadowsocksport} -j ACCEPT
185 | iptables -I INPUT -m state --state NEW -m udp -p udp --dport ${shadowsocksport} -j ACCEPT
186 | /etc/init.d/iptables save
187 | /etc/init.d/iptables restart
188 | else
189 | echo "port ${shadowsocksport} has been set up."
190 | fi
191 | else
192 | echo "WARNING: iptables looks like shutdown or not installed, please manually set it if necessary."
193 | fi
194 | elif centosversion 7; then
195 | systemctl status firewalld > /dev/null 2>&1
196 | if [ $? -eq 0 ];then
197 | firewall-cmd --permanent --zone=public --add-port=${shadowsocksport}/tcp
198 | firewall-cmd --permanent --zone=public --add-port=${shadowsocksport}/udp
199 | firewall-cmd --reload
200 | else
201 | echo "Firewalld looks like not running, try to start..."
202 | systemctl start firewalld
203 | if [ $? -eq 0 ];then
204 | firewall-cmd --permanent --zone=public --add-port=${shadowsocksport}/tcp
205 | firewall-cmd --permanent --zone=public --add-port=${shadowsocksport}/udp
206 | firewall-cmd --reload
207 | else
208 | echo "WARNING: Try to start firewalld failed. please enable port ${shadowsocksport} manually if necessary."
209 | fi
210 | fi
211 | fi
212 | echo "firewall set completed..."
213 | }
214 |
215 | # Install Shadowsocks
216 | function install_ss(){
217 | which pip > /dev/null 2>&1
218 | if [ $? -ne 0 ]; then
219 | if [ "$OS" == 'CentOS' ]; then
220 | which easy_install > /dev/null 2>&1
221 | if [ $? -eq 0 ]; then
222 | easy_install pip
223 | else
224 | echo "easy_install command not found. please check it and try again."
225 | exit 1
226 | fi
227 | fi
228 | fi
229 |
230 | if [ -f /usr/bin/pip ]; then
231 | if centosversion 6; then
232 | # Fix swig failed error by install old version
233 | pip install M2Crypto==0.22.3
234 | else
235 | pip install M2Crypto
236 | fi
237 | pip install greenlet
238 | pip install gevent
239 | pip install shadowsocks
240 | if [ -f /usr/bin/ssserver ] || [ -f /usr/local/bin/ssserver ]; then
241 | chmod +x /etc/init.d/shadowsocks
242 | # Add run on system start up
243 | if [ "$OS" == 'CentOS' ]; then
244 | chkconfig --add shadowsocks
245 | chkconfig shadowsocks on
246 | else
247 | update-rc.d -f shadowsocks defaults
248 | fi
249 | # Run shadowsocks in the background
250 | /etc/init.d/shadowsocks start
251 | else
252 | echo
253 | echo "Shadowsocks install failed! Please visit https://teddysun.com/342.html and contact."
254 | exit 1
255 | fi
256 | clear
257 | echo
258 | echo "Congratulations, shadowsocks install completed!"
259 | echo -e "Your Server IP: \033[41;37m ${IP} \033[0m"
260 | echo -e "Your Server Port: \033[41;37m ${shadowsocksport} \033[0m"
261 | echo -e "Your Password: \033[41;37m ${shadowsockspwd} \033[0m"
262 | echo -e "Your Local IP: \033[41;37m 127.0.0.1 \033[0m"
263 | echo -e "Your Local Port: \033[41;37m 1080 \033[0m"
264 | echo -e "Your Encryption Method: \033[41;37m aes-256-cfb \033[0m"
265 | echo
266 | echo "Welcome to visit:https://teddysun.com/342.html"
267 | echo "Enjoy it!"
268 | echo
269 | exit 0
270 | else
271 | echo
272 | echo "pip install failed! Please visit https://teddysun.com/342.html and contact."
273 | exit 1
274 | fi
275 | }
276 |
277 | # Uninstall Shadowsocks
278 | function uninstall_shadowsocks(){
279 | printf "Are you sure uninstall Shadowsocks? (y/n) "
280 | printf "\n"
281 | read -p "(Default: n):" answer
282 | if [ -z $answer ]; then
283 | answer="n"
284 | fi
285 | if [ "$answer" = "y" ]; then
286 | ps -ef | grep -v grep | grep -v ps | grep -i "ssserver" > /dev/null 2>&1
287 | if [ $? -eq 0 ]; then
288 | /etc/init.d/shadowsocks stop
289 | fi
290 | checkos
291 | if [ "$OS" == 'CentOS' ]; then
292 | chkconfig --del shadowsocks
293 | else
294 | update-rc.d -f shadowsocks remove
295 | fi
296 | # delete config file
297 | rm -f /etc/shadowsocks.json
298 | rm -f /var/run/shadowsocks.pid
299 | rm -f /etc/init.d/shadowsocks
300 | pip uninstall -y shadowsocks
301 | if [ $? -eq 0 ]; then
302 | echo "Shadowsocks uninstall success!"
303 | else
304 | echo "Shadowsocks uninstall failed!"
305 | fi
306 | else
307 | echo "uninstall cancelled, Nothing to do"
308 | fi
309 | }
310 |
311 | # Install Shadowsocks-python
312 | function install_shadowsocks(){
313 | checkos
314 | rootness
315 | disable_selinux
316 | pre_install
317 | download_files
318 | config_shadowsocks
319 | if [ "$OS" == 'CentOS' ]; then
320 | firewall_set
321 | fi
322 | install_ss
323 | }
324 |
325 | # Initialization step
326 | action=$1
327 | [ -z $1 ] && action=install
328 | case "$action" in
329 | install)
330 | install_shadowsocks
331 | ;;
332 | uninstall)
333 | uninstall_shadowsocks
334 | ;;
335 | *)
336 | echo "Arguments error! [${action} ]"
337 | echo "Usage: `basename $0` {install|uninstall}"
338 | ;;
339 | esac
340 |
--------------------------------------------------------------------------------