Giter Club home page Giter Club logo

gt's People

Contributors

adachiandshimamura avatar aospace-admin avatar drakenlibra avatar huwf5 avatar vyloy avatar wasdxie avatar yinjiayi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gt's Issues

TCP 内网穿透实测失败,有什么注意点?

Hi :
根据文档,我尝试了下TCP 内网穿透这个示例 ,主要需求是通过ssh公网的某一个端口,访问内网, 实测一直提示ssh超时,

我的命令分别为:
./release/linux-amd64-server -addr 9527 -id id1 -secret secret1 -tcpNumber 1 -tcpRange 1024-65535
./release/linux-amd64-client -local http://127.0.0.1:22 -remote tcp://42.193.223.69:9527 -id id1 -secret secret1 -remoteTCPPort 2222

image

对于页面提的几个建议

1.那这块如果不加server.yaml 默认使用127.0.0.1:8000 默认只能本机访问了吧,外网得话会无法访问,这一块希望在文档中能体现说明一下
2.希望页面端能添加修改端口得功能
3.希望页面端能添加修改域名证书得功能
4.希望页面端能添加页面多用户登录的功能,就比如我想共享给其他人使用 又不想给admin得账户 ,可以添加一个其他账户供使用

Full HTTP Proxy protocol support for a "Home VPN"

I need a full HTTP Proxy over a websocket and i noticed GT is pretty similar.

The use-case here for a full proxy is you are traveling and you want to be able to watch TV from home. Sure I can use WireGuard or something like WebMesh which is a zero-config way of setting up a VPN. But... what if i want to access this VPN with a websocket?

GT will only forward to a specific host, but the HTTP Proxy protocol lets the client specify any host so that they can browse the web without censorship or being tracked. And this could work with the current GT web tunnel.

There is also the wssocks project which is Socks5 over websockets - in golang, which might be useful here?

Thoughts?

远程协作场景需求请教

远程协作场景:
1,有一台公网服务器,可以按需部署软件,域名server.example.com已解析关联,所有人都可以通过这个地址来访问。
2,员工远程办公,假设都在做web服务开发,每个人负责不同的部分。当他们完成自己的工作后,各自都在本地发布自己的服务。
3,服务有时需要相互调用,但由于环境各异不能直接互相访问,所以希望利用服务器作为中介,帮助它们相互通信。
4,有些员工在同一个办公室,他们希望能够在不改变开发方式的条件下,服务能自动发现并直接在局域网内部相互通信,而不是完全通过服务器,以提高速度。(这是画龙点睛功能,如果太难实现就不必坚持)
5,最后,测试人员或老板想要检查工作效果,他们不安装任何软件,只需在浏览器中访问 http(s)://server.example.com 就能查看系统的运行情况。

整个就像个把复杂的网络透明化的开发协作平台,此种需求是否有可能达成?

[Feature] Support to be built and run on macOS

Currently, GT can only be built and run on Linux or Linux Container.

It would be great if GT supports to be built and run on macOS.

PR for this feature from new contributor are welcome.

linux上gt编译失败

hi :

我在ubuntu 上编译gt ,

报如下错误:

