diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 67d97b1..afca011 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -34,16 +34,29 @@ jobs: run: | go get -v -t -d ./... - - name: Build + - name: Build Vmessping run: | + BINNAME=vmessping GITVER=$(git describe --tags || git rev-parse --short HEAD) CMDDIR=$(pwd) LDFLAGS="-s -w -X main.MAINVER=${GITVER}" - pushd cmd/vmessping - GOOS=linux GOARCH=amd64 go build -ldflags="${LDFLAGS}" -v -o vmessping_amd64_linux . - GOOS=windows GOARCH=amd64 go build -ldflags="${LDFLAGS}" -v -o vmessping_amd64_windows.exe . - zip $CMDDIR/vmessping_amd64_linux.zip vmessping_amd64_linux - zip $CMDDIR/vmessping_amd64_windows.zip vmessping_amd64_windows.exe + pushd cmd/${BINNAME} + GOOS=linux GOARCH=amd64 go build -ldflags="${LDFLAGS}" -v -o ${BINNAME}_amd64_linux . + GOOS=windows GOARCH=amd64 go build -ldflags="${LDFLAGS}" -v -o ${BINNAME}_amd64_windows.exe . + zip $CMDDIR/${BINNAME}_amd64_linux.zip ${BINNAME}_amd64_linux + zip $CMDDIR/${BINNAME}_amd64_windows.zip ${BINNAME}_amd64_windows.exe + + - name: Build Vmessconv + run: | + BINNAME=vmessconv + GITVER=$(git describe --tags || git rev-parse --short HEAD) + CMDDIR=$(pwd) + LDFLAGS="-s -w -X main.MAINVER=${GITVER}" + pushd cmd/${BINNAME} + GOOS=linux GOARCH=amd64 go build -ldflags="${LDFLAGS}" -v -o ${BINNAME}_amd64_linux . + GOOS=windows GOARCH=amd64 go build -ldflags="${LDFLAGS}" -v -o ${BINNAME}_amd64_windows.exe . + zip $CMDDIR/${BINNAME}_amd64_linux.zip ${BINNAME}_amd64_linux + zip $CMDDIR/${BINNAME}_amd64_windows.zip ${BINNAME}_amd64_windows.exe - name: Release uses: softprops/action-gh-release@v1 @@ -55,6 +68,8 @@ jobs: files: | vmessping_amd64_linux.zip vmessping_amd64_windows.zip + vmessconv_amd64_linux.zip + vmessconv_amd64_windows.zip env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/cmd/vmessconv/main.go b/cmd/vmessconv/main.go new file mode 100644 index 0000000..7c016e8 --- /dev/null +++ b/cmd/vmessconv/main.go @@ -0,0 +1,37 @@ +package main + +import ( + "flag" + "fmt" + "log" + "os" + + "github.com/v2fly/vmessping/vmess" +) + +var ( + MAINVER = "0.0.0-src" +) + +func main() { + flag.Parse() + var link string + if flag.NArg() == 0 { + if link = os.Getenv("VMESS"); link == "" { + fmt.Println(os.Args[0], "vmess://....") + flag.Usage() + os.Exit(1) + } + } else { + link = flag.Args()[0] + } + + lk, err := vmess.ParseVmess(link) + if err != nil { + log.Fatalln(err) + } + fmt.Println("VmessConvert:", MAINVER) + fmt.Println("V2rayN:", lk.LinkStr("ng")) + fmt.Println("ShadowRocket:", lk.LinkStr("rk")) + fmt.Println("Quantumult:", lk.LinkStr("quan")) +} diff --git a/vmess/vmess.go b/vmess/vmess.go index 5b96e2e..a48616a 100644 --- a/vmess/vmess.go +++ b/vmess/vmess.go @@ -64,7 +64,7 @@ func (v VmessLink) asNgLink() string { } func (v VmessLink) asRocketLink() string { - mhp := fmt.Sprintf("auto:%s@%s:%s", v.ID, v.Add, v.Port) + mhp := fmt.Sprintf("%s:%s@%s:%s", v.Type, v.ID, v.Add, v.Port) qs := url.Values{} qs.Add("remarks", v.Ps) if v.Net == "ws" { @@ -79,7 +79,14 @@ func (v VmessLink) asRocketLink() string { if v.TLS == "tls" { qs.Add("tls", "1") } - return fmt.Sprintf("vmess://%s?%s", base64.URLEncoding.EncodeToString([]byte(mhp)), qs.Encode()) + + url := url.URL{ + Scheme: "vmess", + Host: base64.URLEncoding.EncodeToString([]byte(mhp)), + RawQuery: qs.Encode(), + } + + return url.String() } func (v VmessLink) asQuantumult() string {