diff --git a/server/go.mod b/server/go.mod index 8cb9c58..569f8b3 100644 --- a/server/go.mod +++ b/server/go.mod @@ -12,6 +12,7 @@ require ( github.com/anacrolix/dms v1.4.0 github.com/anacrolix/log v0.13.1 github.com/anacrolix/missinggo v1.3.0 + github.com/anacrolix/publicip v0.2.0 github.com/anacrolix/torrent v1.43.1 github.com/gin-contrib/cors v1.3.1 github.com/gin-contrib/location v0.0.2 diff --git a/server/go.sum b/server/go.sum index 50fe36b..b5ffe10 100644 --- a/server/go.sum +++ b/server/go.sum @@ -66,6 +66,8 @@ github.com/anacrolix/mmsg v1.0.0 h1:btC7YLjOn29aTUAExJiVUhQOuf/8rhm+/nWCMAnL3Hg= github.com/anacrolix/mmsg v1.0.0/go.mod h1:x8kRaJY/dCrY9Al0PEcj1mb/uFHwP6GCJ9fLl4thEPc= github.com/anacrolix/multiless v0.3.0 h1:5Bu0DZncjE4e06b9r1Ap2tUY4Au0NToBP5RpuEngSis= github.com/anacrolix/multiless v0.3.0/go.mod h1:TrCLEZfIDbMVfLoQt5tOoiBS/uq4y8+ojuEVVvTNPX4= +github.com/anacrolix/publicip v0.2.0 h1:n/BmRxXRlOT/wQFd6Xhu57r9uTU+Xvb9MyEkLooh3TU= +github.com/anacrolix/publicip v0.2.0/go.mod h1:67G1lVkLo8UjdEcJkwScWVTvlJ35OCDsRJoWXl/wi4g= github.com/anacrolix/stm v0.2.0/go.mod h1:zoVQRvSiGjGoTmbM0vSLIiaKjWtNPeTvXUSdJQA4hsg= github.com/anacrolix/stm v0.3.0 h1:peQncJSNJtk1YBrFbW0DLKYqll+sa0kOk8EvXRcO+wA= github.com/anacrolix/stm v0.3.0/go.mod h1:spImf/rXwiAUoYYJK1YCZeWkpaHZ3kzjGFjwK5OStfU= diff --git a/server/torr/btserver.go b/server/torr/btserver.go index bd88442..2f8d78d 100644 --- a/server/torr/btserver.go +++ b/server/torr/btserver.go @@ -1,12 +1,14 @@ package torr import ( + "context" "fmt" "log" "net" "strconv" "sync" + "github.com/anacrolix/publicip" "github.com/anacrolix/torrent" "github.com/anacrolix/torrent/metainfo" @@ -58,7 +60,7 @@ func (bt *BTServer) Connect() error { bt.mu.Lock() defer bt.mu.Unlock() var err error - bt.configure() + bt.configure(context.TODO()) bt.client, err = torrent.NewClient(bt.config) bt.torrents = make(map[metainfo.Hash]*Torrent) InitApiHelper(bt) @@ -75,7 +77,7 @@ func (bt *BTServer) Disconnect() { } } -func (bt *BTServer) configure() { +func (bt *BTServer) configure(ctx context.Context) (err error) { blocklist, _ := utils.ReadBlockedIP() bt.config = torrent.NewDefaultClientConfig() @@ -147,7 +149,10 @@ func (bt *BTServer) configure() { } } if bt.config.PublicIp4 == nil { - bt.config.PublicIp4 = getPublicIp4() + bt.config.PublicIp4, err = publicip.Get4(ctx) + if err != nil { + log.Printf("error getting public ipv4 address: %v", err) + } } if bt.config.PublicIp4 != nil { log.Println("PublicIp4:", bt.config.PublicIp4) @@ -160,11 +165,15 @@ func (bt *BTServer) configure() { } } if bt.config.PublicIp6 == nil { - bt.config.PublicIp6 = getPublicIp6() + bt.config.PublicIp6, err = publicip.Get6(ctx) + if err != nil { + log.Printf("error getting public ipv6 address: %v", err) + } } if bt.config.PublicIp6 != nil { log.Println("PublicIp6:", bt.config.PublicIp6) } + return err } func (bt *BTServer) GetTorrent(hash torrent.InfoHash) *Torrent { diff --git a/server/web/server.go b/server/web/server.go index 1909c84..6a75da6 100644 --- a/server/web/server.go +++ b/server/web/server.go @@ -30,7 +30,7 @@ func Start(port string) { log.TLogln("Start TorrServer") ips := getLocalIps() if len(ips) > 0 { - log.TLogln("IPs:", ips) + log.TLogln("Local IPs:", ips) } err := BTS.Connect() if err != nil { @@ -102,7 +102,7 @@ func getLocalIps() []string { case *net.IPAddr: ip = v.IP } - if !ip.IsLoopback() { + if !ip.IsLoopback() && !ip.IsLinkLocalUnicast() && !ip.IsLinkLocalMulticast() { list = append(list, ip.String()) } }