py-mmdb-encoder icon indicating copy to clipboard operation
py-mmdb-encoder copied to clipboard

Adding ipv4 and ipv6 breaks lookup ability with maxmind reader

Open aaronpeterson opened this issue 6 years ago • 0 comments

I can only seem to insert ipv4 into my files otherwise they become unreadable. If I write all ipv4 and even a single ipv6 the lookup using a maxmind reader fails (no errors, just empty results).

I believe the issue I am having is in how I am adding the ipv4 addresses.

import os
import mmdbencoder

OUTPUT_MMDB_FILENAME = 'output.mmdb'

if os.path.isfile(OUTPUT_MMDB_FILENAME):
    print("WARNING: Deleting Old MMDB File")
    os.remove(OUTPUT_MMDB_FILENAME)

mmdb_file = open(OUTPUT_MMDB_FILENAME, 'wb');

enc = mmdbencoder.Encoder(
    # Using 0th index
    6,
    32,
    'suspect',
    ['en'],  # Languages
    {'en': 'Description...'},  # Description
    compat=True)

# Remove the ipv6 and the ipv4 are readable, add them and only ipv6 are readable
ips = [
    '216.244.66.248',
    '3.15.9.167',
    '2a02:587:a12:f000:e9bf:9b70:4fd:c66',
    '2002:b9ea:da6b:0:0:0:b9ea:da6b',
    '192.0.91.147'
]

# just the same for all of these...
data = enc.insert_data({'region': 'United States', 'type': 'attack_source'})

for ip in ips:
    try:
        enc.insert_network(ip, data)
    except Exception as e:
        print("ERROR: Got error while adding row to the mmdb file. Details are below")
        print("-----: Error: {}".format(str(e)))

enc.write(mmdb_file)

print("Done")

There was some confusion in the Official Perl writer as well but I can't seem to figure out any ipv6 representation of an ipv4 that works such as:

https://github.com/maxmind/MaxMind-DB-Writer-perl/issues/44#issuecomment-137509409

aaronpeterson avatar May 22 '19 23:05 aaronpeterson