Führen Sie eine lokalisierte Massen-ASN-Suche für einen Massendatensatz von IP-Adressen durch
Laden Sie die beiden BGP-Datensätze herunter, die oben im Dokument verlinkt sind (http://thyme.apnic.net/current/data-raw-table und http://thyme.apnic.net/current/data-used-autnums). . Die erste davon enthält alle zugewiesenen Subnetzbereiche von IANA und die zugehörigen ASN-Nummern. Die zweite ist eine Liste der ASN-Nummern und des Deskriptors. Sie werden beide täglich zwischen 4 und 9 Uhr +10 GMT aktualisiert, wie unter http://thyme.apnic.net beschrieben. Platzieren Sie diese beiden Dateien und die Liste der IPs, die Sie suchen möchten, mit dem Namen uniq_ip.txt, im selben Ordner wie das Skript ip2asn.py. Führen Sie bulk-ip-to-asn-correlation.py aus. Sie erhalten zwei Ausgabedateien – ip2asn--invalids.txt mit einer Liste aller identifizierten ungültigen IP-Adressen (einschließlich lokaler und reservierter Adressen) und ip2asn-results.txt mit CSV Formatierte Ergebnisse mit einem Header aus Zeitstempel, IP, ASN und ASN-Deskriptor.
Es hat eine Weile gedauert, bis ich herausgefunden habe, wie ich die Korrelation zwischen einer bereitgestellten IP-Adresse und dem zugehörigen Subnetz, wie von der IANA registriert, am effizientesten durchführen kann.
Der Schlüssel zu meiner Implementierung wird im ersten „Andere Beispiele“ unter https://docs.python.org/3/library/bisect.html erklärt, wo sie eine Buchstabennote mit einem Testergebnis auf der Grundlage einer Bewertungsskala verknüpfen.
Beachten Sie, dass alle IP-Adressen zur Berechnung in ihren ganzzahligen Wert umgewandelt werden.
Zuerst erstelle ich ein Tupel der Gesamtzahl der in jedem CIDR-Präfix enthaltenen IP-Adressen, von /1 bis /32, und speichere diese in NETMASK_MAP. Ich denke, dass Sie eine saubere Liste von IP-Adressen erstellen, die in der bereitgestellten Datei nachgeschlagen werden, und dabei ungültige Adressen herausfiltern. Während dieses Prozesses extrahiere ich auch eine eindeutige Liste der ersten Oktette für unsere Abfrageadressen. Dies wird genutzt, um viele der nicht benötigten Bereiche aus den BGP-Datensätzen herauszufiltern.
Als Nächstes erstelle ich zwei Nachschlagetabellen unter Verwendung der Datenrohtabellendatei, die IANA-registrierte Subnetze und ihre jeweiligen ASNs enthält. Für jedes Subnetz im BGP-Datensatz ermitteln wir zunächst anhand der Abfrage-IP-Adressen, ob das erste Oktett in unserer eindeutigen Oktettliste enthalten ist. Wenn dies der Fall ist, berechnen wir die maximale IP-Adresse (calculate_net_rage()) im angegebenen CIDR-Bereich. Diese maximalen IPs werden zur subnet_lookup_table hinzugefügt. Anschließend wird eine zweite Tabelle, asn_lookup_table, erstellt, die die entsprechende ASN-Nummer für jede maximale IP-Adresse enthält. Dies folgt dem Grade-Bisect-Beispiel, bei dem subnet_lookup_table die Haltepunktvariable und asn_lookup_table die Buchstabengrade sind.
Anschließend erstellen wir eine Abschlusstabelle aus dem BGP-Datensatz „data-used-autnums“, die eine Korrelation der ASN-Nummern mit ihrem Deskriptortext enthält.
Schließlich führen wir für jede IP-Adresse in unserer bereinigten Abfrageliste eine Halbierung durch, wie in der verlinkten Python-Dokumentation beschrieben, um zu korrelieren, unter welche maximale IP-Adresse die angegebene IP fällt und welche ASN-Nummer sie zugeordnet ist. Dieser wird dann mit dem Deskriptortext korreliert.
Wenn die von Ihnen angegebene IP nicht existiert, habe ich keine Ahnung, was passieren wird. Es wird wahrscheinlich explodieren. Viel Glück.