diff --git a/common/convert/converter.go b/common/convert/converter.go index acf6abbc..cb6a3c07 100644 --- a/common/convert/converter.go +++ b/common/convert/converter.go @@ -513,6 +513,95 @@ func ConvertsV2Ray(buf []byte) ([]map[string]any, error) { } proxies = append(proxies, ssr) + + case "socks", "socks5", "socks5h", "http", "https": + link, err := url.Parse(line) + if err != nil { + continue + } + server := link.Hostname() + if server == "" { + continue + } + portStr := link.Port() + if portStr == "" { + continue + } + remarks := link.Fragment + if remarks == "" { + remarks = fmt.Sprintf("%s:%s", server, portStr) + } + name := uniqueName(names, remarks) + encodeStr := link.User.String() + var username, password string + if encodeStr != "" { + decodeStr := string(DecodeBase64([]byte(encodeStr))) + splitStr := strings.Split(decodeStr, ":") + + // todo: should use url.QueryUnescape ? + username = splitStr[0] + if len(splitStr) == 2 { + password = splitStr[1] + } + } + socks := make(map[string]any, 10) + socks["name"] = name + socks["type"] = func() string { + switch scheme { + case "socks", "socks5", "socks5h": + return "socks5" + case "http", "https": + return "http" + } + return scheme + }() + socks["server"] = server + socks["port"] = portStr + socks["username"] = username + socks["password"] = password + socks["skip-cert-verify"] = true + + proxies = append(proxies, socks) + + case "anytls": + // https://github.com/anytls/anytls-go/blob/main/docs/uri_scheme.md + link, err := url.Parse(line) + if err != nil { + continue + } + username := link.User.Username() + password, exist := link.User.Password() + if !exist { + password = username + } + query := link.Query() + server := link.Hostname() + if server == "" { + continue + } + portStr := link.Port() + if portStr == "" { + continue + } + insecure, sni := query.Get("insecure"), query.Get("sni") + insecureBool := insecure == "1" + remarks := link.Fragment + if remarks == "" { + remarks = fmt.Sprintf("%s:%s", server, portStr) + } + name := uniqueName(names, remarks) + anytls := make(map[string]any, 10) + anytls["name"] = name + anytls["type"] = "anytls" + anytls["server"] = server + anytls["port"] = portStr + anytls["username"] = username + anytls["password"] = password + anytls["sni"] = sni + anytls["skip-cert-verify"] = insecureBool + anytls["udp"] = true + + proxies = append(proxies, anytls) } }