diff options
| author | Brad Fitzpatrick <bradfitz@tailscale.com> | 2025-06-19 10:29:32 -0700 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@tailscale.com> | 2025-06-19 10:29:32 -0700 |
| commit | f6a1b149df3ff08408a0ad0b2d41f2a7a85200cd (patch) | |
| tree | 0a899dc30b1410b249a0da526f21545f72a8f9ae /cmd/tinyderpclient | |
| parent | 583f740c0b583081b0c1a39f92e349c49c0c4a41 (diff) | |
| download | tailscale-bradfitz/tinyderpclient.tar.xz tailscale-bradfitz/tinyderpclient.zip | |
Change-Id: Idcc360abdcc723fcf5ccef9d539056c68b7aa2b2
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
Diffstat (limited to 'cmd/tinyderpclient')
| -rw-r--r-- | cmd/tinyderpclient/tinyderpclient.go | 39 |
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) + } +} |
