Files
tuic_docker/bin/print_share_link.sh
T
2026-05-28 18:57:33 +08:00

116 lines
3.7 KiB
Bash

#!/bin/bash
print_share_link() {
# 检查jq是否安装
check_jq
local CONFIG_FILE=${1}
local TYPE=$(jq -r '.inbounds[0].type' "$CONFIG_FILE")
if [ "$TYPE" = "tuic" ]; then
print_tuic_share_link "$CONFIG_FILE"
return 0
fi
if [ "$TYPE" = "hysteria2" ]; then
print_hysteria_share_link "$CONFIG_FILE"
return 0
fi
red "error: 不支持的协议类型: $TYPE"
}
print_tuic_share_link() {
local CONFIG_FILE=${1} # 配置文件路径
# 检查配置是否正确
local UUID=$(jq -r '.inbounds[0].users[0].uuid' "$CONFIG_FILE")
if [ "$UUID" = "你的UUID" ] || [ -z "$UUID" ] || [[ "$UUID" == null ]]; then
red "error: 配置有误, 请重新生成配置"
exit 1
fi
# 读取配置文件内容
local CONFIG=$(cat "$CONFIG_FILE")
# 提取所需信息
UUID=$(echo "$CONFIG" | jq -r '.inbounds[0].users[0].uuid')
local SNI=$(echo "$CONFIG" | jq -r '.inbounds[0].tls.server_name')
local IPV4=$(curl -4 -sSL --connect-timeout 3 --retry 2 ip.sb || echo "null")
local PORT=$(echo "$CONFIG" | jq -r '.inbounds[0].listen_port')
local PASSWORD=$(echo "$CONFIG" | jq -r '.inbounds[0].users[0].password')
local CONGESTION_CONTROL=$(echo "$CONFIG" | jq -r '.inbounds[0].congestion_control')
local ALLOW_INSECURE=1 # 是否跳过证书验证,1表示跳过,0表示不跳过
local INSECURE=1 # 是否允许不安全连接,1表示允许,0表示不允许
# 检查是否使用ACME申请证书
if is_config_use_acme "$CONFIG_FILE"; then
ALLOW_INSECURE=0 # 不跳过证书验证
INSECURE=0
fi
# 构建分享链接
local SHARE_LINK="tuic://$UUID:$PASSWORD@$IPV4:$PORT?sni=$SNI&alpn=h3&insecure=$INSECURE&allowInsecure=$ALLOW_INSECURE&congestion_control=$CONGESTION_CONTROL#Tuic节点"
# 输出分享链接
echo -e "\033[32m"
echo "IPV4: $IPV4"
echo "port: $PORT"
echo "uuid: $UUID"
echo "password: $PASSWORD"
echo "sni: $SNI"
echo "congestion_control(拥塞控制算法): $CONGESTION_CONTROL"
echo ""
echo "分享链接: $SHARE_LINK"
echo -e "\033[0m"
}
print_hysteria_share_link(){
local CONFIG_FILE=${1} # 配置文件路径
local INSECURE=1
local ALLOW_INSECURE=1
# 检查是否使用ACME申请证书
if is_config_use_acme "$CONFIG_FILE"; then
ALLOW_INSECURE=0 # 不跳过证书验证
INSECURE=0
fi
# 读取配置文件内容
local CONFIG=$(cat "$CONFIG_FILE")
# 提取所需信息
local IPV4=$(curl -4 -sSL --connect-timeout 3 --retry 2 ip.sb || echo "null")
local PORT=$(echo "$CONFIG" | jq -r '.inbounds[0].listen_port')
local SNI=$(echo "$CONFIG" | jq -r '.inbounds[0].tls.server_name')
local PASSWORD=$(echo "$CONFIG" | jq -r '.inbounds[0].users[0].password')
local OBFS_TYPE=$(echo "$CONFIG" | jq -r '.inbounds[0].obfs.type')
local OBFS_PASSWORD=$(echo "$CONFIG" | jq -r '.inbounds[0].obfs.password')
# 构建分享链接
local SHARE_LINK="hysteria2://${PASSWORD}@${IPV4}:${PORT}/?sni=${SNI}&insecure=${INSECURE}&obfs=${OBFS_TYPE}&obfs-password=${OBFS_PASSWORD}&allowInsecure=${ALLOW_INSECURE}#Hysteria2节点"
# 输出分享链接
echo -e "\033[32m"
echo "IPV4: $IPV4"
echo "port: $PORT"
echo "password: $PASSWORD"
echo "sni: $SNI"
echo "obfs_type: $OBFS_TYPE"
echo "obfs_password(混淆密码): $OBFS_PASSWORD"
echo ""
echo "分享链接: $SHARE_LINK"
echo -e "\033[0m"
}
# 检查是否使用ACME申请证书
is_config_use_acme(){
local CONFIG_FILE="$1"
if jq -e '.inbounds[0].tls.acme' "$CONFIG_FILE" > /dev/null 2>&1; then
return 0
fi
return 1;
}