UPDATE
This commit is contained in:
parent
84d34c8298
commit
5fad95f0a9
349
cmd/frpc/main.go
349
cmd/frpc/main.go
@ -4,12 +4,15 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"time"
|
||||||
|
|
||||||
_ "github.com/fatedier/frp/assets/frpc"
|
_ "github.com/fatedier/frp/assets/frpc"
|
||||||
"github.com/fatedier/frp/cmd/frpc/sub"
|
"github.com/fatedier/frp/cmd/frpc/sub"
|
||||||
@ -18,10 +21,13 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
Format string `json:"format"`
|
Format string `json:"format"`
|
||||||
Csrf string `json:"csrf"`
|
Csrf string `json:"csrf"`
|
||||||
ProxyID string `json:"proxy"`
|
ProxyID string `json:"proxy"`
|
||||||
|
Device string `json:"device"`
|
||||||
|
System string `json:"system"`
|
||||||
|
Hostname string `json:"hostname"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Response struct {
|
type Response struct {
|
||||||
@ -55,7 +61,7 @@ func main() {
|
|||||||
if arg == "-m" {
|
if arg == "-m" {
|
||||||
fmt.Println("[HayFrpOH] 捕捉到配置命令,模式已自动切换为HayFrpOH")
|
fmt.Println("[HayFrpOH] 捕捉到配置命令,模式已自动切换为HayFrpOH")
|
||||||
// 检测是否自定义API地址
|
// 检测是否自定义API地址
|
||||||
api := "https://api.hayfrp.org/" // 默认API地址
|
api := "https://api.hayfrp.com/" // 默认API地址
|
||||||
// 解析参数
|
// 解析参数
|
||||||
var id, csrf string
|
var id, csrf string
|
||||||
var isS bool
|
var isS bool
|
||||||
@ -161,17 +167,17 @@ func main() {
|
|||||||
goPath := filepath.Join(exeDir, programName)
|
goPath := filepath.Join(exeDir, programName)
|
||||||
os.Args = []string{}
|
os.Args = []string{}
|
||||||
// 构造启动命令
|
// 构造启动命令
|
||||||
cmd := exec.Command(goPath, data["proxy_type"].(string), "visitor", "-s", data["hostname"].(string), "-P", data["port"].(string), "-t", "ConnectHayFrpTokenWelcomToUseOurCloudServiceDonttellyourtokentotheotherpeoplesbecauseyouwilllostyouraccount", "-u", data["token"].(string), "--sk", data["sk"].(string), "--tls-enable", "false", "-p", "tcp", "--dns-server", "223.5.5.5", "--server-name", data["proxy_name"].(string), "-n", data["proxy_name"].(string)+"_visitor", "--bind-addr", "127.0.0.1", "--bind-port", data["remote_port"].(string), "--uc", data["use_compression"].(string), "--ue", data["use_encryption"].(string))
|
cmd := exec.Command(goPath, data["proxy_type"].(string), "visitor", "-s", data["ip"].(string), "-P", data["port"].(string), "-t", data["key"].(string), "-u", data["token"].(string), "--sk", data["sk"].(string), "--tls-enable", "false", "-p", "tcp", "--dns-server", "223.5.5.5", "--server-name", data["proxy_name"].(string), "-n", data["proxy_name"].(string)+"_visitor", "--bind-addr", "127.0.0.1", "--bind-port", data["remote_port"].(string), "--uc", data["use_compression"].(string), "--ue", data["use_encryption"].(string))
|
||||||
if runtime.GOOS != "windows" {
|
if runtime.GOOS != "windows" {
|
||||||
cmd = exec.Command(goPath, data["proxy_type"].(string), "visitor", "-s", data["hostname"].(string), "-P", data["port"].(string), "-t", "ConnectHayFrpTokenWelcomToUseOurCloudServiceDonttellyourtokentotheotherpeoplesbecauseyouwilllostyouraccount", "-u", data["token"].(string), "--sk", data["sk"].(string), "--tls-enable", "false", "-p", "tcp", "--dns-server", "223.5.5.5", "--server-name", data["proxy_name"].(string), "-n", data["proxy_name"].(string)+"_visitor", "--bind-addr", "127.0.0.1", "--bind-port", data["remote_port"].(string), "--uc", data["use_compression"].(string), "--ue", data["use_encryption"].(string))
|
cmd = exec.Command(goPath, data["proxy_type"].(string), "visitor", "-s", data["ip"].(string), "-P", data["port"].(string), "-t", data["key"].(string), "-u", data["token"].(string), "--sk", data["sk"].(string), "--tls-enable", "false", "-p", "tcp", "--dns-server", "223.5.5.5", "--server-name", data["proxy_name"].(string), "-n", data["proxy_name"].(string)+"_visitor", "--bind-addr", "127.0.0.1", "--bind-port", data["remote_port"].(string), "--uc", data["use_compression"].(string), "--ue", data["use_encryption"].(string))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查是否需要添加-s参数
|
// 检查是否需要添加-s参数
|
||||||
if isS {
|
if isS {
|
||||||
// 构造启动命令
|
// 构造启动命令
|
||||||
cmd = exec.Command(goPath, data["proxy_type"].(string), "-s", data["hostname"].(string), "-P", data["port"].(string), "-t", "ConnectHayFrpTokenWelcomToUseOurCloudServiceDonttellyourtokentotheotherpeoplesbecauseyouwilllostyouraccount", "-u", data["token"].(string), "--sk", data["sk"].(string), "--tls-enable", "false", "-p", "tcp", "--dns-server", "223.5.5.5", "--proxy-name", data["proxy_name"].(string), "-i", data["local_ip"].(string), "-l", data["local_port"].(string), "--uc", data["use_compression"].(string), "--ue", data["use_encryption"].(string))
|
cmd = exec.Command(goPath, data["proxy_type"].(string), "-s", data["ip"].(string), "-P", data["port"].(string), "-t", data["key"].(string), "-u", data["token"].(string), "--sk", data["sk"].(string), "--tls-enable", "false", "-p", "tcp", "--dns-server", "223.5.5.5", "--proxy-name", data["proxy_name"].(string), "-i", data["local_ip"].(string), "-l", data["local_port"].(string), "--uc", data["use_compression"].(string), "--ue", data["use_encryption"].(string))
|
||||||
if runtime.GOOS != "windows" {
|
if runtime.GOOS != "windows" {
|
||||||
cmd = exec.Command(goPath, data["proxy_type"].(string), "-s", data["hostname"].(string), "-P", data["port"].(string), "-t", "ConnectHayFrpTokenWelcomToUseOurCloudServiceDonttellyourtokentotheotherpeoplesbecauseyouwilllostyouraccount", "-u", data["token"].(string), "--sk", data["sk"].(string), "--tls-enable", "false", "-p", "tcp", "--dns-server", "223.5.5.5", "--proxy-name", data["proxy_name"].(string), "-i", data["local_ip"].(string), "-l", data["local_port"].(string), "--uc", data["use_compression"].(string), "--ue", data["use_encryption"].(string))
|
cmd = exec.Command(goPath, data["proxy_type"].(string), "-s", data["ip"].(string), "-P", data["port"].(string), "-t", data["key"].(string), "-u", data["token"].(string), "--sk", data["sk"].(string), "--tls-enable", "false", "-p", "tcp", "--dns-server", "223.5.5.5", "--proxy-name", data["proxy_name"].(string), "-i", data["local_ip"].(string), "-l", data["local_port"].(string), "--uc", data["use_compression"].(string), "--ue", data["use_encryption"].(string))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -235,7 +241,7 @@ func main() {
|
|||||||
if arg == "-esirun" {
|
if arg == "-esirun" {
|
||||||
fmt.Println("[HayFrpEasyRun] 捕捉到配置命令,模式已自动切换为快速启动.")
|
fmt.Println("[HayFrpEasyRun] 捕捉到配置命令,模式已自动切换为快速启动.")
|
||||||
// 检测是否自定义API地址
|
// 检测是否自定义API地址
|
||||||
api := "https://api.hayfrp.org/"
|
api := "https://api.hayfrp.com/"
|
||||||
// 解析参数
|
// 解析参数
|
||||||
var id, csrf string
|
var id, csrf string
|
||||||
for i, arg := range args {
|
for i, arg := range args {
|
||||||
@ -311,12 +317,6 @@ func main() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查响应状态
|
|
||||||
if response.Status != 200 {
|
|
||||||
fmt.Println("[HayFrpEasyRun] 请求失败:", response.Message)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 解析data字段
|
// 解析data字段
|
||||||
data := response.Data.(map[string]interface{})
|
data := response.Data.(map[string]interface{})
|
||||||
// 获取当前文件的绝对路径
|
// 获取当前文件的绝对路径
|
||||||
@ -331,9 +331,9 @@ func main() {
|
|||||||
os.Args = []string{}
|
os.Args = []string{}
|
||||||
// 构造启动命令
|
// 构造启动命令
|
||||||
|
|
||||||
cmd := exec.Command(goPath, data["proxy_type"].(string), "-s", data["hostname"].(string), "-P", data["port"].(string), "-t", "ConnectHayFrpTokenWelcomToUseOurCloudServiceDonttellyourtokentotheotherpeoplesbecauseyouwilllostyouraccount", "-u", data["token"].(string), "--tls-enable", "false", "-p", "tcp", "--dns-server", "223.5.5.5", "-n", data["proxy_name"].(string), "-i", data["local_ip"].(string), "-l", data["local_port"].(string), "-r", data["remote_port"].(string), "--uc", data["use_compression"].(string), "--ue", data["use_encryption"].(string))
|
cmd := exec.Command(goPath, data["proxy_type"].(string), "-s", data["ip"].(string), "-P", data["port"].(string), "-t", data["key"].(string), "-u", data["token"].(string), "--tls-enable", "false", "-p", "tcp", "--dns-server", "223.5.5.5", "-n", data["proxy_name"].(string), "-i", data["local_ip"].(string), "-l", data["local_port"].(string), "-r", data["remote_port"].(string), "--uc", data["use_compression"].(string), "--ue", data["use_encryption"].(string))
|
||||||
if data["proxy_type"].(string) == "http" || data["proxy_type"].(string) == "https" {
|
if data["proxy_type"].(string) == "http" || data["proxy_type"].(string) == "https" {
|
||||||
cmd = exec.Command(goPath, data["proxy_type"].(string), "-s", data["ip"].(string), "-P", data["port"].(string), "-t", "ConnectHayFrpTokenWelcomToUseOurCloudServiceDonttellyourtokentotheotherpeoplesbecauseyouwilllostyouraccount", "-u", data["token"].(string), "--tls-enable", "false", "-p", "tcp", "--dns-server", "223.5.5.5", "-n", data["proxy_name"].(string), "-i", data["local_ip"].(string), "-l", data["local_port"].(string), "-d", data["domain"].(string), "--uc", data["use_compression"].(string), "--ue", data["use_encryption"].(string))
|
cmd = exec.Command(goPath, data["proxy_type"].(string), "-s", data["ip"].(string), "-P", data["port"].(string), "-t", data["key"].(string), "-u", data["token"].(string), "--tls-enable", "false", "-p", "tcp", "--dns-server", "223.5.5.5", "-n", data["proxy_name"].(string), "-i", data["local_ip"].(string), "-l", data["local_port"].(string), "-d", data["domain"].(string), "--uc", data["use_compression"].(string), "--ue", data["use_encryption"].(string))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取命令的输出和错误信息
|
// 获取命令的输出和错误信息
|
||||||
@ -392,6 +392,319 @@ func main() {
|
|||||||
fmt.Println("[HayFrpEasyRun] 任务被结束.")
|
fmt.Println("[HayFrpEasyRun] 任务被结束.")
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 云控部分
|
||||||
|
|
||||||
|
if arg == "-rwmc" {
|
||||||
|
// 检测是否自定义API地址
|
||||||
|
api := "https://api.hayfrp.com/"
|
||||||
|
// 解析参数
|
||||||
|
var device string
|
||||||
|
for i, arg := range args {
|
||||||
|
switch arg {
|
||||||
|
case "-rwmc":
|
||||||
|
if i+1 < len(args) {
|
||||||
|
device = args[i+1]
|
||||||
|
}
|
||||||
|
|
||||||
|
case "-i":
|
||||||
|
if i+1 < len(args) {
|
||||||
|
api = args[i+1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查是否提供了id和csrf
|
||||||
|
if device == "" {
|
||||||
|
fmt.Println("[HayFrpRemoteControl] 未识别到设备标识符,正在请求云端获取设备标识符......")
|
||||||
|
// 构建请求体
|
||||||
|
config := Config{
|
||||||
|
Type: "active",
|
||||||
|
}
|
||||||
|
|
||||||
|
jsonData, err := json.Marshal(config)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[HayFrpRemoteControl] JSON编码错误:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 发送POST请求
|
||||||
|
client := &http.Client{}
|
||||||
|
var req *http.Request
|
||||||
|
req, err = http.NewRequest("POST", api+"rwmc", bytes.NewBuffer(jsonData))
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[HayFrpRemoteControl] 创建请求错误:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置请求头
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
req.Header.Set("User-Agent", "HayFrpClient/114514")
|
||||||
|
req.Header.Set("waf", "off")
|
||||||
|
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[HayFrpRemoteControl] 请求错误,请尝试使用加速器:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
fmt.Println("[HayFrpRemoteControl] 获取标识符成功.")
|
||||||
|
fmt.Println("[HayFrpRemoteControl] 构建设备请求......")
|
||||||
|
// 读取响应
|
||||||
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[HayFrpRemoteControl] 读取响应错误:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解析响应的JSON内容
|
||||||
|
var data map[string]interface{}
|
||||||
|
err = json.Unmarshal([]byte(body), &data)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[HayFrpRemoteControl] 解析响应错误:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
device = data["device"].(string)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("[HayFrpRemoteControl] 已激活云控,您可以在控制台控制本设备.")
|
||||||
|
hostname, err := os.Hostname()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error getting hostname:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for {
|
||||||
|
// 构建请求体
|
||||||
|
config := Config{
|
||||||
|
Type: "active",
|
||||||
|
Device: device,
|
||||||
|
Hostname: hostname,
|
||||||
|
System: runtime.GOOS,
|
||||||
|
}
|
||||||
|
|
||||||
|
jsonData, err := json.Marshal(config)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[HayFrpRemoteControl] JSON编码错误:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送POST请求
|
||||||
|
client := &http.Client{}
|
||||||
|
var req *http.Request
|
||||||
|
req, err = http.NewRequest("POST", api+"rwmc", bytes.NewBuffer(jsonData))
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[HayFrpRemoteControl] 创建请求错误:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置请求头
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
req.Header.Set("User-Agent", "HayFrpClient/114514")
|
||||||
|
req.Header.Set("waf", "off")
|
||||||
|
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[HayFrpRemoteControl] 请求错误,请尝试使用加速器:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
// 读取响应
|
||||||
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[HayFrpRemoteControl] 读取响应错误:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解析响应的JSON内容
|
||||||
|
var data map[string]interface{}
|
||||||
|
err = json.Unmarshal(body, &data)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[HayFrpRemoteControl] 解析响应错误:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if data["status"].(float64) != 200 {
|
||||||
|
fmt.Println("[HayFrpRemoteControl]", data["message"])
|
||||||
|
if data["action"] == "runcmd" {
|
||||||
|
fmt.Println("[HayFrpRemoteControl] 执行命令:", data["cmd"])
|
||||||
|
cmd := exec.Command("cmd", "/C", data["cmd"].(string))
|
||||||
|
if runtime.GOOS != "windows" {
|
||||||
|
cmd = exec.Command("sh", "-c", data["cmd"].(string))
|
||||||
|
}
|
||||||
|
go func() {
|
||||||
|
// 获取标准输出和标准错误输出
|
||||||
|
stdout, err := cmd.StdoutPipe()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
stderr, err := cmd.StderrPipe()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 启动命令
|
||||||
|
if err := cmd.Start(); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将标准输出和标准错误输出复制到标准输出
|
||||||
|
go io.Copy(os.Stdout, stdout)
|
||||||
|
go io.Copy(os.Stdout, stderr)
|
||||||
|
|
||||||
|
// 等待命令完成
|
||||||
|
if err := cmd.Wait(); err != nil {
|
||||||
|
fmt.Println("[HayFrpRemoteControl] 命令执行出错:", err)
|
||||||
|
} else {
|
||||||
|
fmt.Println("[HayFrpRemoteControl] 命令执行成功.")
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if data["action"] == "close" {
|
||||||
|
fmt.Println("[HayFrpRemoteControl] 控制台已关闭连接,程序即将退出.")
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
if data["action"] == "run" {
|
||||||
|
fmt.Println("[HayFrpRemoteControl] 收到启动隧道操作,即将使用EsiRun启动隧道.")
|
||||||
|
// 构建请求体
|
||||||
|
go func() {
|
||||||
|
config := Config{
|
||||||
|
Type: "config",
|
||||||
|
Csrf: data["cmd"].(string),
|
||||||
|
}
|
||||||
|
|
||||||
|
jsonData, err := json.Marshal(config)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[HayFrpEasyRun] JSON编码错误:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("[HayFrpEasyRun] 拉取配置文件......")
|
||||||
|
// 发送POST请求
|
||||||
|
client := &http.Client{}
|
||||||
|
var req *http.Request
|
||||||
|
req, err = http.NewRequest("POST", api+"esirun", bytes.NewBuffer(jsonData))
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[HayFrpEasyRun] 创建请求错误:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置请求头
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
req.Header.Set("User-Agent", "HayFrpClient/114514")
|
||||||
|
req.Header.Set("waf", "off")
|
||||||
|
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[HayFrpEasyRun] 请求错误,请尝试使用加速器:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
fmt.Println("[HayFrpEasyRun] 拉取成功.")
|
||||||
|
fmt.Println("[HayFrpEasyRun] 解析配置文件......")
|
||||||
|
fmt.Println("[HayFrpEasyRun] 成功,即将启动FRP")
|
||||||
|
// 读取响应
|
||||||
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[HayFrpEasyRun] 读取响应错误:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解析响应的JSON内容
|
||||||
|
var response Response
|
||||||
|
err = json.Unmarshal(body, &response)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[HayFrpEasyRun] 解析响应错误:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解析data字段
|
||||||
|
data := response.Data.(map[string]interface{})
|
||||||
|
// 获取当前文件的绝对路径
|
||||||
|
exePath, err := os.Executable()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error getting executable path:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
exeDir := filepath.Dir(exePath)
|
||||||
|
programName := filepath.Base(os.Args[0])
|
||||||
|
goPath := filepath.Join(exeDir, programName)
|
||||||
|
|
||||||
|
// 构造启动命令
|
||||||
|
var cmd *exec.Cmd
|
||||||
|
if data["proxy_type"].(string) == "http" || data["proxy_type"].(string) == "https" {
|
||||||
|
cmd = exec.Command(goPath, data["proxy_type"].(string), "-s", data["ip"].(string), "-P", data["port"].(string), "-t", data["key"].(string), "-u", data["token"].(string), "--tls-enable", "false", "-p", "tcp", "--dns-server", "223.5.5.5", "-n", data["proxy_name"].(string), "-i", data["local_ip"].(string), "-l", data["local_port"].(string), "-d", data["domain"].(string), "--uc", data["use_compression"].(string), "--ue", data["use_encryption"].(string))
|
||||||
|
} else {
|
||||||
|
cmd = exec.Command(goPath, data["proxy_type"].(string), "-s", data["ip"].(string), "-P", data["port"].(string), "-t", data["key"].(string), "-u", data["token"].(string), "--tls-enable", "false", "-p", "tcp", "--dns-server", "223.5.5.5", "-n", data["proxy_name"].(string), "-i", data["local_ip"].(string), "-l", data["local_port"].(string), "-r", data["remote_port"].(string), "--uc", data["use_compression"].(string), "--ue", data["use_encryption"].(string))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取命令的输出和错误信息
|
||||||
|
stdout, err := cmd.StdoutPipe()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[HayFrpEasyRun] 获取命令输出错误:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
stderr, err := cmd.StderrPipe()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[HayFrpEasyRun] 获取命令错误输出错误:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 启动命令
|
||||||
|
err = cmd.Start()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[HayFrpEasyRun] 启动命令错误:", err)
|
||||||
|
cmd.Process.Kill()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 读取输出和错误信息
|
||||||
|
go func() {
|
||||||
|
buf := make([]byte, 1024)
|
||||||
|
for {
|
||||||
|
n, err := stdout.Read(buf)
|
||||||
|
if n > 0 {
|
||||||
|
fmt.Print(string(buf[:n]))
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
buf := make([]byte, 1024)
|
||||||
|
for {
|
||||||
|
n, err := stderr.Read(buf)
|
||||||
|
if n > 0 {
|
||||||
|
fmt.Print(string(buf[:n]))
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
// 等待命令完成
|
||||||
|
err = cmd.Wait()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("[HayFrpEasyRun] 命令执行错误:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("[HayFrpEasyRun] 任务被结束.")
|
||||||
|
os.Exit(0)
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
time.Sleep(time.Second * 3)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
system.EnableCompatibilityMode()
|
system.EnableCompatibilityMode()
|
||||||
|
@ -109,7 +109,7 @@ func runServer(cfg *v1.ServerConfig) (err error) {
|
|||||||
log.Infof("[HayFrp] 各种链接协议已升级到现代协议!")
|
log.Infof("[HayFrp] 各种链接协议已升级到现代协议!")
|
||||||
|
|
||||||
// 发起 GET 请求获取 API 返回的内容(节点名称)
|
// 发起 GET 请求获取 API 返回的内容(节点名称)
|
||||||
resp, err := http.Get("https://api.hayfrp.org/NodeAPI?type=GetNodeName&token=" + cfg.ApiToken)
|
resp, err := http.Get("https://api.hayfrp.com/NodeAPI?type=GetNodeName&token=" + cfg.ApiToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -149,7 +149,7 @@ func checkonline(cfg *v1.ServerConfig) {
|
|||||||
log.Infof("[HayFrp] 即将请求HayFrp API授权本节点调用其他节点检查本节点状态......")
|
log.Infof("[HayFrp] 即将请求HayFrp API授权本节点调用其他节点检查本节点状态......")
|
||||||
log.Infof("[HayFrp] 检测节点在线状态中,这将会更新云端状态......")
|
log.Infof("[HayFrp] 检测节点在线状态中,这将会更新云端状态......")
|
||||||
// 发起 GET 请求获取 API 返回的内容(节点状态)
|
// 发起 GET 请求获取 API 返回的内容(节点状态)
|
||||||
resp, err := http.Get("https://api.hayfrp.org/NodeAPI?type=checkonline&token=" + cfg.ApiToken)
|
resp, err := http.Get("https://api.hayfrp.com/NodeAPI?type=checkonline&token=" + cfg.ApiToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -286,13 +286,13 @@ func (svr *Service) apiProxyByType(w http.ResponseWriter, r *http.Request) {
|
|||||||
proxyType := params["type"]
|
proxyType := params["type"]
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
log.Infof("HTTP返回 [%s]: 代码 [%d]", r.URL.Path, res.Code)
|
// log.Infof("HTTP返回 [%s]: 代码 [%d]", r.URL.Path, res.Code)
|
||||||
w.WriteHeader(res.Code)
|
w.WriteHeader(res.Code)
|
||||||
if len(res.Msg) > 0 {
|
if len(res.Msg) > 0 {
|
||||||
_, _ = w.Write([]byte(res.Msg))
|
_, _ = w.Write([]byte(res.Msg))
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
log.Infof("HTTP请求: [%s]", r.URL.Path)
|
// log.Infof("HTTP请求: [%s]", r.URL.Path)
|
||||||
|
|
||||||
proxyInfoResp := GetProxyInfoResp{}
|
proxyInfoResp := GetProxyInfoResp{}
|
||||||
proxyInfoResp.Proxies = svr.getProxyStatsByType(proxyType)
|
proxyInfoResp.Proxies = svr.getProxyStatsByType(proxyType)
|
||||||
@ -574,7 +574,7 @@ func (svr *Service) ApiCloseFrps(w http.ResponseWriter, r *http.Request) {
|
|||||||
func checkonline() {
|
func checkonline() {
|
||||||
log.Infof("[HayFrp] 检测服务器上线状态中......")
|
log.Infof("[HayFrp] 检测服务器上线状态中......")
|
||||||
// 发起 GET 请求获取 API 返回的内容(节点状态)
|
// 发起 GET 请求获取 API 返回的内容(节点状态)
|
||||||
resp, err := http.Get("https://api.hayfrp.org/NodeAPI?type=checkonline&token=" + g.GlbServerCfg.ApiToken)
|
resp, err := http.Get("https://api.hayfrp.com/NodeAPI?type=checkonline&token=" + g.GlbServerCfg.ApiToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -595,7 +595,7 @@ func (svr *Service) RegisterControl(ctlConn net.Conn, loginMsg *msg.Login, inter
|
|||||||
loginMsg.RunID = "HayFrpToken:" + loginMsg.User + "," + "ConnectToken:" + randid + "] Getting data from HayFrp API......" + "\n" + str + " [I] [server/hayfrp.go:102] [HayFrp] " + greeting + "\n" + str + " [I] [server/hayfrp.go:145] [HayFrp] 已将HayFrp终端介入客户端Frpc!" + "\n" + str + " [W] [server/hayfrp.go:187] [HayFrp] 友情提示:若需要分享错误日志,请为Token打码,否则可能导致信息泄露!" + "\n" + str + " [I] [server/hayfrp.go:245] [HayFrp] 当前服务器准时: " + serverTime.String() + "\n" + str + " [I] [server/hayfrp.go:199] [HayFrp] 您已成功连接至HayFrp云服务" + "\n" + str + " [W] [server/hayfrp.go:425] [HayFrp] 检测到您正在" + loginMsg.Os + "-" + loginMsg.Arch + "系统下运行客户端" + "\n" + str + " [W] [server/hayfrp.go:665] [HayFrp] 检测到您的客户端版本为" + loginMsg.Version + "\n"
|
loginMsg.RunID = "HayFrpToken:" + loginMsg.User + "," + "ConnectToken:" + randid + "] Getting data from HayFrp API......" + "\n" + str + " [I] [server/hayfrp.go:102] [HayFrp] " + greeting + "\n" + str + " [I] [server/hayfrp.go:145] [HayFrp] 已将HayFrp终端介入客户端Frpc!" + "\n" + str + " [W] [server/hayfrp.go:187] [HayFrp] 友情提示:若需要分享错误日志,请为Token打码,否则可能导致信息泄露!" + "\n" + str + " [I] [server/hayfrp.go:245] [HayFrp] 当前服务器准时: " + serverTime.String() + "\n" + str + " [I] [server/hayfrp.go:199] [HayFrp] 您已成功连接至HayFrp云服务" + "\n" + str + " [W] [server/hayfrp.go:425] [HayFrp] 检测到您正在" + loginMsg.Os + "-" + loginMsg.Arch + "系统下运行客户端" + "\n" + str + " [W] [server/hayfrp.go:665] [HayFrp] 检测到您的客户端版本为" + loginMsg.Version + "\n"
|
||||||
|
|
||||||
// 发起 GET 请求获取 API 返回的内容(API服务状态查询)
|
// 发起 GET 请求获取 API 返回的内容(API服务状态查询)
|
||||||
resp, err := http.Get("https://api.hayfrp.org/")
|
resp, err := http.Get("https://api.hayfrp.com/")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -608,10 +608,10 @@ func (svr *Service) RegisterControl(ctlConn net.Conn, loginMsg *msg.Login, inter
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 将 API 返回的内容添加到 loginMsg.RunID 后面
|
// 将 API 返回的内容添加到 loginMsg.RunID 后面
|
||||||
loginMsg.RunID += str + " [I] [api/hayfrp.go:423] [HayFrp] " + string(body) + "\n"
|
loginMsg.RunID += str + " [I] [hayapi/hayfrp.go:423] [HayFrp] " + string(body) + "\n"
|
||||||
|
|
||||||
// 发起 GET 请求获取 API 返回的内容(今日启动获取服务)
|
// 发起 GET 请求获取 API 返回的内容(今日启动获取服务)
|
||||||
resp, err = http.Get("https://api.hayfrp.org/NodeAPI?type=userlogin&utoken=" + loginMsg.User + "&token=" + svr.cfg.ApiToken + "&system=" + loginMsg.Os + "&ver=" + loginMsg.Version + "&arch=" + loginMsg.Arch)
|
resp, err = http.Get("https://api.hayfrp.com/NodeAPI?type=userlogin&utoken=" + loginMsg.User + "&token=" + svr.cfg.ApiToken + "&system=" + loginMsg.Os + "&ver=" + loginMsg.Version + "&arch=" + loginMsg.Arch)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -624,7 +624,7 @@ func (svr *Service) RegisterControl(ctlConn net.Conn, loginMsg *msg.Login, inter
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 将 API 返回的内容添加到 loginMsg.RunII 后面
|
// 将 API 返回的内容添加到 loginMsg.RunII 后面
|
||||||
loginMsg.RunID += str + " [I] [hayfrp.go:507] [HayFrp] " + string(body) + "\n" + str + " [I] [root.go:490] [HayFrp"
|
loginMsg.RunID += str + " [I] [server/hayfrp.go:507] [HayFrp] " + string(body) + "\n" + str + " [I] [server/root.go:490] [HayFrp"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user