From 74995d2176f39f228fd59d8cfcd6dbaf3fd81a3d Mon Sep 17 00:00:00 2001 From: sunrise <575563079@qq.com> Date: Wed, 22 Mar 2023 15:17:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=A8=8B=E5=BA=8F=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- node-test.txt | 2 +- utils/utils.go | 64 +++++++++++++++++++++++++++++++++++++++------ utils/utils_test.go | 37 ++++++++++++++++++++++++++ 3 files changed, 94 insertions(+), 9 deletions(-) diff --git a/node-test.txt b/node-test.txt index 8ea1393..0b78111 100644 --- a/node-test.txt +++ b/node-test.txt @@ -1,5 +1,5 @@ vless://502d3d3a-c70c-472d-8d09-36a25991ac57@xray.wefuckgfw.tk:2083?encryption=none&security=tls&type=ws&host=&path=/4TLoIulw/#xray.wefuckgfw.tk%3A2083 -vless://85b3a84e-a939-4be0-b35c-80e8c9b0f1c8@xray.wefuckgfw.tk:2083?encryption=none&security=tls&type=ws&host=&path=/4TLoIulw/#xray.wefuckgfw.tk%3A2083 +vless://85b3a84e-a939-4be0-b35c-80e8c9b0f1c8@xray.wefuckgfw.tk:2083?encryption=none&security=tls&type=ws&path=/4TLoIulw/#xray.wefuckgfw.tk%3A2083 trojan://BQXJHGqe@trojan.wefuckgfw.tk:443#trojan.wefuckgfw.tk%3A443 trojan://xXTKSkHo@trojan.wefuckgfw.tk:443#trojan.wefuckgfw.tk%3A443 diff --git a/utils/utils.go b/utils/utils.go index 0d19c6f..f2aa309 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -264,39 +264,87 @@ func DoReplaceCDNIpSet(inputNode string, ipResult []string) ([]string, error) { //vless协议 if strings.HasPrefix(sampleNode, vlessPre) { //vless: vless://9bc0eacc-68f3-4562-15bedad6f6ef@a.b.c:539?type=tcp&security=tls&sni=b.a.tk&flow=xtls-rprx-direct#abc-vless-1 + //vless://85b3a84e-a939-4be0-b35c-80e8c9b0f1c8@xray.wefuckgfw.tk:2083?encryption=none&security=tls&type=ws&host=&path=/4TLoIulw/#xray.wefuckgfw.tk%3A2083 re := regexp.MustCompile(`@(.*?):`) + nodeHost := re.FindStringSubmatch(sampleNode)[1] if strings.Index(sampleNode, "host=") != -1 { re = regexp.MustCompile(`(host=)(.*?)(&)`) - sampleNode = re.ReplaceAllString(sampleNode, "$1"+nodeHost+"$3") + + subStrPart1 := re.FindStringSubmatch(sampleNode)[1] + subStrPart3 := re.FindStringSubmatch(sampleNode)[3] + sampleNode = re.ReplaceAllString(sampleNode, subStrPart1+nodeHost+subStrPart3) } else { - re = regexp.MustCompile(`(@)(.*?)(:)(.*?)(\?)`) - sampleNode = re.ReplaceAllString(sampleNode, "$1$2$3$4$5host="+nodeHost+"&") + var subStrPart5 string + if strings.Contains(sampleNode, "?") { + re = regexp.MustCompile(`(@)(.*?)(:)(.*?)(\?)`) + subStrPart5 = re.FindStringSubmatch(sampleNode)[5] + + } else { + re = regexp.MustCompile(`(@)(.*?)(:)(\d+)(.*?)`) + subStrPart5 = re.FindStringSubmatch(sampleNode)[5] + "?" + } + subStrPart1 := re.FindStringSubmatch(sampleNode)[1] + subStrPart2 := re.FindStringSubmatch(sampleNode)[2] + + subStrPart3 := re.FindStringSubmatch(sampleNode)[3] + + subStrPart4 := re.FindStringSubmatch(sampleNode)[4] + + //subStrPart5 := re.FindStringSubmatch(sampleNode)[5] + sampleNode = re.ReplaceAllString(sampleNode, subStrPart1+subStrPart2+subStrPart3+subStrPart4+subStrPart5+"host="+nodeHost+"&") + } for _, ip := range ipResult { re = regexp.MustCompile(`(@)(.*?)(:)`) - nodes = append(nodes, re.ReplaceAllString(sampleNode, "$1"+ip+"$3")+"\n") + subStrPart1 := re.FindStringSubmatch(sampleNode)[1] + subStrPart3 := re.FindStringSubmatch(sampleNode)[3] + nodes = append(nodes, re.ReplaceAllString(sampleNode, subStrPart1+ip+subStrPart3)+"\r") } return nodes, nil } if strings.HasPrefix(sampleNode, trojanPre) { //trojan trojan://aNbwlRsdsasdasr8N@a.b.tk:48857?type=tcp&security=tls&sni=a.b.tk&flow=xtls-rprx-direct#a.b.tk-trojan-2 re := regexp.MustCompile(`@(.*?):`) + nodeHost := re.FindStringSubmatch(sampleNode)[1] if strings.Index(sampleNode, "host=") != -1 { re = regexp.MustCompile(`(host=)(.*?)(&)`) - sampleNode = re.ReplaceAllString(sampleNode, "$1"+nodeHost+"$3") + + subStrPart1 := re.FindStringSubmatch(sampleNode)[1] + subStrPart3 := re.FindStringSubmatch(sampleNode)[3] + sampleNode = re.ReplaceAllString(sampleNode, subStrPart1+nodeHost+subStrPart3) } else { - re = regexp.MustCompile(`(@)(.*?)(:)(.*?)(\?)`) - sampleNode = re.ReplaceAllString(sampleNode, "$1$2$3$4$5host="+nodeHost+"&") + //是否有额外参数 + var subStrPart5 string + if strings.Contains(sampleNode, "?") { + re = regexp.MustCompile(`(@)(.*?)(:)(.*?)(\?)`) + subStrPart5 = re.FindStringSubmatch(sampleNode)[5] + + } else { + re = regexp.MustCompile(`(@)(.*?)(:)(\d+)(.*?)`) + subStrPart5 = re.FindStringSubmatch(sampleNode)[5] + "?" + + } + subStrPart1 := re.FindStringSubmatch(sampleNode)[1] + subStrPart2 := re.FindStringSubmatch(sampleNode)[2] + + subStrPart3 := re.FindStringSubmatch(sampleNode)[3] + + subStrPart4 := re.FindStringSubmatch(sampleNode)[4] + //subStrPart5 := re.FindStringSubmatch(sampleNode)[5] + + sampleNode = re.ReplaceAllString(sampleNode, subStrPart1+subStrPart2+subStrPart3+subStrPart4+subStrPart5+"host="+nodeHost+"&") } for _, ip := range ipResult { re = regexp.MustCompile(`(@)(.*?)(:)`) - nodes = append(nodes, re.ReplaceAllString(sampleNode, "$1"+ip+"$3")+"\n") + subStrPart1 := re.FindStringSubmatch(sampleNode)[1] + subStrPart3 := re.FindStringSubmatch(sampleNode)[3] + nodes = append(nodes, re.ReplaceAllString(sampleNode, subStrPart1+ip+subStrPart3)+"\r") } return nodes, nil } diff --git a/utils/utils_test.go b/utils/utils_test.go index 8cb4cc5..83f0d0b 100644 --- a/utils/utils_test.go +++ b/utils/utils_test.go @@ -1,7 +1,10 @@ package utils import ( + "fmt" "proxy-node2more/config" + "regexp" + "strings" "testing" ) @@ -36,3 +39,37 @@ func TestCaculateNodesResult(t *testing.T) { HandleError(err) println(result) } + +func TestTrojanLink(t *testing.T) { + sampleNode := "trojan://4bd8ab61-7e87-4ee6-be58-fe14fc62e6c0@ca1.trojanvh.xyz:80?security=tls&sni=ca1.trojanvh.xyz&type=tcp&headerType=none#org-org.org_Relay_-%F0%9F%87%A8%F0%9F%87%A6CA_36" + re := regexp.MustCompile(`(@)(.*?)(:)(.*?)(\?)`) + subStrPart1 := re.FindStringSubmatch(sampleNode)[1] + fmt.Println(subStrPart1) + +} + +func TestTrojanLink2(t *testing.T) { + sampleNode := "trojan://BQXJHGqe@trojan.wefuckgfw.tk:443#trojan.wefuckgfw.tk%3A443" + var re *regexp.Regexp + if strings.Contains(sampleNode, "?") { + re := regexp.MustCompile(`(@)(.*?)(:)(.*?)(\?)`) + subStrPart1 := re.FindStringSubmatch(sampleNode)[1] + fmt.Println(subStrPart1) + } else { + re := regexp.MustCompile(`(@)(.*?)(:)(\d+)(.*?)`) + subStrPart1 := re.FindStringSubmatch(sampleNode)[1] + subStrPart2 := re.FindStringSubmatch(sampleNode)[2] + subStrPart3 := re.FindStringSubmatch(sampleNode)[3] + subStrPart4 := re.FindStringSubmatch(sampleNode)[4] + subStrPart5 := re.FindStringSubmatch(sampleNode)[5] + + fmt.Println(subStrPart1) + fmt.Println(subStrPart2) + fmt.Println(subStrPart3) + fmt.Println(subStrPart4) + fmt.Println(subStrPart5) + + } + println(re) + +}