Files
mochi/bittorrent/request_test.go
Lawrence, Rendall 96653c45a3 add filter_private_ips option to discard private IPs.
Might be used when tracker is behind reverse proxy and one of provided
addresses in `real_ip_header` is private/local address.

Additional changes:

* check if provided address is not multicast/broadcast
* configure `http.Server.ReadHeaderTimeout` with `http.ReadTimeout` to mitigate Slowloris
* update dependencies
* minor docs fixes
2022-07-23 15:49:22 +03:00

71 lines
2.1 KiB
Go

package bittorrent
import (
"net/netip"
"testing"
"github.com/stretchr/testify/require"
)
var addresses = RequestAddresses{
RequestAddress{
Addr: netip.MustParseAddr("1.2.3.4"), // valid global
Provided: false,
}, RequestAddress{
Addr: netip.MustParseAddr("1.2.3.4"), // valid global (duplicated)
Provided: true,
}, RequestAddress{
Addr: netip.MustParseAddr("4.3.2.1"), // valid global
Provided: false,
}, RequestAddress{
Addr: netip.MustParseAddr("4.3.2.1"), // valid global (duplicated)
Provided: false,
}, RequestAddress{
Addr: netip.MustParseAddr("10.0.0.1"), // valid local
Provided: false,
}, RequestAddress{
Addr: netip.MustParseAddr("172.16.0.1"), // valid local
Provided: true,
}, RequestAddress{
Addr: netip.MustParseAddr("192.168.0.1"), // valid local
Provided: false,
}, RequestAddress{
Addr: netip.MustParseAddr("127.0.0.1"), // valid loopback
Provided: true,
}, RequestAddress{
Addr: netip.MustParseAddr("224.0.0.1"), // invalid (multicast)
Provided: true,
}, RequestAddress{
Addr: netip.MustParseAddr("233.252.0.1"), // invalid (multicast)
Provided: true,
}, RequestAddress{
Addr: netip.MustParseAddr("255.255.255.255"), // invalid (broadcast)
Provided: true,
}, RequestAddress{
Addr: netip.MustParseAddr("169.254.0.1"), // valid link-local
Provided: true,
}, RequestAddress{
Addr: netip.MustParseAddr("ff01::1"), // invalid (multicast)
Provided: true,
}, RequestAddress{
Addr: netip.MustParseAddr("fe80::1"), // valid link-local
Provided: true,
},
}
// TestRequestAddresses_SanitizeWPrivate test fix issue RM#5617
func TestRequestAddresses_SanitizeWPrivate(t *testing.T) {
ra := make(RequestAddresses, len(addresses))
copy(ra, addresses)
require.True(t, ra.Sanitize(false))
require.Equal(t, 8, len(ra))
}
// TestRequestAddresses_SanitizeAll test fix issue RM#5783
func TestRequestAddresses_SanitizeWOPrivate(t *testing.T) {
ra := make(RequestAddresses, len(addresses))
copy(ra, addresses)
require.True(t, ra.Sanitize(true))
require.Equal(t, 2, len(ra))
}