diff --git a/.github/workflows/build_release_extra.yml b/.github/workflows/build_release_extra.yml index a0c71b1..ebe7bdd 100644 --- a/.github/workflows/build_release_extra.yml +++ b/.github/workflows/build_release_extra.yml @@ -79,12 +79,12 @@ jobs: sudo apt-get install build-essential libgtk-3-dev - if: ${{ matrix.os != 'windows-latest' }} - name: set ASSET_NAME + name: set ASSET_NAME for !windows run: | echo "ASSET_NAME=vs_gui_${{ matrix.os }}_${{ matrix.goarch }}" >> $GITHUB_ENV - if: ${{ matrix.os == 'windows-latest' }} - name: set ASSET_NAME + name: set ASSET_NAME for windows run: | echo "ASSET_NAME=vs_gui_${{ matrix.os }}_${{ matrix.goarch }}" | Out-File -FilePath $env:GITHUB_ENV -Append @@ -94,24 +94,28 @@ jobs: with: go-version: 1.19 - - if: ${{ matrix.os != 'macos-latest' }} - name: Build - run: | - cd cmd/verysimple/ && make -f Makefile_r_gui PACKNAME=${{ env.ASSET_NAME }} BUILD_VERSION=${{ github.event.inputs.tagName }} - - - if: ${{ matrix.os == 'macos-latest' }} - name: macos Build + - name: Build run: | cd cmd/verysimple go build -tags "gui" -trimpath -ldflags "-X 'main.Version=${{ github.event.inputs.tagName }}' -s -w -buildid=" - gtar -cJf ${{ env.ASSET_NAME }}.tar.xz verysimple* -C ../../ examples/ - rm verysimple* + + - if: ${{ matrix.os != 'macos-latest' }} + name: tar (!macos) + run: | + cd cmd/verysimple && tar -cJf ${{ env.ASSET_NAME }}.tar.xz verysimple* -C ../../ examples/ + + - if: ${{ matrix.os == 'macos-latest' }} + name: gtar (macos) + run: | + cd cmd/verysimple && gtar -cJf ${{ env.ASSET_NAME }}.tar.xz verysimple* -C ../../ examples/ - name: touch xz archive shell: bash run: | - cd cmd/verysimple/ && touch -mt $(date +%Y01010000) *.tar.xz + cd cmd/verysimple + rm verysimple* + touch -mt $(date +%Y01010000) *.tar.xz - name: Upload binaries to release uses: svenstaro/upload-release-action@v2 diff --git a/README.md b/README.md index 332ddb8..713fbad 100644 --- a/README.md +++ b/README.md @@ -34,15 +34,15 @@ vs的一些亮点是 全协议readv加速,lazy技术,vless v1,hysteria 阻 ## 支持的功能 -socks5(包括 udp associate 以及用户密码)/http(以及用户密码)/socks5http(与clash的mixed等价)/dokodemo/tproxy(透明代理)/trojan/simplesocks/vless(v0/**v1**)/vmess/shadowsocks, 多用户, http头 +socks5(包括 udp associate 以及用户密码)/http(以及用户密码)/socks5http(与clash的mixed等价)/dokodemo/tproxy/tun/trojan/simplesocks/vless(v0/**v1**)/vmess/shadowsocks, 多用户, http头 ws(以及earlydata)/grpc(以及multiMode,uTls,以及 **支持回落的 grpcSimple**)/quic(以及**hy阻控、手动挡** 和 0-rtt)/smux, -dns(udp/tls)/route(geoip/geosite,分流功能完全与v2ray等价)/fallback(path/sni/alpn/PROXY protocol v1/v2), sniffing(tls), rejectUnknownSni(tls) +dns(udp/tls)/route(geoip/geosite,分流功能完全与v2ray等价)/fallback(path/sni/alpn/PROXY protocol v1/v2), sniffing(tls) -tcp/udp(以及fullcone)/unix domain socket, tls(包括客户端证书验证), uTls,**【tls lazy encrypt】**, http伪装头(**可支持回落**),PROXY protocol v1/v2 监听, +tcp/udp(以及fullcone)/unix domain socket, tls(包括生成随机证书;客户端证书验证;rejectUnknownSni), uTls,**【tls lazy encrypt】**, http伪装头(**可支持回落**),PROXY protocol v1/v2 监听, -cli(**交互模式**)/apiServer, Docker, docker-compose. +cli(**交互模式**)/**gui/vsb计划(flutter写的面板)**/apiServer, Docker, docker-compose. 为了不吓跑小白,本 README 把安装、使用方式 放在了前面,如果你要直接阅读本作的技术介绍部分,点击跳转 -> [创新点](#创新点) @@ -671,11 +671,11 @@ MIT协议!作者不负任何责任。本项目 适合内网测试使用,以 ## 鸣谢 -为了支持hysteria 的阻塞控制,从 https://github.com/HyNetwork/hysteria 的 pkg/congestion里拷贝了 brutal.go 和 pacer.go 到我们的 quic文件夹中. +为了支持hysteria 的阻塞控制,从 [hysteria](https://github.com/HyNetwork/hysteria) 的 pkg/congestion里拷贝了 brutal.go 和 pacer.go 到我们的 quic文件夹中. grpcSimple的客户端实现部分 借鉴了 clash 的gun的代码,该文件单独属于MIT协议。(clash的gun又是借鉴 Qv2ray的gun的) -tproxy借鉴了 https://github.com/LiamHaworth/go-tproxy/ , (trojan-go也借鉴了它; 它有数个bug, 已经都在本作修复) +tproxy借鉴了 [这个](https://github.com/LiamHaworth/go-tproxy/) , (trojan-go也借鉴了它; 它有数个bug, 已经都在本作修复) 来自v2ray的代码有:quic的嗅探,geosite文件的解析(v2fly/domain-list-community), vmess的 ShakeSizeParser 和 openAEADHeader 等函数。 @@ -683,10 +683,12 @@ tproxy借鉴了 https://github.com/LiamHaworth/go-tproxy/ , (trojan-go也借 以上借鉴的代码都是用的MIT协议。 -vmess 的客户端代码 来自 github.com/Dreamacro/clash/transport/vmess, 使用的是 GPLv3协议。该协议直接 放在 proxy/vmess/ 文件夹下了。 +vmess 的客户端代码 来自 [clash](github.com/Dreamacro/clash/transport/vmess), 使用的是 GPLv3协议。该协议直接 放在 proxy/vmess/ 文件夹下了。 同时通过该vmess 客户端代码 反推出了 对应的服务端代码。 +tun 的代码 来自 [tun2socks](github.com/xjasonlyu/tun2socks) , 使用的是 GPLv3协议。该协议直接放在 netLayer/tun 文件夹下了。 + ## Stargazers over time [![Stargazers over time](https://starchart.cc/e1732a364fed/v2ray_simple.svg)](https://starchart.cc/e1732a364fed/v2ray_simple) diff --git a/cmd/verysimple/Makefile_r_gui b/cmd/verysimple/Makefile_r_gui deleted file mode 100644 index fabeb98..0000000 --- a/cmd/verysimple/Makefile_r_gui +++ /dev/null @@ -1,6 +0,0 @@ -# 本文件用于编译release版的 vs_gui, 用于github action中的matrix, 所以不需要在这里指定GOOS - -all: - go build -tags "gui $(tags)" -trimpath -ldflags "-X 'main.Version=${BUILD_VERSION}' -s -w -buildid=" - tar -cJf ${PACKNAME}.tar.xz verysimple* -C ../../ examples/ - rm verysimple* \ No newline at end of file diff --git a/tlsLayer/conn.go b/tlsLayer/conn.go index 149b38e..9c750ec 100644 --- a/tlsLayer/conn.go +++ b/tlsLayer/conn.go @@ -11,9 +11,10 @@ import ( const ( official = iota utlsPackage + shadowTls ) -//参考 crypt/tls 的 conn.go, 注意,如果上游代码的底层结构发生了改变,则这里也要跟着修改,保持头部结构一致 +// 参考 crypt/tls 的 conn.go, 注意,如果上游代码的底层结构发生了改变,则这里也要跟着修改,保持头部结构一致 type faketlsconn struct { conn net.Conn isClient bool @@ -57,40 +58,45 @@ func (c *Conn) GetTeeConn() *TeeConn { } -//return c.Conn.ConnectionState().NegotiatedProtocol +// return c.Conn.ConnectionState().NegotiatedProtocol func (c *Conn) GetAlpn() string { - if c.tlsPackageType == utlsPackage { + switch c.tlsPackageType { + case utlsPackage: cc := (*utls.Conn)(c.ptr) if cc == nil { return "" } return cc.ConnectionState().NegotiatedProtocol - - } else { + case official: cc := (*tls.Conn)(c.ptr) if cc == nil { return "" } return cc.ConnectionState().NegotiatedProtocol - } + } + return "" } func (c *Conn) GetSni() string { - if c.tlsPackageType == utlsPackage { + + switch c.tlsPackageType { + case utlsPackage: cc := (*utls.Conn)(c.ptr) if cc == nil { return "" } return cc.ConnectionState().ServerName - } else { + case official: cc := (*tls.Conn)(c.ptr) if cc == nil { return "" } return cc.ConnectionState().ServerName + } + return "" }