zeek/testing/btest/Files/mmdb/main.go
2024-01-25 23:43:34 -08:00

74 lines
1.6 KiB
Go

// Create test MaxMind DB database files containing information about
// just LBL's IPv4 ranges for testing.
package main
import (
"log"
"net"
"os"
"github.com/maxmind/mmdbwriter"
"github.com/maxmind/mmdbwriter/mmdbtype"
)
func writeDB(fname, name string, record mmdbtype.Map, nets ...*net.IPNet) {
writer, err := mmdbwriter.New(
mmdbwriter.Options{
DatabaseType: name,
},
)
if err != nil {
log.Fatal(err)
}
for _, n := range nets {
if err = writer.Insert(n, record); err != nil {
log.Fatal(err)
}
}
fh, err := os.Create(fname)
if err != nil {
log.Fatal(err)
}
_, err = writer.WriteTo(fh)
if err != nil {
fh.Close()
log.Fatal(err)
}
fh.Close()
}
func main() {
_, net1, _ := net.ParseCIDR("128.3.0.0/16")
_, net2, _ := net.ParseCIDR("131.243.0.0/16")
_, net3, _ := net.ParseCIDR("2607:f140::/32")
// The ASN record.
asnRecord := mmdbtype.Map{}
asnRecord["autonomous_system_number"] = mmdbtype.Uint32(16)
asnRecord["autonomous_system_organization"] = mmdbtype.String("Lawrence Berkeley National Laboratory")
writeDB("GeoLite2-ASN.mmdb", "My-ASN-DB", asnRecord, net1, net2, net3)
// The Location record.
locRecord := mmdbtype.Map{
"country": mmdbtype.Map{
"iso_code": mmdbtype.String("US"),
"names": mmdbtype.Map{
"en": mmdbtype.String("United States"),
},
},
"location": mmdbtype.Map{
"latitude": mmdbtype.Float64(37.75100),
"longitude": mmdbtype.Float64(-97.822000),
},
"city": mmdbtype.Map{
"names": mmdbtype.Map{
"en": mmdbtype.String("Berkeley"),
},
},
}
writeDB("GeoLite2-City.mmdb", "My-City-DB", locRecord, net1, net2, net3)
}