ya@ya-linux:~/work/gt$ make gofumpt --version || go install mvdan.cc/gofumpt@latest v0.5.0 (go1.18.1) gofumpt -l -w ./conn/conn.go ./predef/version.go ./predef/release.go ./predef/const.go ./predef/debug.go ./util/rand.go ./util/portrange.go ./util/portrange_test.go ./util/blockvalue_test.go ./util/blockvalue.go ./config/position_test.go ./config/slice_test.go ./config/positionslice_test.go ./config/slice.go ./config/config.go ./config/config_test.go ./config/positionslice.go ./config/position.go ./logger/logger.go ./cmd/server/main.go ./cmd/client/main.go ./server/user_test.go ./server/tls_test.go ./server/sync/map_test.go ./server/sync/create.go ./server/sync/map_reference_test.go ./server/sync/map.go ./server/sync/map_bench_test.go ./server/server.go ./server/http.go ./server/client.go ./server/api/server.go ./server/tls.go ./server/config.go ./server/conn.go ./server/http_test.go ./client/release.go ./client/api/listener.go ./client/api/conn.go ./client/api/server.go ./client/task.go ./client/client.go ./client/webrtc/integrate_test.go ./client/webrtc/datachannel.go ./client/webrtc/icecandidate.go ./client/webrtc/speedtest/client/main.go ./client/webrtc/speedtest/echoServer/main.go ./client/webrtc/sessiondescription.go ./client/webrtc/logging.go ./client/webrtc/peerconnection.go ./client/client_test.go ./client/conn.go ./client/tcpforward.go ./client/idle.go ./client/task_test.go ./client/debug.go ./client/config.go ./client/peer.go ./pool/pool.go ./test/tls_test.go ./test/p2p_test.go ./test/tunnel_test.go ./test/integrate_test.go ./test/services_test.go golangci-lint --version || go install github.com/golangci/golangci-lint/cmd/[email protected] golangci-lint has version (devel) built with go1.20.7 from (unknown, mod sum: "") on (unknown) golangci-lint run \ --skip-dirs client/std \ --skip-dirs dep \ --skip-dirs bufio \ --skip-dirs logger/file-rotatelogs \ --skip-dirs build \ --skip-dirs release \ --exclude 'SA6002: argument should be pointer-like to avoid allocations' \ --exclude 'S1000: should use a simple channel send/receive instead ofselectwith a single case' client/api/server.go:56:12: s.Serve undefined (type *Server has no field or method Serve) (typecheck) err := s.Serve(s.Listener) ^ client/webrtc/datachannel.go:21:8: could not import C (cgo preprocessing failed) (typecheck) import "C" ^ client/webrtc/datachannel.go:77:11: undefined: pointer (typecheck) d, ok := pointer.Restore(userData).(*DataChannel) ^ client/webrtc/datachannel.go:90:11: undefined: pointer (typecheck) d, ok := pointer.Restore(userData).(*DataChannel) ^ client/webrtc/datachannel.go:106:11: undefined: pointer (typecheck) d, ok := pointer.Restore(userData).(*DataChannel) ^ logger/logger.go:144:6: l.Error undefined (type *Logger has no field or method Error) (typecheck) l.Error().Err(err).Msg("failed to close sentry") ^ logger/logger.go:150:6: l.Error undefined (type *Logger has no field or method Error) (typecheck) l.Error().Err(err).Msg("failed to sync log file") ^ logger/logger.go:154:6: l.Error undefined (type *Logger has no field or method Error) (typecheck) l.Error().Err(err).Msg("failed to close log file") ^ server/api/server.go:153:27: s.Addr undefined (type *Server has no field or method Addr) (typecheck) "-local", "http://" + s.Addr, ^ client/client.go:415:5: t.SendForceCloseSignal undefined (type *conn has no field or method SendForceCloseSignal) (typecheck) t.SendForceCloseSignal() ^ client/client.go:439:5: t.SendCloseSignal undefined (type *conn has no field or method SendCloseSignal) (typecheck) t.SendCloseSignal() ^ client/client.go:467:9: result.Logger undefined (type *conn has no field or method Logger) (typecheck) result.Logger = c.Logger.With().Uint("connID", connID).Logger() ^ client/client.go:783:14: t.Write undefined (type *conn has no field or method Write) (typecheck) _, err = t.Write(buf[:n+i]) ^ client/client.go:787:5: t.Logger undefined (type *conn has no field or method Logger) (typecheck) t.Logger.Info().Msg("sent reload info") ^ client/conn.go:63:13: c.Conn undefined (type *conn has no field or method Conn) (typecheck) _, err = c.Conn.Write(buf[:bufIndex+n]) ^ client/conn.go:139:5: c.Logger undefined (type *conn has no field or method Logger) (typecheck) c.Logger.Debug().Err(err).Msg("failed to send ping signal") ^ client/conn.go:145:8: c.Closing undefined (type *conn has no field or method Closing) (typecheck) if !c.Closing.CompareAndSwap(0, 1) { ^ client/conn.go:171:5: c.Logger undefined (type *conn has no field or method Logger) (typecheck) c.Logger.Info().Err(err).Bool("isClosing", isClosing).Uint64("finishedTasks", c.finishedTasks.Load()). ^ client/conn.go:174:20: c.Reader undefined (type *conn has no field or method Reader) (typecheck) pool.PutReader(c.Reader) ^ client/conn.go:178:15: c.Reader undefined (type *conn has no field or method Reader) (typecheck) r.Reader = c.Reader ^ client/conn.go:188:12: c.Conn undefined (type *conn has no field or method Conn) (typecheck) err = c.Conn.SetReadDeadline(time.Now().Add(timeout)) ^ client/conn.go:194:22: c.Reader undefined (type *conn has no field or method Reader) (typecheck) peekBytes, err = c.Reader.Peek(4) ^ client/conn.go:198:7: c.Logger undefined (type *conn has no field or method Logger) (typecheck) c.Logger.Info().Bool("isClosing", isClosing).Uint64("finishedTasks", c.finishedTasks.Load()). ^ client/conn.go:222:8: c.SendCloseSignal undefined (type *conn has no field or method SendCloseSignal) (typecheck) c.SendCloseSignal() ^ client/peer.go:184:16: c.Write undefined (type *conn has no field or method Write) (typecheck) _, wErr = c.Write(buf[:6]) ^ client/peer.go:213:15: c.Write undefined (type *conn has no field or method Write) (typecheck) _, wErr = c.Write(buf[:l]) ^ client/peer.go:220:13: c.Conn undefined (type *conn has no field or method Conn) (typecheck) wErr = c.Conn.SetReadDeadline(dl) ^ client/task.go:246:13: c.TasksCount undefined (type *conn has no field or method TasksCount) (typecheck) count := c.TasksCount.Add(1) ^ client/task.go:255:16: c.Write undefined (type *conn has no field or method Write) (typecheck) _, wErr = c.Write(buf[:6]) ^ client/task.go:264:8: c.TasksCount undefined (type *conn has no field or method TasksCount) (typecheck) if c.TasksCount.Add(^uint32(0)) == 0 { ^ client/task.go:266:9: c.IsClosing undefined (type *conn has no field or method IsClosing) (typecheck) if c.IsClosing() { ^ client/task.go:267:7: c.SendForceCloseSignal undefined (type *conn has no field or method SendForceCloseSignal) (typecheck) c.SendForceCloseSignal() ^ server/server.go:64:16: undefined: turn (typecheck) turnServer *turn.Server ^ server/client.go:103:13: t.SendErrorSignalReachedMaxConnections undefined (type *conn has no field or method SendErrorSignalReachedMaxConnections) (typecheck) if e := t.SendErrorSignalReachedMaxConnections(); e != nil { ^ server/client.go:104:6: t.Logger undefined (type *conn has no field or method Logger) (typecheck) t.Logger.Error().Err(e).Msg("failed to SendErrorSignalReachedMaxConnections") ^ server/client.go:114:5: t.Logger undefined (type *conn has no field or method Logger) (typecheck) t.Logger.Info(). ^ server/client.go:119:11: tunnel.Logger undefined (type *conn has no field or method Logger) (typecheck) tunnel.Logger.Info(). ^ server/client.go:124:12: tunnel.Logger undefined (type *conn has no field or method Logger) (typecheck) tunnel.Logger.Info(). ^ server/client.go:133:14: t.SendErrorSignalDifferentConfigClientConnected undefined (type *conn has no field or method SendErrorSignalDifferentConfigClientConnected) (typecheck) if e := t.SendErrorSignalDifferentConfigClientConnected(); e != nil { ^ server/client.go:166:11: tunnel.Logger undefined (type *conn has no field or method Logger) (typecheck) tunnel.Logger.Info(). ^ server/client.go:179:11: tunnel.SendCloseSignal undefined (type *conn has no field or method SendCloseSignal) (typecheck) tunnel.SendCloseSignal() ^ server/client.go:269:9: conn.TasksCount undefined (type *conn has no field or method TasksCount) (typecheck) conn.TasksCount.Add(1) ^ server/client.go:275:14: t.TasksCount undefined (type *conn has no field or method TasksCount) (typecheck) count := t.TasksCount.Load() ^ server/client.go:278:9: conn.TasksCount undefined (type *conn has no field or method TasksCount) (typecheck) conn.TasksCount.Add(1) ^ server/client.go:287:8: conn.TasksCount undefined (type *conn has no field or method TasksCount) (typecheck) conn.TasksCount.Add(1) ^ server/client.go:296:6: t.SendForceCloseSignal undefined (type *conn has no field or method SendForceCloseSignal) (typecheck) t.SendForceCloseSignal() ^ server/client.go:297:6: t.Close undefined (type *conn has no field or method Close) (typecheck) t.Close() ^ server/client.go:308:5: t.Shutdown undefined (type *conn has no field or method Shutdown) (typecheck) t.Shutdown() ^ server/client.go:434:10: conn.Logger undefined (type *conn has no field or method Logger) (typecheck) conn.Logger.Error().Err(err).Msg("openSpecifiedTCPPort") ^ server/conn.go:67:5: nc.Logger undefined (type *conn has no field or method Logger) (typecheck) nc.Logger = s.Logger.With(). ^ make: *** [Makefile:74:golangci-lint] 错误 1 ya@ya-linux:~/work/gt$ ^C ya@ya-linux:~/work/gt$ ya@ya-linux:~/work/gt$ ya@ya-linux:~/work/gt$ ya@ya-linux:~/work/gt$ ya@ya-linux:~/work/gt$ ya@ya-linux:~/work/gt$ make release sh -c "command -v gn" make: *** [Makefile:144:check_webrtc_dependencies] 错误 127 ya@ya-linux:~/work/gt$ make -j8 gofumpt --version || go install mvdan.cc/gofumpt@latest golangci-lint --version || go install github.com/golangci/golangci-lint/cmd/[email protected] v0.5.0 (go1.18.1) gofumpt -l -w ./conn/conn.go ./predef/version.go ./predef/release.go ./predef/const.go ./predef/debug.go ./util/rand.go ./util/portrange.go ./util/portrange_test.go ./util/blockvalue_test.go ./util/blockvalue.go ./config/position_test.go ./config/slice_test.go ./config/positionslice_test.go ./config/slice.go ./config/config.go ./config/config_test.go ./config/positionslice.go ./config/position.go ./logger/logger.go ./cmd/server/main.go ./cmd/client/main.go ./server/user_test.go ./server/tls_test.go ./server/sync/map_test.go ./server/sync/create.go ./server/sync/map_reference_test.go ./server/sync/map.go ./server/sync/map_bench_test.go ./server/server.go ./server/http.go ./server/client.go ./server/api/server.go ./server/tls.go ./server/config.go ./server/conn.go ./server/http_test.go ./client/release.go ./client/api/listener.go ./client/api/conn.go ./client/api/server.go ./client/task.go ./client/client.go ./client/webrtc/integrate_test.go ./client/webrtc/datachannel.go ./client/webrtc/icecandidate.go ./client/webrtc/speedtest/client/main.go ./client/webrtc/speedtest/echoServer/main.go ./client/webrtc/sessiondescription.go ./client/webrtc/logging.go ./client/webrtc/peerconnection.go ./client/client_test.go ./client/conn.go ./client/tcpforward.go ./client/idle.go ./client/task_test.go ./client/debug.go ./client/config.go ./client/peer.go ./pool/pool.go ./test/tls_test.go ./test/p2p_test.go ./test/tunnel_test.go ./test/integrate_test.go ./test/services_test.go sh -c "command -v gn" git submodule update --init --recursive make: *** [Makefile:144:check_webrtc_dependencies] 错误 127 make: *** 正在等待未完成的任务.... golangci-lint has version (devel) built with go1.20.7 from (unknown, mod sum: "") on (unknown) golangci-lint run \ --skip-dirs client/std \ --skip-dirs dep \ --skip-dirs bufio \ --skip-dirs logger/file-rotatelogs \ --skip-dirs build \ --skip-dirs release \ --exclude 'SA6002: argument should be pointer-like to avoid allocations' \ --exclude 'S1000: should use a simple channel send/receive instead ofselectwith a single case' client/api/server.go:56:12: s.Serve undefined (type *Server has no field or method Serve) (typecheck) err := s.Serve(s.Listener) ^ client/webrtc/datachannel.go:21:8: could not import C (cgo preprocessing failed) (typecheck) import "C" ^ client/webrtc/datachannel.go:77:11: undefined: pointer (typecheck) d, ok := pointer.Restore(userData).(*DataChannel) ^ client/webrtc/datachannel.go:90:11: undefined: pointer (typecheck) d, ok := pointer.Restore(userData).(*DataChannel) ^ client/webrtc/datachannel.go:106:11: undefined: pointer (typecheck) d, ok := pointer.Restore(userData).(*DataChannel) ^ logger/logger.go:144:6: l.Error undefined (type *Logger has no field or method Error) (typecheck) l.Error().Err(err).Msg("failed to close sentry") ^ logger/logger.go:150:6: l.Error undefined (type *Logger has no field or method Error) (typecheck) l.Error().Err(err).Msg("failed to sync log file") ^ logger/logger.go:154:6: l.Error undefined (type *Logger has no field or method Error) (typecheck) l.Error().Err(err).Msg("failed to close log file") ^ server/api/server.go:153:27: s.Addr undefined (type *Server has no field or method Addr) (typecheck) "-local", "http://" + s.Addr, ^ client/client.go:415:5: t.SendForceCloseSignal undefined (type *conn has no field or method SendForceCloseSignal) (typecheck) t.SendForceCloseSignal() ^ client/client.go:439:5: t.SendCloseSignal undefined (type *conn has no field or method SendCloseSignal) (typecheck) t.SendCloseSignal() ^ client/client.go:467:9: result.Logger undefined (type *conn has no field or method Logger) (typecheck) result.Logger = c.Logger.With().Uint("connID", connID).Logger() ^ client/client.go:783:14: t.Write undefined (type *conn has no field or method Write) (typecheck) _, err = t.Write(buf[:n+i]) ^ client/client.go:787:5: t.Logger undefined (type *conn has no field or method Logger) (typecheck) t.Logger.Info().Msg("sent reload info") ^ client/conn.go:63:13: c.Conn undefined (type *conn has no field or method Conn) (typecheck) _, err = c.Conn.Write(buf[:bufIndex+n]) ^ client/conn.go:139:5: c.Logger undefined (type *conn has no field or method Logger) (typecheck) c.Logger.Debug().Err(err).Msg("failed to send ping signal") ^ client/conn.go:145:8: c.Closing undefined (type *conn has no field or method Closing) (typecheck) if !c.Closing.CompareAndSwap(0, 1) { ^ client/conn.go:171:5: c.Logger undefined (type *conn has no field or method Logger) (typecheck) c.Logger.Info().Err(err).Bool("isClosing", isClosing).Uint64("finishedTasks", c.finishedTasks.Load()). ^ client/conn.go:174:20: c.Reader undefined (type *conn has no field or method Reader) (typecheck) pool.PutReader(c.Reader) ^ client/conn.go:178:15: c.Reader undefined (type *conn has no field or method Reader) (typecheck) r.Reader = c.Reader ^ client/conn.go:188:12: c.Conn undefined (type *conn has no field or method Conn) (typecheck) err = c.Conn.SetReadDeadline(time.Now().Add(timeout)) ^ client/conn.go:194:22: c.Reader undefined (type *conn has no field or method Reader) (typecheck) peekBytes, err = c.Reader.Peek(4) ^ client/conn.go:198:7: c.Logger undefined (type *conn has no field or method Logger) (typecheck) c.Logger.Info().Bool("isClosing", isClosing).Uint64("finishedTasks", c.finishedTasks.Load()). ^ client/conn.go:222:8: c.SendCloseSignal undefined (type *conn has no field or method SendCloseSignal) (typecheck) c.SendCloseSignal() ^ client/peer.go:184:16: c.Write undefined (type *conn has no field or method Write) (typecheck) _, wErr = c.Write(buf[:6]) ^ client/peer.go:213:15: c.Write undefined (type *conn has no field or method Write) (typecheck) _, wErr = c.Write(buf[:l]) ^ client/peer.go:220:13: c.Conn undefined (type *conn has no field or method Conn) (typecheck) wErr = c.Conn.SetReadDeadline(dl) ^ client/task.go:246:13: c.TasksCount undefined (type *conn has no field or method TasksCount) (typecheck) count := c.TasksCount.Add(1) ^ client/task.go:255:16: c.Write undefined (type *conn has no field or method Write) (typecheck) _, wErr = c.Write(buf[:6]) ^ client/task.go:264:8: c.TasksCount undefined (type *conn has no field or method TasksCount) (typecheck) if c.TasksCount.Add(^uint32(0)) == 0 { ^ client/task.go:266:9: c.IsClosing undefined (type *conn has no field or method IsClosing) (typecheck) if c.IsClosing() { ^ client/task.go:267:7: c.SendForceCloseSignal undefined (type *conn has no field or method SendForceCloseSignal) (typecheck) c.SendForceCloseSignal() ^ server/server.go:64:16: undefined: turn (typecheck) turnServer *turn.Server ^ server/client.go:103:13: t.SendErrorSignalReachedMaxConnections undefined (type *conn has no field or method SendErrorSignalReachedMaxConnections) (typecheck) if e := t.SendErrorSignalReachedMaxConnections(); e != nil { ^ server/client.go:104:6: t.Logger undefined (type *conn has no field or method Logger) (typecheck) t.Logger.Error().Err(e).Msg("failed to SendErrorSignalReachedMaxConnections") ^ server/client.go:114:5: t.Logger undefined (type *conn has no field or method Logger) (typecheck) t.Logger.Info(). ^ server/client.go:119:11: tunnel.Logger undefined (type *conn has no field or method Logger) (typecheck) tunnel.Logger.Info(). ^ server/client.go:124:12: tunnel.Logger undefined (type *conn has no field or method Logger) (typecheck) tunnel.Logger.Info(). ^ server/client.go:133:14: t.SendErrorSignalDifferentConfigClientConnected undefined (type *conn has no field or method SendErrorSignalDifferentConfigClientConnected) (typecheck) if e := t.SendErrorSignalDifferentConfigClientConnected(); e != nil { ^ server/client.go:166:11: tunnel.Logger undefined (type *conn has no field or method Logger) (typecheck) tunnel.Logger.Info(). ^ server/client.go:179:11: tunnel.SendCloseSignal undefined (type *conn has no field or method SendCloseSignal) (typecheck) tunnel.SendCloseSignal() ^ server/client.go:269:9: conn.TasksCount undefined (type *conn has no field or method TasksCount) (typecheck) conn.TasksCount.Add(1) ^ server/client.go:275:14: t.TasksCount undefined (type *conn has no field or method TasksCount) (typecheck) count := t.TasksCount.Load() ^ server/client.go:278:9: conn.TasksCount undefined (type *conn has no field or method TasksCount) (typecheck) conn.TasksCount.Add(1) ^ server/client.go:287:8: conn.TasksCount undefined (type *conn has no field or method TasksCount) (typecheck) conn.TasksCount.Add(1) ^ server/client.go:296:6: t.SendForceCloseSignal undefined (type *conn has no field or method SendForceCloseSignal) (typecheck) t.SendForceCloseSignal() ^ server/client.go:297:6: t.Close undefined (type *conn has no field or method Close) (typecheck) t.Close() ^ server/client.go:308:5: t.Shutdown undefined (type *conn has no field or method Shutdown) (typecheck) t.Shutdown() ^ server/client.go:434:10: conn.Logger undefined (type *conn has no field or method Logger) (typecheck) conn.Logger.Error().Err(err).Msg("openSpecifiedTCPPort") ^ server/conn.go:67:5: nc.Logger undefined (type *conn has no field or method Logger) (typecheck) nc.Logger = s.Logger.With(). ^ make: *** [Makefile:74:golangci-lint] 错误 1

【开源之夏有奖活动】Connect 子命令功能开发

报名地址:https://summer-ospp.ac.cn/org/prodetail/24c570189?lang=zh&list=pro

项目名称

AO.space GT Connect 子命令功能开发

项目描述

AO.space GT 是一款注重稳定性和性能的高效 WebSocket(s)/HTTP(s)/TCP 代理工具,目前具备 server 和 client 子命令,支持 NAT 穿透。本项目旨在开发一个新的 connect 子命令,该命令将扩展 GT 的功能,使其能够与 client 子命令建立 P2P 连接。这一功能的实现将显著提高数据传输效率,降低服务器负载和网络延迟。connect 子命令将智能选择是通过服务中转还是直接 P2P 连接,以确保数据安全、高效地传输至客户端。

项目难度

进阶

产出要求

  • 成功开发并集成 AO.space GT 的 connect 子命令。
  • 完成对应的单元测试和集成测试,确保功能的稳定性和可靠性。
  • 编写详尽的设计文档和用户指南,方便用户理解和使用新功能。
  • 确保项目能够在 openEuler 操作系统和 RISC-V 架构上顺畅运行。

技术要求

  • 熟悉 Rust 和 C/C++ 编程语言。
  • 熟练使用 Tokio 异步运行时和 WebRTC 技术。
  • 对网络通信原理和相关协议有深入理解。
  • 了解 Golang 编程语言。
  • 了解 Github 持续集成/持续部署(CI/CD)流程。
  • 对 RISC-V 架构有一定了解。

项目源代码仓库

AO.space GT Github 仓库

Project Name

AO.space GT Connect Subcommand Development

Project Description

AO.space GT is a high-performance WebSocket(s)/HTTP(s)/TCP proxy tool with a focus on stability and performance. It currently features server and client subcommands and supports NAT traversal. This project aims to develop a new connect subcommand that will expand the capabilities of GT, enabling it to establish P2P connections with the client subcommand. The implementation of this feature will significantly enhance data transfer efficiency, reduce server load, and decrease network latency. The connect subcommand will intelligently select whether to use service relay or direct P2P connection to ensure that data is securely and efficiently transmitted to the client.

Project Difficulty

Advanced

Deliverables

  • Successful development and integration of the AO.space GT connect subcommand.
  • Completion of corresponding unit and integration tests to ensure the stability and reliability of the feature.
  • Authoring of comprehensive design documentation and user guides for easy understanding and utilization of the new functionality.
  • Ensuring the project runs smoothly on the openEuler operating system and RISC-V architecture.

Technical Requirements

  • Familiarity with Rust and C/C++ programming languages.
  • Familiarity with Tokio asynchronous runtime and WebRTC technology.
  • In-depth understanding of network communication principles and related protocols.
  • Knowledge of the Golang programming language.
  • Familiarity with Github Continuous Integration/Continuous Deployment (CI/CD) processes.
  • Understanding of the RISC-V architecture.

Project Source Code Repository

AO.space GT Github Repository

GT server and GT client develop web management functions

Description

To improve the user experience, we plan to add web management functions for GT server and GT client respectively, supporting: administrator login, connection status view, configuration management, pprof, etc.

Project output requirements

Project technical requirements

  • Familiarity with Golang, HTML5, Javascript, CSS3
  • Familiarity with vue3, element-ui framework
  • Familiar with front-end page adaptation

Open Source Summer Official Website

GT server 与 GT client 开发 Web 管理功能

描述

为了提高用户体验,计划分别为 GT server 和 GT client 增加 Web 管理功能,支持:管理员登录、连接状态查看,配置管理,pprof等

项目产出要求

项目技术要求

  • 熟悉 Golang、HTML5、Javascript、CSS3
  • 熟悉 vue3、element-ui 框架
  • 熟悉前端页面适配GT server 与 GT client 开发 Web 管理功能

开源之夏官网

GT server and GT client connection pools add support for QUIC, which is compatible with existing TCP protocols and implements certain intelligent switching policies

Description

The connection between GT server and GT client is currently based on the TCP protocol. In order to improve the performance in long distance, high latency and high packet loss scenarios (mainly multinational scenarios), it is necessary to add support for the QUIC protocol based connection method and to consider supporting the BBR congestion control algorithm; and to consider adding some intelligent switching strategies to improve the user experience.

Project output requirements

  • Design and implementation of additional connection methods that support the QUIC protocol, with support for BBR congestion control algorithms
  • Design and implement intelligent switching strategies for multiple connection methods in different scenarios to improve transmission efficiency
  • Write unit tests and integration tests
  • Write appropriate design and usage documentation
  • Code compliance with specifications: https://google.github.io/styleguide/go/, https://github.com/uber-go/guide

Project technical requirements

  • Familiarity with Golang, C/C++
  • Familiarity with QUIC protocol
  • Familiarity with BBR congestion control algorithm
  • Familiarity with TCP, UDP protocols
  • Familiarity with the use of multithreading
  • Knowledge of code optimization for high concurrency transmission scenarios

Open Source Summer Official Website

GT server 与 GT client 连接池增加支持 QUIC,与现有的的 TCP 协议实现兼容及实现智能切换策略

描述

目前 GT server 与 GT client 之间的连接是基于 TCP 协议实现的,为了提高在远距离,高延迟,高丢包率场景下的传输的表现(主要是跨国场景),增加支持基于 QUIC 协议的连接方式,需要考虑支持 BBR 拥塞控制算法;并可以考虑增加一定的智能切换策略,提高用户体验。

项目产出要求

  • 设计并实现增加支持基于 QUIC 协议的连接方式,需要支持 BBR 拥塞控制算法
  • 设计并实现多种连接方式在不同场景下,通过智能切换策略,提升传输效率
  • 编写相应的单元测试和集成测试
  • 编写相应的设计和使用文档
  • 代码符合规范: https://google.github.io/styleguide/go/、https://github.com/uber-go/guide

项目技术要求

  • 熟悉 Golang、C/C++
  • 熟悉 QUIC 协议
  • 熟悉 BBR 拥塞控制算法
  • 熟悉 TCP、UDP 协议
  • 熟悉使用多线程
  • 熟悉高并发传输场景下代码优化GT server 与 GT client 连接池增加支持 QUIC,与现有的的 TCP 协议实现兼容及实现智能切换策略

开源之夏官网

使用不太明确

从测试结果来看,或许gt在未来能取代frp,但网上的教程太少了,md文档里提供的配置不太明确,能提供简易的例子或提供docker镜像最好了,现在使用gt相较于frp学习成本较高

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.