xxf098 / LiteSpeedTest

A simple tool for batch test ss/ssr/v2ray/trojan servers.
GNU General Public License v3.0
344 stars 74 forks source link
shadowsocks shadowsocksr speedtest trojan v2ray

LiteSpeedTest

LiteSpeedTest is a simple tool for batch test ss/ssr/v2ray/trojan/clash servers.
Feature

Usage

Run as a speed test tool:
    # run this command then open http://127.0.0.1:10888/ in your browser to start speed test
    ./lite
    # start with another port
    ./lite -p 10889

    # test in command line only mode
    ./lite --test https://raw.githubusercontent.com/freefq/free/master/v2
    # test in command line only mode with custom config.
    ./lite --config config.json --test https://raw.githubusercontent.com/freefq/free/master/v2
    # details can find here https://github.com/xxf098/LiteSpeedTest/blob/master/config.json
    # all config options:
    #       "group":"job",   // group name
    #       "speedtestMode":"pingonly", // speedonly pingonly all
    #       "pingMethod":"googleping",  // googleping tcpping
    #       "sortMethod":"rspeed",      // speed rspeed ping rping
    #       "concurrency":1,  // concurrency number
    #       "testMode":2,   // 2: ALLTEST 3: RETEST
    #       "subscription":"subscription url",
    #       "timeout":16,  // timeout in seconds
    #       "language":"en", // en cn
    #       "fontSize":24,
    #       "unique": true,  // remove duplicated value
    #       "theme":"rainbow", 
    #       "outputMode": 1  // 0: base64 1: pic path 2: no pic 3: json 4: txt

Run as a grpc server:
    # start the grpc server  
    ./lite -grpc -p 10999
    # grpc go client example in ./api/rpc/liteclient/client.go 
    # grpc python client example in ./api/rpc/liteclientpy/client.py

Run as a http/socks5 proxy:
    # use default port 8090
    ./lite vmess://aHR0cHM6Ly9naXRodWIuY29tL3h4ZjA5OC9MaXRlU3BlZWRUZXN0
    ./lite ssr://aHR0cHM6Ly9naXRodWIuY29tL3h4ZjA5OC9MaXRlU3BlZWRUZXN0
    # use another port
    ./lite -p 8091 vmess://aHR0cHM6Ly9naXRodWIuY29tL3h4ZjA5OC9MaXRlU3BlZWRUZXN0

Build

    # require go>=1.18.1, nodejs >= 14
    # build frontend
    cp $(go env GOROOT)/misc/wasm/wasm_exec.js ./web/gui/wasm_exec.js
    npm install --prefix web/gui build
    npm run --prefix web/gui build
    GOOS=js GOARCH=wasm go get -u ./...
    GOOS=js GOARCH=wasm go build -o ./web/gui/dist/main.wasm ./wasm
    go build -o lite

Docker

 docker build --network=host  -t lite:$(git describe --tags --abbrev=0) -f ./docker/Dockerfile ./
 docker run -p 10888:10888/tcp lite:$(git describe --tags --abbrev=0)

Credits

Developer

import (
    "context"
    "fmt"
    "time"
    "github.com/xxf098/lite-proxy/web"
)
// see more details in ./examples
func testPing() error {
    ctx := context.Background()
    link := "https://www.example.com/subscription/link"
    opts := web.ProfileTestOptions{
        GroupName:     "Default", 
        SpeedTestMode: "pingonly",   //  pingonly speedonly all
        PingMethod:    "googleping", // googleping
        SortMethod:    "rspeed", // speed rspeed ping rping
        Concurrency:   2,
        TestMode:      2,
        Subscription:  link,
        Language:      "en",  // en cn
        FontSize:      24,
        Theme:         "rainbow",
        Unique:        true,
        Timeout:       10 * time.Second,
        OutputMode:  0,
    }
    nodes, err := web.TestContext(ctx, opts, &web.EmptyMessageWriter{})
    if err != nil {
        return err
    }
    // get all ok profile
    for _, node := range nodes {
        if node.IsOk {
            fmt.Println(node.Remarks)
        }
    }
    return nil
}