tailscale/cmd/stunc/stunc.go
Will Norris 71029cea2d all: update copyright and license headers
This updates all source files to use a new standard header for copyright
and license declaration.  Notably, copyright no longer includes a date,
and we now use the standard SPDX-License-Identifier header.

This commit was done almost entirely mechanically with perl, and then
some minimal manual fixes.

Updates #6865

Signed-off-by: Will Norris <will@tailscale.com>
2023-01-27 15:36:29 -08:00

58 lines
1.0 KiB
Go

// Copyright (c) Tailscale Inc & AUTHORS
// SPDX-License-Identifier: BSD-3-Clause
// Command stunc makes a STUN request to a STUN server and prints the result.
package main
import (
"log"
"net"
"os"
"tailscale.com/net/stun"
)
func main() {
log.SetFlags(0)
if len(os.Args) != 2 {
log.Fatalf("usage: %s <hostname>", os.Args[0])
}
host := os.Args[1]
uaddr, err := net.ResolveUDPAddr("udp", host+":3478")
if err != nil {
log.Fatal(err)
}
c, err := net.ListenUDP("udp", nil)
if err != nil {
log.Fatal(err)
}
txID := stun.NewTxID()
req := stun.Request(txID)
_, err = c.WriteToUDP(req, uaddr)
if err != nil {
log.Fatal(err)
}
var buf [1024]byte
n, raddr, err := c.ReadFromUDPAddrPort(buf[:])
if err != nil {
log.Fatal(err)
}
tid, saddr, err := stun.ParseResponse(buf[:n])
if err != nil {
log.Fatal(err)
}
if tid != txID {
log.Fatalf("txid mismatch: got %v, want %v", tid, txID)
}
log.Printf("sent addr: %v", uaddr)
log.Printf("from addr: %v", raddr)
log.Printf("stun addr: %v", saddr)
}