package main
import (
"net"
"time"
"github.com/pion/stun"
log "github.com/sirupsen/logrus"
)
func main() {
request()
}
func request() {
lAddr := &net.UDPAddr{
Port: 51820,
}
d := &net.Dialer{
Timeout: 3 * time.Second,
LocalAddr: lAddr,
}
log.Infof("dialing stun server stun.l.google.com...")
conn, err := d.Dial("udp4", "stun.l.google.com:19302")
if err != nil {
log.Errorf("%v", err)
return
}
stunDialer(&conn)
}
func stunDialer(conn *net.Conn) {
c, err := stun.NewClient(*conn)
if err != nil {
log.Errorf("%v", err)
}
var xorAddr stun.XORMappedAddress
if err = c.Do(stun.MustBuild(stun.TransactionID, stun.BindingRequest), func(res stun.Event) {
if res.Error != nil {
log.Println(res.Error)
return
}
if getErr := xorAddr.GetFrom(res.Message); getErr != nil {
log.Println(getErr)
if err := c.Close(); err != nil {
log.Println(err)
return
}
return
}
log.Infof("external address %s and port: %d", xorAddr.IP, xorAddr.Port)
}); err != nil {
log.Debugf("%v", err)
return
}
if err := c.Close(); err != nil {
log.Debugf("%v", err)
return
}
}
Last active
November 17, 2022 16:53
-
-
Save nerdalert/bf319027368ad9313a83b209959d876b to your computer and use it in GitHub Desktop.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment