Files
go-libp2p/_examples/nat-tester.go
2014-11-05 13:04:22 +01:00

68 lines
1.4 KiB
Go

package main
import (
"fmt"
"log"
"net/http"
"time"
"github.com/fd/go-nat"
)
func main() {
nat, err := nat.DiscoverGateway()
if err != nil {
log.Fatalf("error: %s", err)
}
log.Printf("nat type: %s", nat.Type())
daddr, err := nat.GetDeviceAddress()
if err != nil {
log.Fatalf("error: %s", err)
}
log.Printf("device address: %s", daddr)
iaddr, err := nat.GetInternalAddress()
if err != nil {
log.Fatalf("error: %s", err)
}
log.Printf("internal address: %s", iaddr)
eaddr, err := nat.GetExternalAddress()
if err != nil {
log.Fatalf("error: %s", err)
}
log.Printf("external address: %s", eaddr)
eport, err := nat.AddPortMapping("tcp", 3080, "http", 60)
if err != nil {
log.Fatalf("error: %s", err)
}
log.Printf("test-page: http://%s:%d/", eaddr, eport)
go func() {
for {
time.Sleep(30 * time.Second)
_, err = nat.AddPortMapping("tcp", 3080, "http", 60)
if err != nil {
log.Fatalf("error: %s", err)
}
}
}()
defer nat.DeletePortMapping("txp", 3080)
http.ListenAndServe(":3080", http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
rw.Header().Set("Content-Type", "text/plain")
rw.WriteHeader(200)
fmt.Fprintf(rw, "Hello there!\n")
fmt.Fprintf(rw, "nat type: %s\n", nat.Type())
fmt.Fprintf(rw, "device address: %s\n", daddr)
fmt.Fprintf(rw, "internal address: %s\n", iaddr)
fmt.Fprintf(rw, "external address: %s\n", eaddr)
fmt.Fprintf(rw, "test-page: http://%s:%d/\n", eaddr, eport)
}))
}