Added code to track aws/azure/gcp
This commit is contained in:
commit
df3ebca4ad
74
aws/main.go
Normal file
74
aws/main.go
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"math"
|
||||||
|
"net"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Aws struct {
|
||||||
|
Prefixes []struct {
|
||||||
|
IPPrefix string `json:"ip_prefix"`
|
||||||
|
Region string `json:"region"`
|
||||||
|
Service string `json:"service"`
|
||||||
|
NetworkBorderGroup string `json:"network_border_group"`
|
||||||
|
} `json:"prefixes"`
|
||||||
|
Ipv6Prefixes []struct {
|
||||||
|
Ipv6Prefix string `json:"ipv6_prefix"`
|
||||||
|
Region string `json:"region"`
|
||||||
|
Service string `json:"service"`
|
||||||
|
NetworkBorderGroup string `json:"network_border_group"`
|
||||||
|
} `json:"ipv6_prefixes"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
|
||||||
|
resp, err := http.Get("https://ip-ranges.amazonaws.com/ip-ranges.json")
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
input := Aws{}
|
||||||
|
err = json.NewDecoder(resp.Body).Decode(&input)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
total := 0
|
||||||
|
smallestPrefix := 32
|
||||||
|
for _, l := range input.Prefixes {
|
||||||
|
_, cidr, err := net.ParseCIDR(l.IPPrefix)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
ones, bits := cidr.Mask.Size()
|
||||||
|
if ones < smallestPrefix {
|
||||||
|
smallestPrefix = ones
|
||||||
|
}
|
||||||
|
|
||||||
|
total += int(math.Pow(2.0, float64(bits-ones)))
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Total Ipv4 Address Count", total, "Smallest Ipv4 Prefix", smallestPrefix)
|
||||||
|
var totalIpv6 int64 = 0
|
||||||
|
smallestPrefix = 128
|
||||||
|
for _, l := range input.Ipv6Prefixes {
|
||||||
|
_, cidr, err := net.ParseCIDR(l.Ipv6Prefix)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
ones, bits := cidr.Mask.Size()
|
||||||
|
if ones < smallestPrefix {
|
||||||
|
smallestPrefix = ones
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only count /64 blocks
|
||||||
|
bits = 64
|
||||||
|
totalIpv6 += int64(math.Pow(2.0, float64(bits-ones)))
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Total Ipv6 Address Count", totalIpv6, "Smallest Ipv6 Prefix", smallestPrefix)
|
||||||
|
}
|
104745
azure/ServiceTags_Public_20230724.json
Normal file
104745
azure/ServiceTags_Public_20230724.json
Normal file
File diff suppressed because it is too large
Load Diff
83
azure/main.go
Normal file
83
azure/main.go
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"math"
|
||||||
|
"net"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Azure struct {
|
||||||
|
ChangeNumber int `json:"changeNumber"`
|
||||||
|
Cloud string `json:"cloud"`
|
||||||
|
Values []struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
ID string `json:"id"`
|
||||||
|
Properties struct {
|
||||||
|
ChangeNumber int `json:"changeNumber"`
|
||||||
|
Region string `json:"region"`
|
||||||
|
RegionID int `json:"regionId"`
|
||||||
|
Platform string `json:"platform"`
|
||||||
|
SystemService string `json:"systemService"`
|
||||||
|
AddressPrefixes []string `json:"addressPrefixes"`
|
||||||
|
NetworkFeatures []string `json:"networkFeatures"`
|
||||||
|
} `json:"properties"`
|
||||||
|
} `json:"values"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
|
||||||
|
// https://www.microsoft.com/en-us/download/details.aspx?id=56519
|
||||||
|
f, err := os.Open("./ServiceTags_Public_20230724.json")
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
input := Azure{}
|
||||||
|
err = json.NewDecoder(f).Decode(&input)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
totalIpv4 := 0
|
||||||
|
totalIpv6 := 0
|
||||||
|
smallestIpv4Prefix := 32
|
||||||
|
smallestIpv6Prefix := 128
|
||||||
|
|
||||||
|
for _, v := range input.Values {
|
||||||
|
|
||||||
|
for _, addr := range v.Properties.AddressPrefixes {
|
||||||
|
_, cidr, err := net.ParseCIDR(addr)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
ones, bits := cidr.Mask.Size()
|
||||||
|
if bits == 128 {
|
||||||
|
|
||||||
|
// Only track /64 blocks
|
||||||
|
bits = 64
|
||||||
|
totalIpv6 += int(math.Pow(2.0, float64(bits-ones)))
|
||||||
|
|
||||||
|
if ones < smallestIpv6Prefix {
|
||||||
|
smallestIpv6Prefix = ones
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if bits == 32 {
|
||||||
|
totalIpv4 += int(math.Pow(2.0, float64(bits-ones)))
|
||||||
|
if ones < smallestIpv4Prefix {
|
||||||
|
smallestIpv4Prefix = ones
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
panic("unknown bits??")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Total Ipv4 Address Count", totalIpv4, "Smallest Ipv4 Prefix", smallestIpv4Prefix)
|
||||||
|
fmt.Println("Total Ipv6 Address Count", totalIpv6, "Smallest Ipv6 Prefix", smallestIpv6Prefix)
|
||||||
|
}
|
76
gcp/main.go
Normal file
76
gcp/main.go
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"math"
|
||||||
|
"net"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Gcp struct {
|
||||||
|
SyncToken string `json:"syncToken"`
|
||||||
|
CreationTime string `json:"creationTime"`
|
||||||
|
Prefixes []struct {
|
||||||
|
Ipv4Prefix string `json:"ipv4Prefix,omitempty"`
|
||||||
|
Service string `json:"service"`
|
||||||
|
Scope string `json:"scope"`
|
||||||
|
Ipv6Prefix string `json:"ipv6Prefix,omitempty"`
|
||||||
|
} `json:"prefixes"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
|
||||||
|
resp, err := http.Get("https://www.gstatic.com/ipranges/cloud.json")
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
input := Gcp{}
|
||||||
|
err = json.NewDecoder(resp.Body).Decode(&input)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
total := 0
|
||||||
|
smallestPrefix := 32
|
||||||
|
for _, l := range input.Prefixes {
|
||||||
|
if l.Ipv4Prefix == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
_, cidr, err := net.ParseCIDR(l.Ipv4Prefix)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
ones, bits := cidr.Mask.Size()
|
||||||
|
if ones < smallestPrefix {
|
||||||
|
smallestPrefix = ones
|
||||||
|
}
|
||||||
|
total += int(math.Pow(2.0, float64(bits-ones)))
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Total Ipv4 Address Count", total, "Smallest Ipv4 Prefix", smallestPrefix)
|
||||||
|
|
||||||
|
var totalIpv6 int64 = 0
|
||||||
|
smallestPrefix = 128
|
||||||
|
for _, l := range input.Prefixes {
|
||||||
|
if l.Ipv6Prefix == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
_, cidr, err := net.ParseCIDR(l.Ipv6Prefix)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
ones, bits := cidr.Mask.Size()
|
||||||
|
if ones < smallestPrefix {
|
||||||
|
smallestPrefix = ones
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only count /64 blocks
|
||||||
|
bits = 64
|
||||||
|
totalIpv6 += int64(math.Pow(2.0, float64(bits-ones)))
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Total Ipv6 Address Count", totalIpv6, "Smallest Ipv6 Prefix", smallestPrefix)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user