forked from projectdiscovery/mapcidr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ip_test.go
102 lines (97 loc) · 13.7 KB
/
ip_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package mapcidr
import (
"math/big"
"net"
"testing"
sliceutil "github.com/projectdiscovery/utils/slice"
"github.com/stretchr/testify/require"
)
func TestCountIPsInCIDRs(t *testing.T) {
errorMsg := "unexpected result"
_, net1, _ := net.ParseCIDR("15.181.232.0/21")
_, net2, _ := net.ParseCIDR("15.181.232.0/21")
require.Equal(t, CountIPsInCIDRs(true, true, net1, net2), big.NewInt(4096), errorMsg)
require.Equal(t, CountIPsInCIDRs(false, false, net1, net2), big.NewInt(4092), errorMsg)
require.Equal(t, CountIPsInCIDRs(true, false, net1, net2), big.NewInt(4094), errorMsg)
require.Equal(t, CountIPsInCIDRs(false, true, net1, net2), big.NewInt(4094), errorMsg)
}
func TestIpEncodings(t *testing.T) {
ip := "127.0.0.1"
res := AlterIP(ip, []string{"1"}, 0, false)
require.Equal(t, []string{"127.0.0.1"}, res)
res = AlterIP(ip, []string{"2"}, 0, false)
require.Equal(t, []string{"127.1"}, res)
res = AlterIP(ip, []string{"3"}, 0, false)
require.Equal(t, []string{"0177.0.0.01"}, res)
res = AlterIP(ip, []string{"4"}, 0, false)
require.True(t, sliceutil.ContainsItems(res, []string{"0x7f.0x0.0x0.0x1", "0x7f000001"}))
res = AlterIP(ip, []string{"5"}, 0, false)
require.Equal(t, []string{"2130706433"}, res)
res = AlterIP(ip, []string{"6"}, 0, false)
require.Equal(t, []string{"1111111000000000000000000000001"}, res)
res = AlterIP(ip, []string{"7"}, 0, false)
require.Equal(t, []string{"0x7f.0.0.0x1"}, res)
res = AlterIP("2001:0db8:85a3:0000:0000:8a2e:0370:7334", []string{"8"}, 0, false)
require.Equal(t, []string{"2001:db8:85a3::8a2e:370:7334"}, res)
res = AlterIP(ip, []string{"9"}, 0, false)
require.Equal(t, []string{"%31%32%37%2E%30%2E%30%2E%31"}, res)
res = AlterIP(ip, []string{"10"}, 5, true)
require.Equal(t, []string{"127.0.0.1", "127.0.0.1", "127.0.0.01", "127.0.0.001", "127.0.0.0001", "127.0.0.1", "127.0.0.1", "127.0.0.01", "127.0.0.001", "127.0.0.0001", "127.0.00.1", "127.0.00.1", "127.0.00.01", "127.0.00.001", "127.0.00.0001", "127.0.000.1", "127.0.000.1", "127.0.000.01", "127.0.000.001", "127.0.000.0001", "127.0.0000.1", "127.0.0000.1", "127.0.0000.01", "127.0.0000.001", "127.0.0000.0001", "127.0.0.1", "127.0.0.1", "127.0.0.01", "127.0.0.001", "127.0.0.0001", "127.0.0.1", "127.0.0.1", "127.0.0.01", "127.0.0.001", "127.0.0.0001", "127.0.00.1", "127.0.00.1", "127.0.00.01", "127.0.00.001", "127.0.00.0001", "127.0.000.1", "127.0.000.1", "127.0.000.01", "127.0.000.001", "127.0.000.0001", "127.0.0000.1", "127.0.0000.1", "127.0.0000.01", "127.0.0000.001", "127.0.0000.0001", "127.00.0.1", "127.00.0.1", "127.00.0.01", "127.00.0.001", "127.00.0.0001", "127.00.0.1", "127.00.0.1", "127.00.0.01", "127.00.0.001", "127.00.0.0001", "127.00.00.1", "127.00.00.1", "127.00.00.01", "127.00.00.001", "127.00.00.0001", "127.00.000.1", "127.00.000.1", "127.00.000.01", "127.00.000.001", "127.00.000.0001", "127.00.0000.1", "127.00.0000.1", "127.00.0000.01", "127.00.0000.001", "127.00.0000.0001", "127.000.0.1", "127.000.0.1", "127.000.0.01", "127.000.0.001", "127.000.0.0001", "127.000.0.1", "127.000.0.1", "127.000.0.01", "127.000.0.001", "127.000.0.0001", "127.000.00.1", "127.000.00.1", "127.000.00.01", "127.000.00.001", "127.000.00.0001", "127.000.000.1", "127.000.000.1", "127.000.000.01", "127.000.000.001", "127.000.000.0001", "127.000.0000.1", "127.000.0000.1", "127.000.0000.01", "127.000.0000.001", "127.000.0000.0001", "127.0000.0.1", "127.0000.0.1", "127.0000.0.01", "127.0000.0.001", "127.0000.0.0001", "127.0000.0.1", "127.0000.0.1", "127.0000.0.01", "127.0000.0.001", "127.0000.0.0001", "127.0000.00.1", "127.0000.00.1", "127.0000.00.01", "127.0000.00.001", "127.0000.00.0001", "127.0000.000.1", "127.0000.000.1", "127.0000.000.01", "127.0000.000.001", "127.0000.000.0001", "127.0000.0000.1", "127.0000.0000.1", "127.0000.0000.01", "127.0000.0000.001", "127.0000.0000.0001", "127.0.0.1", "127.0.0.1", "127.0.0.01", "127.0.0.001", "127.0.0.0001", "127.0.0.1", "127.0.0.1", "127.0.0.01", "127.0.0.001", "127.0.0.0001", "127.0.00.1", "127.0.00.1", "127.0.00.01", "127.0.00.001", "127.0.00.0001", "127.0.000.1", "127.0.000.1", "127.0.000.01", "127.0.000.001", "127.0.000.0001", "127.0.0000.1", "127.0.0000.1", "127.0.0000.01", "127.0.0000.001", "127.0.0000.0001", "127.0.0.1", "127.0.0.1", "127.0.0.01", "127.0.0.001", "127.0.0.0001", "127.0.0.1", "127.0.0.1", "127.0.0.01", "127.0.0.001", "127.0.0.0001", "127.0.00.1", "127.0.00.1", "127.0.00.01", "127.0.00.001", "127.0.00.0001", "127.0.000.1", "127.0.000.1", "127.0.000.01", "127.0.000.001", "127.0.000.0001", "127.0.0000.1", "127.0.0000.1", "127.0.0000.01", "127.0.0000.001", "127.0.0000.0001", "127.00.0.1", "127.00.0.1", "127.00.0.01", "127.00.0.001", "127.00.0.0001", "127.00.0.1", "127.00.0.1", "127.00.0.01", "127.00.0.001", "127.00.0.0001", "127.00.00.1", "127.00.00.1", "127.00.00.01", "127.00.00.001", "127.00.00.0001", "127.00.000.1", "127.00.000.1", "127.00.000.01", "127.00.000.001", "127.00.000.0001", "127.00.0000.1", "127.00.0000.1", "127.00.0000.01", "127.00.0000.001", "127.00.0000.0001", "127.000.0.1", "127.000.0.1", "127.000.0.01", "127.000.0.001", "127.000.0.0001", "127.000.0.1", "127.000.0.1", "127.000.0.01", "127.000.0.001", "127.000.0.0001", "127.000.00.1", "127.000.00.1", "127.000.00.01", "127.000.00.001", "127.000.00.0001", "127.000.000.1", "127.000.000.1", "127.000.000.01", "127.000.000.001", "127.000.000.0001", "127.000.0000.1", "127.000.0000.1", "127.000.0000.01", "127.000.0000.001", "127.000.0000.0001", "127.0000.0.1", "127.0000.0.1", "127.0000.0.01", "127.0000.0.001", "127.0000.0.0001", "127.0000.0.1", "127.0000.0.1", "127.0000.0.01", "127.0000.0.001", "127.0000.0.0001", "127.0000.00.1", "127.0000.00.1", "127.0000.00.01", "127.0000.00.001", "127.0000.00.0001", "127.0000.000.1", "127.0000.000.1", "127.0000.000.01", "127.0000.000.001", "127.0000.000.0001", "127.0000.0000.1", "127.0000.0000.1", "127.0000.0000.01", "127.0000.0000.001", "127.0000.0000.0001", "127.0.0.1", "127.0.0.1", "127.0.0.01", "127.0.0.001", "127.0.0.0001", "127.0.0.1", "127.0.0.1", "127.0.0.01", "127.0.0.001", "127.0.0.0001", "127.0.00.1", "127.0.00.1", "127.0.00.01", "127.0.00.001", "127.0.00.0001", "127.0.000.1", "127.0.000.1", "127.0.000.01", "127.0.000.001", "127.0.000.0001", "127.0.0000.1", "127.0.0000.1", "127.0.0000.01", "127.0.0000.001", "127.0.0000.0001", "127.0.0.1", "127.0.0.1", "127.0.0.01", "127.0.0.001", "127.0.0.0001", "127.0.0.1", "127.0.0.1", "127.0.0.01", "127.0.0.001", "127.0.0.0001", "127.0.00.1", "127.0.00.1", "127.0.00.01", "127.0.00.001", "127.0.00.0001", "127.0.000.1", "127.0.000.1", "127.0.000.01", "127.0.000.001", "127.0.000.0001", "127.0.0000.1", "127.0.0000.1", "127.0.0000.01", "127.0.0000.001", "127.0.0000.0001", "127.00.0.1", "127.00.0.1", "127.00.0.01", "127.00.0.001", "127.00.0.0001", "127.00.0.1", "127.00.0.1", "127.00.0.01", "127.00.0.001", "127.00.0.0001", "127.00.00.1", "127.00.00.1", "127.00.00.01", "127.00.00.001", "127.00.00.0001", "127.00.000.1", "127.00.000.1", "127.00.000.01", "127.00.000.001", "127.00.000.0001", "127.00.0000.1", "127.00.0000.1", "127.00.0000.01", "127.00.0000.001", "127.00.0000.0001", "127.000.0.1", "127.000.0.1", "127.000.0.01", "127.000.0.001", "127.000.0.0001", "127.000.0.1", "127.000.0.1", "127.000.0.01", "127.000.0.001", "127.000.0.0001", "127.000.00.1", "127.000.00.1", "127.000.00.01", "127.000.00.001", "127.000.00.0001", "127.000.000.1", "127.000.000.1", "127.000.000.01", "127.000.000.001", "127.000.000.0001", "127.000.0000.1", "127.000.0000.1", "127.000.0000.01", "127.000.0000.001", "127.000.0000.0001", "127.0000.0.1", "127.0000.0.1", "127.0000.0.01", "127.0000.0.001", "127.0000.0.0001", "127.0000.0.1", "127.0000.0.1", "127.0000.0.01", "127.0000.0.001", "127.0000.0.0001", "127.0000.00.1", "127.0000.00.1", "127.0000.00.01", "127.0000.00.001", "127.0000.00.0001", "127.0000.000.1", "127.0000.000.1", "127.0000.000.01", "127.0000.000.001", "127.0000.000.0001", "127.0000.0000.1", "127.0000.0000.1", "127.0000.0000.01", "127.0000.0000.001", "127.0000.0000.0001", "127.0.0.1", "127.0.0.1", "127.0.0.01", "127.0.0.001", "127.0.0.0001", "127.0.0.1", "127.0.0.1", "127.0.0.01", "127.0.0.001", "127.0.0.0001", "127.0.00.1", "127.0.00.1", "127.0.00.01", "127.0.00.001", "127.0.00.0001", "127.0.000.1", "127.0.000.1", "127.0.000.01", "127.0.000.001", "127.0.000.0001", "127.0.0000.1", "127.0.0000.1", "127.0.0000.01", "127.0.0000.001", "127.0.0000.0001", "127.0.0.1", "127.0.0.1", "127.0.0.01", "127.0.0.001", "127.0.0.0001", "127.0.0.1", "127.0.0.1", "127.0.0.01", "127.0.0.001", "127.0.0.0001", "127.0.00.1", "127.0.00.1", "127.0.00.01", "127.0.00.001", "127.0.00.0001", "127.0.000.1", "127.0.000.1", "127.0.000.01", "127.0.000.001", "127.0.000.0001", "127.0.0000.1", "127.0.0000.1", "127.0.0000.01", "127.0.0000.001", "127.0.0000.0001", "127.00.0.1", "127.00.0.1", "127.00.0.01", "127.00.0.001", "127.00.0.0001", "127.00.0.1", "127.00.0.1", "127.00.0.01", "127.00.0.001", "127.00.0.0001", "127.00.00.1", "127.00.00.1", "127.00.00.01", "127.00.00.001", "127.00.00.0001", "127.00.000.1", "127.00.000.1", "127.00.000.01", "127.00.000.001", "127.00.000.0001", "127.00.0000.1", "127.00.0000.1", "127.00.0000.01", "127.00.0000.001", "127.00.0000.0001", "127.000.0.1", "127.000.0.1", "127.000.0.01", "127.000.0.001", "127.000.0.0001", "127.000.0.1", "127.000.0.1", "127.000.0.01", "127.000.0.001", "127.000.0.0001", "127.000.00.1", "127.000.00.1", "127.000.00.01", "127.000.00.001", "127.000.00.0001", "127.000.000.1", "127.000.000.1", "127.000.000.01", "127.000.000.001", "127.000.000.0001", "127.000.0000.1", "127.000.0000.1", "127.000.0000.01", "127.000.0000.001", "127.000.0000.0001", "127.0000.0.1", "127.0000.0.1", "127.0000.0.01", "127.0000.0.001", "127.0000.0.0001", "127.0000.0.1", "127.0000.0.1", "127.0000.0.01", "127.0000.0.001", "127.0000.0.0001", "127.0000.00.1", "127.0000.00.1", "127.0000.00.01", "127.0000.00.001", "127.0000.00.0001", "127.0000.000.1", "127.0000.000.1", "127.0000.000.01", "127.0000.000.001", "127.0000.000.0001", "127.0000.0000.1", "127.0000.0000.1", "127.0000.0000.01", "127.0000.0000.001", "127.0000.0000.0001", "0127.0.0.1", "0127.0.0.1", "0127.0.0.01", "0127.0.0.001", "0127.0.0.0001", "0127.0.0.1", "0127.0.0.1", "0127.0.0.01", "0127.0.0.001", "0127.0.0.0001", "0127.0.00.1", "0127.0.00.1", "0127.0.00.01", "0127.0.00.001", "0127.0.00.0001", "0127.0.000.1", "0127.0.000.1", "0127.0.000.01", "0127.0.000.001", "0127.0.000.0001", "0127.0.0000.1", "0127.0.0000.1", "0127.0.0000.01", "0127.0.0000.001", "0127.0.0000.0001", "0127.0.0.1", "0127.0.0.1", "0127.0.0.01", "0127.0.0.001", "0127.0.0.0001", "0127.0.0.1", "0127.0.0.1", "0127.0.0.01", "0127.0.0.001", "0127.0.0.0001", "0127.0.00.1", "0127.0.00.1", "0127.0.00.01", "0127.0.00.001", "0127.0.00.0001", "0127.0.000.1", "0127.0.000.1", "0127.0.000.01", "0127.0.000.001", "0127.0.000.0001", "0127.0.0000.1", "0127.0.0000.1", "0127.0.0000.01", "0127.0.0000.001", "0127.0.0000.0001", "0127.00.0.1", "0127.00.0.1", "0127.00.0.01", "0127.00.0.001", "0127.00.0.0001", "0127.00.0.1", "0127.00.0.1", "0127.00.0.01", "0127.00.0.001", "0127.00.0.0001", "0127.00.00.1", "0127.00.00.1", "0127.00.00.01", "0127.00.00.001", "0127.00.00.0001", "0127.00.000.1", "0127.00.000.1", "0127.00.000.01", "0127.00.000.001", "0127.00.000.0001", "0127.00.0000.1", "0127.00.0000.1", "0127.00.0000.01", "0127.00.0000.001", "0127.00.0000.0001", "0127.000.0.1", "0127.000.0.1", "0127.000.0.01", "0127.000.0.001", "0127.000.0.0001", "0127.000.0.1", "0127.000.0.1", "0127.000.0.01", "0127.000.0.001", "0127.000.0.0001", "0127.000.00.1", "0127.000.00.1", "0127.000.00.01", "0127.000.00.001", "0127.000.00.0001", "0127.000.000.1", "0127.000.000.1", "0127.000.000.01", "0127.000.000.001", "0127.000.000.0001", "0127.000.0000.1", "0127.000.0000.1", "0127.000.0000.01", "0127.000.0000.001", "0127.000.0000.0001", "0127.0000.0.1", "0127.0000.0.1", "0127.0000.0.01", "0127.0000.0.001", "0127.0000.0.0001", "0127.0000.0.1", "0127.0000.0.1", "0127.0000.0.01", "0127.0000.0.001", "0127.0000.0.0001", "0127.0000.00.1", "0127.0000.00.1", "0127.0000.00.01", "0127.0000.00.001", "0127.0000.00.0001", "0127.0000.000.1", "0127.0000.000.1", "0127.0000.000.01", "0127.0000.000.001", "0127.0000.000.0001", "0127.0000.0000.1", "0127.0000.0000.1", "0127.0000.0000.01", "0127.0000.0000.001", "0127.0000.0000.0001"}, res)
res = AlterIP("127.0.1.0", []string{"11"}, 0, false)
require.Equal(t, []string{"127.0.256"}, res)
}
func TestRangeToCIDRs(t *testing.T) {
tests := []struct {
name string
firstIP net.IP
lastIP net.IP
want []string
expectedError string
}{
{
name: "IP4SingleCIDR",
firstIP: net.ParseIP("192.168.0.0"),
lastIP: net.ParseIP("192.168.0.255"),
want: []string{"192.168.0.0/24"},
expectedError: "",
},
{
name: "IP4MultipleCIDR",
firstIP: net.ParseIP("192.168.0.1"),
lastIP: net.ParseIP("192.168.0.255"),
want: []string{"192.168.0.1/32", "192.168.0.2/31",
"192.168.0.4/30", "192.168.0.8/29",
"192.168.0.16/28", "192.168.0.32/27",
"192.168.0.64/26", "192.168.0.128/25"},
expectedError: "",
},
{
name: "IP6RangeCIDR",
firstIP: net.ParseIP("2c0f:fec9::"),
lastIP: net.ParseIP("2c0f:fed7:ffff:ffff:ffff:ffff:ffff:ffff"),
want: []string{"2c0f:fec9::/32", "2c0f:feca::/31", "2c0f:fecc::/30", "2c0f:fed0::/29"},
expectedError: "",
},
{
name: "wrongIPRange",
firstIP: net.ParseIP("192.168.0.255"),
lastIP: net.ParseIP("192.168.0.0"),
want: []string{},
expectedError: "start IP:192.168.0.255 must be less than End IP:192.168.0.0",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
var cidrStringList []string
got, err := GetCIDRFromIPRange(tt.firstIP, tt.lastIP)
if err != nil {
require.Equal(t, tt.expectedError, err.Error())
} else {
for _, item := range got {
cidrStringList = append(cidrStringList, item.String())
}
require.Equal(t, tt.want, cidrStringList)
}
})
}
}