From 26b21d1fcb28b57e32a17bdf1c8ff45a6b619ceb Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Wed, 11 Mar 2015 02:41:41 +1100 Subject: [PATCH] Apply IP blocklist to trackers --- client.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/client.go b/client.go index 5701834e..2f3a37f2 100644 --- a/client.go +++ b/client.go @@ -29,6 +29,7 @@ import ( "math/big" mathRand "math/rand" "net" + "net/url" "os" "path/filepath" "sort" @@ -2100,7 +2101,37 @@ func (cl *Client) announceTorrentDHT(t *torrent, impliedPort bool) { } } +func (cl *Client) trackerBlockedUnlocked(tr tracker.Client) (blocked bool, err error) { + url_, err := url.Parse(tr.URL()) + if err != nil { + return + } + host, _, err := net.SplitHostPort(url_.Host) + if err != nil { + host = url_.Host + } + addr, err := net.ResolveIPAddr("ip", host) + if err != nil { + return + } + cl.mu.Lock() + if cl.ipBlockList != nil { + if cl.ipBlockRange(addr.IP) != nil { + blocked = true + } + } + cl.mu.Unlock() + return +} + func (cl *Client) announceTorrentSingleTracker(tr tracker.Client, req *tracker.AnnounceRequest, t *torrent) error { + blocked, err := cl.trackerBlockedUnlocked(tr) + if err != nil { + return fmt.Errorf("error determining if tracker blocked: %s", err) + } + if blocked { + return fmt.Errorf("tracker blocked: %s", tr) + } if err := tr.Connect(); err != nil { return fmt.Errorf("error connecting: %s", err) } -- 2.48.1