You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.3 KiB
77 lines
2.3 KiB
#!/usr/bin/env bash
|
|
config_file="/etc/shadowsocks-libev/config.json"
|
|
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
|
|
export PATH
|
|
#
|
|
# Generate QR Code for Shadowsocks Windows, OSX, Android and iOS clients
|
|
# (use on server with installed Shadowsocks-libev)
|
|
#
|
|
# This script is mostly borrowed from the script:
|
|
# Auto Install Shadowsocks Server for CentOS/Debian/Ubuntu
|
|
# by teddysun
|
|
# (https://github.com/teddysun/shadowsocks_install)
|
|
#
|
|
|
|
red='\033[0;31m'
|
|
green='\033[0;32m'
|
|
yellow='\033[0;33m'
|
|
plain='\033[0m'
|
|
|
|
|
|
function call() { # var=func [args ...]
|
|
REPLY=; "${1#*=}" "${@:2}"; eval "${1%%=*}=\$REPLY; return $?"
|
|
}
|
|
|
|
get_json_value() {
|
|
if [ "$(command -v python3)" = "" ]; then
|
|
echo ""
|
|
echo -e "${red}Error: ${plain}There is no 'python3' command in the system"
|
|
return 1
|
|
fi
|
|
REPLY="$(echo "$1" | python3 -c "import sys, json; print(json.load(sys.stdin)['$2'])")"
|
|
}
|
|
|
|
get_ip(){
|
|
local IP=$( ip addr | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | egrep -v "^192\.168|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-2]\.|^10\.|^127\.|^255\.|^0\." | head -n 1 )
|
|
[ -z ${IP} ] && IP=$( wget -qO- -t1 -T2 ipv4.icanhazip.com )
|
|
[ -z ${IP} ] && IP=$( wget -qO- -t1 -T2 ipinfo.io/ip )
|
|
echo ${IP}
|
|
}
|
|
|
|
get_ipv6(){
|
|
local ipv6=$(wget -qO- -t1 -T2 ipv6.icanhazip.com)
|
|
[ -z ${ipv6} ] && return 1 || return 0
|
|
}
|
|
|
|
qr_generate_libev(){
|
|
if [ "$(command -v qrencode)" = "" ]; then
|
|
echo ""
|
|
echo -e "${red}Error: ${plain}There is no 'qrencode' command in the system"
|
|
return 1
|
|
fi
|
|
local tmp=$(echo -n "${shadowsockscipher}:${shadowsockspwd}@$(get_ip):${shadowsocksport}" | base64 -w0)
|
|
local qr_code="ss://${tmp}"
|
|
local cur_dir=$(pwd)
|
|
echo
|
|
echo "Your QR Code: (For Shadowsocks Windows, OSX, Android and iOS clients)"
|
|
echo -e "${green} ${qr_code} ${plain}"
|
|
echo -n "${qr_code}" | qrencode -s8 -o ${cur_dir}/shadowsocks_libev_qr.png
|
|
echo "Your QR Code has been saved as a PNG file path:"
|
|
echo -e "${green} ${cur_dir}/shadowsocks_libev_qr.png ${plain}"
|
|
}
|
|
|
|
|
|
config_str=$(cat "$config_file")
|
|
|
|
call shadowsockscipher=get_json_value "$config_str" "method"
|
|
if [ $? -eq 1 ]; then
|
|
exit 1
|
|
fi
|
|
call shadowsockspwd=get_json_value "$config_str" "password"
|
|
call shadowsocksport=get_json_value "$config_str" "server_port"
|
|
|
|
|
|
qr_generate_libev
|
|
if [ $? -eq 1 ]; then
|
|
exit 1
|
|
fi
|