summaryrefslogtreecommitdiffhomepage
path: root/cmd/tinyderpclient/tinyderpclient.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/tinyderpclient/tinyderpclient.go')
-rw-r--r--cmd/tinyderpclient/tinyderpclient.go39
1 files changed, 39 insertions, 0 deletions
diff --git a/cmd/tinyderpclient/tinyderpclient.go b/cmd/tinyderpclient/tinyderpclient.go
new file mode 100644
index 000000000..746a216ff
--- /dev/null
+++ b/cmd/tinyderpclient/tinyderpclient.go
@@ -0,0 +1,39 @@
+package main
+
+import (
+ "context"
+ "encoding/json"
+ "log"
+ "maps"
+ "net/http"
+ "slices"
+
+ "tailscale.com/derp/derphttp"
+ "tailscale.com/net/netmon"
+ "tailscale.com/tailcfg"
+ "tailscale.com/types/key"
+)
+
+func main() {
+ dm := &tailcfg.DERPMap{}
+ res, err := http.Get("https://controlplane.tailscale.com/derpmap/default")
+ if err != nil {
+ log.Fatalf("fetching DERPMap: %v", err)
+ }
+ defer res.Body.Close()
+ if err := json.NewDecoder(res.Body).Decode(dm); err != nil {
+ log.Fatalf("decoding DERPMap: %v", err)
+ }
+
+ region := slices.Sorted(maps.Keys(dm.Regions))[0]
+
+ netMon := netmon.NewStatic()
+ rc := derphttp.NewRegionClient(key.NewNode(), log.Printf, netMon, func() *tailcfg.DERPRegion {
+ return dm.Regions[region]
+ })
+ defer rc.Close()
+
+ if err := rc.Connect(context.Background()); err != nil {
+ log.Fatalf("rc.Connect: %v", err)
+ }
+}