├── 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 | 7VxLc+I4EP41HJOyLL90nGSG2cNuVWqzj5nTlLEFqGIsSogA8+tXwpJBlmHMw2A2cAlqy7Lp7+uHulXpwefJ8iuLp+M/aIqznuukyx783HNd1wFA/JGSVSFBCBWCESNpIQIbwSv5iZXQUdI5SfHMmMgpzTiZmsKE5jlOuCGLGaMLc9qQZuZTp/EIW4LXJM5s6b8k5WMlBY6zufAbJqOxenTkqwuDOHkbMTrP1fN6LhyuP8XlSazXUvNn4ziliy0R/NKDz4xSXnybLJ9xJnWr1Vbc199xtXxvhnPe5IYwRRAOHJSi0PdxkjwAr1jiPc7mShl/4hmdswSvFcnwjKtX5yutLs5InI/k6GkxJhy/TuNEXloIdgjZmE8yMQLi61o1WD7cEaPy18tBQick0Rc4o2+l6uWNQ5rzfjwhmWTUP5ilcR4LcUqYwJ/QXEhzyuT0pywe4OyFzoiSJ0IXmIkL75hxIkD+vTJhQDmnEzEhzsio9o5P6gKn8vfYSlZ6l9PxckuklP4V0wnmbCWmqKsRVARQBuLq8WJDN1/LxltM82GoaK4oPirX3sAsviikm6LuWqj/PRMauCN+NsQ9x0QcuRbgbhTYgEPPaQNwaAFuYSyWEP72ChCfQ9shNLQN3cBSN/BcW93Ia0Hbtk+1lP1rps6mRaQbkqXU9TYA9aQt9P1MM8rWtpLjAp2pfORkOZKh+zEhwpSXj4VVUbb6Icz+fW0JDVFtD0PgBCaIgWdhGPg2hFH06LcAot95EIckw53Cz6/gp9PCLQBDUGODbYS4oDbCzbqG4Xz9Uh1Az9dgaQ8KkW193mON/fltWB/qvPVxusCsQ+ZXBRAg2Mx9tgEfaOA9bznfQCEylO15dj5fbvq2tQ3aSe9sb/eZzOJBJrTmOvO749ufdpiZuheG1/R8ILy7vlMhhNDOPC7n+6La1OO+uT7f5hr4kQl4aG/3Lrm7bpCt3HK0A0Els4fADnf12+s21K3j6j23b4wfqiT3bk1ueLkQV/6Ce4g7GkJQl6VcKsTV4GVqaAuLdTx5KvskVfXzmPFPsoVTkfWJfJ31YjhP9YxBRpO3QqQmAAvYngsd8en3D/GSUqz6Uro4XoOXaozsjwLi7UeY75qk4MCp0ZGycWc4izl5NxtU5wUR3kHcWSi/GRA9O9MQb/WqhgqMnbjiJeHfpFj4/mL0/YYRL8aVBR1nnwfeTwa/ARk6xAW76PIXm8sNh3o4zWdjMrUIc2U77/cVSEejLkBlq2+a0nLwveR0MhchPFXXdtJgv7lHDSFWsfrBeXSAjsUqXD/ojLkxDdTyL5TkfHuri8yFy06yXqNgtLptwyZ7Jb/ak67ujQqlWCsJeOPV1rSpnDDb88rVVigAxiEF8aVYsnK7Xp8OhzPMe1XLKPV+pLHYJbNDjWUf7W7TkM5hLO7hxhJ4nkEQz7+urRzKcORWCO52geB2HfF1lSdjRnPyc83v5ulfyXTnMQojk+0ehFrwghkRryx3TOsVLmYEl8kNvXZiBYReZNIUnEb/lnlllzd/xatDMtKPyBnvYM64KAg6TRK7InpOkmz5I7TJAFX09dHdH50SjgGq+KOSoN3kGrSrifd+y5kPM0Zm/b+uRXrBfgt0LcRtd3LD/RbfDwx1hzUHqWrbLRFqQ9v22dF7u2UvfMjczoRuzUHGy3VbYPePo3at21JF0A8jG8FLNVugXda7x7cznyfwHLNS4AU157kuGODs4tT/KsABLzRTzADZLrL+QEHQhrrtUsk9wu3FzweVDMW56pk5aNckuoZd10KcBaEfXPHMnD5sfmIbU38/qA5/5ZblTiz37v31FuhW+tQ6TJ7ap/44AAc3BrBdhTm4n3Y1K+5CC3r/SYQmtT5dCGta65OdNx0oT2y1BdUz9NWDn2fqJUeo0rMOO9Bp03lqK9Q/scl8Ew3lM1C/qSMsqQ9d3SDVTdujDmgcfBgCVk6u6yPS12WwXeJrqV0jT5IbPIaO1zu+XXOB1syxvD0rbS8Qv+0qYUsU8D3PpEAYBB+YAgcGbdmgC1HFdaHTgvgpzkUMN/++ppi++R9B8Mt/ -------------------------------------------------------------------------------- /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 | --------------------------------------------------------------------------------