Dies ist der Artikel zum 9. Tag von NetOpsCoding AdventCalender.
Dieses Mal werde ich ein Programm zum Abrufen von AS-Informationen mithilfe der in PeeringDB 2.0 veröffentlichten API erstellen.
Die Verbindung von Netzwerken von Organisationen mit AS-Nummer wird als Peer oder Peering bezeichnet. Insbesondere wird das Protokoll BGP auf den Routern beider Organisationen ausgeführt, und die IP-Adressen und AS-Nummern jeder Organisation werden ausgeführt. Peering wird durch Einstellen realisiert.
Es gibt verschiedene Möglichkeiten, Peering durchzuführen, aber ich werde hier nicht auf Details eingehen. Wenn Sie an den Details interessiert sind, Es werden viele Informationen veröffentlicht. Weitere Informationen finden Sie in den folgenden Materialien. http://www.slideshare.net/taijitsuchiya5/wakamonog6-tsuchiya-public
Angenommen, Sie möchten eine Verbindung zum Netzwerk von Organisation A herstellen. Zu diesem Zeitpunkt: „Wie lautet die AS-Nummer von Organisation A?“ „Welche DC-Basis hat den Verbindungsrouter?“ „Welcher IX-Operator wird verwendet?“ „Welche IP-Adresse wird verwendet?“ „Wo ist der Kontakt? Sie müssen Informationen wie "?"
Wenn Sie über Peering nachdenken und Informationen über die Partnerorganisation erhalten möchten, ist PeeringDB die weltweit am häufigsten verwendete Information. PeeringDB ist ein Web-System, das von einer gemeinnützigen Organisation und Organisationen auf der ganzen Welt entwickelt und betrieben wird, die AS-Post-Informationen zu PeeringDB besitzen. (Da die Veröffentlichung von Informationen jedoch der Organisation anvertraut wird, der der AS gehört, sind die Informationen möglicherweise veraltet oder werden möglicherweise gar nicht erst veröffentlicht.)
Peering DB 2.0 wurde 2015 als Beta-Version veröffentlicht. Die Benutzeroberfläche und die Funktionen wurden gegenüber der vorherigen PeeringDB erheblich verbessert, und Informationen können mithilfe der RESTful-API abgerufen werden. http://docs.peeringdb.com/
Jeder kann PeeringDB kostenlos sehen. Beispielsweise können die AS-Informationen von BIGLOBE wie folgt überprüft werden. http://as2518.peeringdb.com/
Durch Überprüfen der PeeringDB finden Sie Informationen wie "Unternehmensinformationen", "AS-Nummer", "grober Verkehrsfluss", "Peering-Richtlinie (Peering-Beurteilungskriterien)" und "Peering-Basis".
Fast der gleiche Inhalt wird in PeeringDB 2.0 veröffentlicht. https://beta.peeringdb.com/net/2229
Die Spezifikationen der PeeringDB 2.0-API werden auf der folgenden Seite veröffentlicht. https://beta.peeringdb.com/apidocs/
Wenn Sie beispielsweise BIGLOBE (AS2518) -Informationen auf einmal abrufen möchten, greifen Sie wie folgt zu.
# Linux/Beim Erwerb vom Mac-Terminal
% curl https://beta.peeringdb.com/api/asn/2518
{
"meta": {},
"data": [
{
"id": 2229,
"org_id": 2934,
"org": {
"id": 2934,
"name": "BIGLOBE Inc.",
"website": "",
"notes": "",
"net_set": [
2229
],
(Teilweise weggelassen)
"name": "BIGLOBE Inc.",
"aka": "FullRoute",
"website": "http://www.biglobe.co.jp/en/",
"asn": 2518,
"looking_glass": "http://lg.fullroute.net/lg/",
"route_server": "",
"irr_as_set": "AS-MESH",
"info_type": "NSP",
"info_prefixes4": 750,
"info_prefixes6": 750,
"info_traffic": "200-300 Gbps",
"info_ratio": "Balanced",
"info_scope": "Asia Pacific",
"info_unicast": true,
"info_multicast": false,
"info_ipv6": true,
"notes": "We are connected to BBIX Singapore but not Hong Kong. We will only peer with Singapore switch participants.\r\n\r\nYou can ping and trace to ping.mesh.ad.jp(both IPv4 and IPv6).\r\n\r\nIRR Records should be viewed with source set to RADB or JPIRR. There are colliding records with the same AS-SET name, but from a different AS on RIPE. \r\n\r\nSee here for Japanese version of the peering policy http://www.biglobe.co.jp/pdf/PeeringPolicy2013_jp_03.pdf",
"policy_url": "http://www.biglobe.co.jp/en/peering_policy.pdf",
"policy_general": "Selective",
"policy_locations": "Preferred",
"policy_ratio": false,
"policy_contracts": "Not Required",
"netfac_set": [
{
"id": 17472,
"fac_id": 19,
"avail_sonet": false,
"avail_ethernet": true,
"avail_atm": false,
"local_asn": 2518,
"created": null,
"updated": "2015-12-05T04:29:57Z",
"status": ""
},
{
"id": 9426,
"fac_id": 142,
"avail_sonet": false,
"avail_ethernet": true,
"avail_atm": false,
"local_asn": 2518,
"created": null,
"updated": "2015-12-05T04:25:36Z",
"status": ""
},
(Unten weggelassen)
Hierbei ist zu beachten, dass das Element "netfac_set" DC-Informationen und IX-Informationen enthält. Da sich die Daten von "netfac_set" jedoch auf eine andere Tabelle als externen Schlüssel beziehen, ist nur die ID enthalten. nicht. Wenn Sie mehr über IX-Informationen erfahren möchten, müssen Sie eine andere URL erstellen und ausführen.
Wenn Sie beispielsweise weitere durch "fac_id": 19 in "netfac_set" angegebene Informationen anzeigen möchten, müssen Sie eine HTTP-Anforderung mit der folgenden URL ausführen.
% curl https://beta.peeringdb.com/api/fac/19 (git)-[master]
{
"meta": {},
"data": [
{
"id": 19,
"org_id": 618,
"org_name": "CoreSite",
"org": {
"id": 618,
"name": "CoreSite",
"website": "",
"notes": "",
"net_set": [],
"fac_set": [
19,
20,
286,
363,
440,
584,
668,
669,
670,
671,
1229,
1619,
1671
],
"ix_set": [],
"address1": "",
"address2": "",
"city": "",
"country": "",
"state": "",
"zipcode": "",
"created": "2015-10-12T08:14:45Z",
"updated": "2015-12-05T09:07:24Z",
"status": "0"
},
"name": "CoreSite - LA1 - One Wilshire",
"website": "http://www.coresite.com",
"clli": "LSANCA",
"rencode": "",
"npanxx": "213-489",
"notes": "",
"created": null,
"updated": "2015-12-05T09:05:59Z",
"status": "0",
"address1": "624 S. Grand Ave.",
"address2": "Suite 110",
"city": "Los Angeles",
"country": "US",
"state": "CA",
"zipcode": "90017"
}
]
}%
In der PeeringDB-API werden Informationstabellen wie AS-Informationen (asn), DC-Informationen (fac) und IX-Informationen (ix) separat gespeichert, wie unter https://beta.peeringdb.com/apidocs/ veröffentlicht. Es wird als externer Schlüssel bezeichnet.
Auf diese Weise müssen Sie, wenn Sie die Informationen erhalten möchten, die Sie mit der API wissen möchten, den externen Schlüssel abrufen und die HTTP-Anforderung mehrmals ausführen, während Sie die URL ändern.
Erstellen Sie ein Programm, um Informationen mithilfe der API abzurufen.
Hier habe ich ein Python-Programm erstellt, das die Informationen aller mit den Unternehmensinformationen verbundenen IXs ausgibt, indem ich dem Argument die AS-Nummer gebe und sie wie unten gezeigt ausführe.
% python get_peeringdb.py <Ziel-AS-Nummer>
Das Programm ist auch auf Github verfügbar. https://github.com/netops-coding/sample_peeringdb
get_peeringdb.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from urllib2 import urlopen, HTTPError
from json import loads
import sys
def get_peeringdb(pdp_type, pdp_id):
pdb_url = 'https://beta.peeringdb.com/api/%s/%s'% (pdp_type, pdp_id)
try :
result_json = urlopen(pdb_url).read()
result_dict = loads(result_json)
except HTTPError, err:
if err.code == 404:
return None
return result_dict
if __name__ == '__main__' :
as_num = sys.argv[1]
# get company and AS information
as_info_dict = get_peeringdb('asn', as_num)
company_name = as_info_dict["data"][0]["org"]["name"]
company_website = as_info_dict["data"][0]["website"]
print as_num
print company_name
print company_website
print '='*30
# get IX information
for netixlan_set in as_info_dict["data"][0]["netixlan_set"]:
ixlan_id = netixlan_set["ixlan_id"]
ipaddr4 = netixlan_set["ipaddr4"]
ipaddr6 = netixlan_set["ipaddr6"]
ixlan_info_dict = get_peeringdb('ixlan', ixlan_id)
ix_name = ixlan_info_dict["data"][0]["ix"]["org"]["name"]
print ix_name
print ipaddr4
print ipaddr6
print '='*30
Führen Sie es mit dem folgenden Befehl aus. Hier wird BIGLOBE (AS2518) angegeben.
% python get_peeringdb.py 2518
(git)-[master]
2518
BIGLOBE Inc.
http://www.biglobe.co.jp/en/
==============================
Equinix Osaka
None
None
==============================
Equinix San Jose
206.223.116.156
2001:504:0:1::2518:1
==============================
Equinix Singapore
202.79.197.180
2001:de8:4::2518:1
==============================
HKIX
123.255.90.157
2001:7fa:0:1::ca28:a09d
==============================
Equinix Tokyo
203.190.230.56
2001:de8:5::2518:2
==============================
Equinix Tokyo
203.190.230.83
2001:de8:5::2518:3
==============================
SGIX
103.16.102.69
2001:de8:12:100::69
==============================
CoreSite - Any2 California
206.72.210.154
2001:504:13::210:154
==============================
BBIX Hong Kong / Singapore
103.231.152.25
2001:df5:b800:bb00::2518:1
==============================
JPIX
210.171.224.181
2001:de8:8::2518:2
==============================
BBIX Tokyo
218.100.6.47
2001:de8:c::2518:1
==============================
BBIX Tokyo
218.100.6.73
2001:de8:c::2518:2
==============================
JPNAP Tokyo
210.173.176.14
2001:7fa:7:1::2518:2
==============================
JPNAP Tokyo
210.173.176.124
2001:7fa:7:1::2518:3
==============================
Wie oben beschrieben, konnten wir ein Programm erstellen, das eine Liste von IX-Informationen abruft, mit denen die Organisation verbunden ist, indem wir einfach die AS-Nummer angeben.
Mit Blick auf das diesmal erstellte Programm wird die Datenstruktur von PeeringDB 2.0 wie "as_info_dict [" data "] [0] [" org "] [" name "]" unverändert verwendet und von einem Drittanbieter programmiert. Es ist sehr schwer zu verstehen, wenn Sie es betrachten, und wenn Sie zusätzliche Funktionen entwickeln, ist es notwendig, mit der Entwicklung fortzufahren, während Sie die Datenstruktur untersuchen, was tendenziell kompliziert ist.
Mit dem bereits veröffentlichten Python-Paket können Sie Software entwickeln, ohne diese Datenstrukturen zu kennen.
Ich habe zwei Python-Pakete gefunden: Zusammenfassend lässt sich sagen, dass das zweite Paket die Softwareentwicklung erleichtert, es jedoch Probleme gibt und die Verwendung immer noch völlig schwierig ist. Wir freuen uns auf die Entwicklung der zweiten Reparatur und zusätzlicher Funktionen.
PeeringDB Python Client
Das offizielle Python-Paket, das vom PeeringDB-Entwickler Matt Griswold entwickelt wurde.
Ich habe versucht, es zu verwenden, aber es hat nur wenige Funktionen (nur grundlegende wie alle, abrufen, erstellen, aktualisieren, speichern) und wie das diesmal entwickelte Programm "Anforderung erstellen / ausführen-> Externen Schlüssel abrufen->" > Es ist nicht so einfach, weil es den Fluss "Erstellen und Ausführen einer anderen Anforderung" erfordert.
Netflix/peeringdb-py
PeeringDB-Client, veröffentlicht von NetFlix als OSS.
Im Vergleich zu ersteren hat es mehr Funktionen und implementiert sehr bequeme Funktionen. Durch Schreiben von "print pdb.matching_ixlan ([2906, 5089])" wird beispielsweise eine Funktion implementiert, die von Netzbetreibern geschätzt wird, z. B. das Anzeigen des gemeinsamen IX der beiden AS.
Sehr leider, wenn ich es für die Testversion installiert und "$ sudo pip install peeringdb" ausgeführt habe, kann es derzeit nicht mit dem Befehl pip installiert werden, da der Name mit dem vorherigen Paket dupliziert wird. Es wird auch als [Problem] aufgeführt (https://github.com/Netflix/peeringdb-py/issues/17) und kann bald behoben werden. Wenn Sie es jetzt wirklich verwenden möchten, verwenden Sie git clobe. Wir empfehlen, dass Sie die Datei direkt verwenden.
Dieses Mal habe ich Software entwickelt, um die in PeeringDB veröffentlichten Informationen über die API zu erhalten. Es ist sehr praktisch, Informationen aus der Öffentlichkeit von PeeringDB abzurufen, wenn Sie eine Datenbank mit Unternehmensinformationen und Netzwerkinformationen erstellen, die Peering mit Ihrem eigenen Netzwerk enthält. Bitte benutzen Sie es, wenn Sie eine Chance haben.
Recommended Posts