-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathqrcode.sh
executable file
·86 lines (79 loc) · 4 KB
/
qrcode.sh
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
#!/bin/bash
XCONF=/tmp/proxy-xray.json
urlencode() {
# urlencode <string>
old_lc_collate=$LC_COLLATE
LC_COLLATE=C
local length="${#1}"
for (( i = 0; i < length; i++ )); do
local c="${1:$i:1}"
case $c in
[a-zA-Z0-9.~_-]) printf '%s' "$c" ;;
*) printf '%%%02X' "'$c" ;;
esac
done
LC_COLLATE=$old_lc_collate
}
PROTOCOL=`cat $XCONF | jq -r '.outbounds[0].protocol'`
case "${PROTOCOL}" in
vless)
XHOST=`cat $XCONF | jq -r '.outbounds[0].settings.vnext[0].address'`
XPORT=`cat $XCONF | jq -r '.outbounds[0].settings.vnext[0].port'`
WPATH=`cat $XCONF | jq -r '.outbounds[0].streamSettings.wsSettings.path'`
SPATH=`cat $XCONF | jq -r '.outbounds[0].streamSettings.splithttpSettings.path'`
SVCNAME=`cat $XCONF | jq -r '.outbounds[0].streamSettings.grpcSettings.serviceName'`
UUID=`cat $XCONF | jq -r '.outbounds[0].settings.vnext[0].users[0].id'`
XENCRYPT=`cat $XCONF | jq -r '.outbounds[0].settings.vnext[0].users[0].encryption'`
XSEC=`cat $XCONF | jq -r '.outbounds[0].streamSettings.security'`
RPBK=`cat $XCONF | jq -r '.outbounds[0].streamSettings.realitySettings.publicKey'`
RSNI=`cat $XCONF | jq -r '.outbounds[0].streamSettings.realitySettings.serverName'`
RSID=`cat $XCONF | jq -r '.outbounds[0].streamSettings.realitySettings.shortId'`
XNETWORK=`cat $XCONF | jq -r '.outbounds[0].streamSettings.network'`
XFLOW=`cat $XCONF | jq -r '.outbounds[0].settings.vnext[0].users[0].flow'`
XURL="${PROTOCOL}://${UUID}@${XHOST}:${XPORT}?security=${XSEC}&type=${XNETWORK}"
if [ "${XFLOW}" != "null" ]; then XURL="${XURL}&flow=${XFLOW}"; fi
if [ "${WPATH}" != "null" ]; then XURL="${XURL}&path=$(urlencode ${WPATH})"; fi
if [ "${SPATH}" != "null" ]; then XURL="${XURL}&path=$(urlencode ${SPATH})"; fi
if [ "${SVCNAME}" != "null" ]; then XURL="${XURL}&serviceName=${SVCNAME}&mode=gun"; fi
if [ "${RPBK}" != "null" ]; then XURL="${XURL}&pbk=${RPBK}"; fi
if [ "${RSNI}" != "null" ]; then XURL="${XURL}&sni=${RSNI}"; fi
if [ "${RSID}" != "null" ]; then XURL="${XURL}&sid=${RSID}"; fi
XURL="${XURL}#${XHOST}:${XPORT}"
;;
vmess)
XHOST=`cat $XCONF | jq -r '.outbounds[0].settings.vnext[0].address'`
XPORT=`cat $XCONF | jq -r '.outbounds[0].settings.vnext[0].port'`
WPATH=`cat $XCONF | jq -r '.outbounds[0].streamSettings.wsSettings.path'`
UUID=`cat $XCONF | jq -r '.outbounds[0].settings.vnext[0].users[0].id'`
XNETWORK=`cat $XCONF | jq -r '.outbounds[0].streamSettings.network'`
JXURL=`echo '{}' |jq --arg xhost "${XHOST}" --arg xport "${XPORT}" '. += {"v":2,"add":$xhost,"port":$xport}' `
JXURL=`echo ${JXURL} | jq --arg uuid "${UUID}" --arg network "${XNETWORK}" '. += {"id":$uuid,"net":$network}' `
JXURL=`echo ${JXURL} | jq '. += {"scy":"auto","tls":"tls"}' `
if [ "${WPATH}" != "null" ]; then
JXURL=`echo ${JXURL} | jq --arg wpath "${WPATH}" '. += {"path":$wpath}' `
fi
JXURL=`echo ${JXURL} |jq --arg xhost "${XHOST}" --arg xport "${XPORT}" '. += {"ps":($xhost+":"+$xport)}' `
XURL=`echo $JXURL|jq -c|base64|tr -d '\n'`
XURL="${PROTOCOL}://${XURL}"
;;
trojan)
XHOST=`cat $XCONF | jq -r '.outbounds[0].settings.servers[0].address'`
XPORT=`cat $XCONF | jq -r '.outbounds[0].settings.servers[0].port'`
XPASS=`cat $XCONF | jq -r '.outbounds[0].settings.servers[0].password'`
WPATH=`cat $XCONF | jq -r '.outbounds[0].streamSettings.wsSettings.path'`
XURL="${PROTOCOL}://${XPASS}@${XHOST}:${XPORT}"
if [ "${WPATH}" != "null" ]; then
XURL="${XURL}/?type=ws&path=$(urlencode ${WPATH})"
fi
XURL="${XURL}#${XHOST}:${XPORT}"
;;
*)
echo "Unknown protocol: ${PROTOCOL}"
echo "Abort"
exit 2
;;
esac
#echo "VPS-Server: ${XHOST}"
echo "Xray-URL: ${XURL}"
qrencode -m 2 -t ANSIUTF8 "${XURL}"
exit 0