Ceci est l'article du 9ème jour de NetOpsCoding AdventCalender.
Cette fois, je vais créer un programme pour acquérir des informations AS en utilisant l'API publiée dans PeeringDB 2.0.
L'interconnexion des réseaux d'organisations avec numéro AS est appelée Peer ou Peering. Plus précisément, le protocole BGP est exploité sur les routeurs des deux organisations, et les adresses IP et les numéros AS de chaque organisation sont exploités. L'appairage est réalisé par paramétrage.
Il existe plusieurs façons de faire du peering, mais je n'entrerai pas dans les détails ici. Si vous êtes intéressé par les détails, De nombreuses informations sont publiées, veuillez donc vous référer aux documents suivants. http://www.slideshare.net/taijitsuchiya5/wakamonog6-tsuchiya-public
Supposons que vous souhaitiez vous connecter au réseau de l'organisation A. À ce moment-là, "Quel est le numéro AS de l'organisation A?" "Quelle base DC possède le routeur de connexion?" "Quel opérateur IX est utilisé?" "Quelle adresse IP est utilisée?" "Où se trouve le contact? Vous devez connaître des informations telles que "?"
Si vous envisagez le Peering et souhaitez obtenir des informations sur l'organisation partenaire, les informations les plus utilisées au monde sont PeeringDB. PeeringDB est un système Web développé et exploité par une organisation à but non lucratif et des organisations du monde entier qui possèdent des informations de publication AS sur PeeringDB. (Cependant, étant donné que la publication d'informations est confiée à l'organisation propriétaire du SA, les informations peuvent être obsolètes ou ne pas être publiées en premier lieu.)
Peering DB 2.0 a été publié en version bêta en 2015. L'interface utilisateur et les fonctions ont été considérablement améliorées par rapport à la précédente PeeringDB, et des informations peuvent être obtenues à l'aide de l'API RESTful. http://docs.peeringdb.com/
Tout le monde peut voir PeeringDB gratuitement. Par exemple, les informations AS de BIGLOBE peuvent être vérifiées comme suit. http://as2518.peeringdb.com/
En examinant PeeringDB, vous pouvez trouver des informations telles que "informations sur la société", "numéro AS", "flux de trafic approximatif", "politique de peering (critères de jugement du peering)" et "base de peering".
Presque le même contenu est publié dans PeeringDB 2.0. https://beta.peeringdb.com/net/2229
Les spécifications de l'API PeeringDB 2.0 sont publiées sur la page suivante. https://beta.peeringdb.com/apidocs/
Par exemple, si vous souhaitez obtenir toutes les informations BIGLOBE (AS2518) en même temps, accédez comme suit.
# Linux/Lors de l'acquisition depuis le terminal Mac
% 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
],
(Partiellement omis)
"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": ""
},
(Omis ci-dessous)
Il convient de noter ici que l'élément "netfac_set" contient des informations DC et des informations IX, mais puisque les données de "netfac_set" se réfèrent à une autre table en tant que clé externe, seul l'ID est inclus. ne pas. Si vous voulez en savoir plus sur les informations IX, vous devez créer une autre URL et l'exécuter.
Par exemple, si vous souhaitez voir plus d'informations spécifiées par "fac_id": 19 dans "netfac_set", vous devez exécuter une requête HTTP avec l'URL suivante.
% 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"
}
]
}%
Dans l'API PeeringDB, les tables d'informations telles que les informations AS (asn), les informations DC (fac) et les informations IX (ix) sont stockées séparément telles que publiées sur https://beta.peeringdb.com/apidocs/. Elle est référencée comme clé externe.
De cette manière, si vous souhaitez obtenir les informations que vous souhaitez connaître avec l'API, vous devez obtenir la clé externe et exécuter la requête HTTP plusieurs fois tout en modifiant l'URL.
Créez un programme pour obtenir des informations à l'aide de l'API.
Ici, j'ai créé un programme Python qui génère les informations de tous les IX connectés aux informations de l'entreprise en donnant le numéro AS à l'argument et en l'exécutant comme indiqué ci-dessous.
% python get_peeringdb.py <Numéro AS cible>
Le programme est également disponible sur github. 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
Exécutez-le avec la commande suivante. Ici, BIGLOBE (AS2518) est spécifié.
% 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
==============================
Comme décrit ci-dessus, nous avons pu créer un programme qui acquiert une liste d'informations IX auxquelles l'organisation est connectée simplement en spécifiant le numéro AS.
En regardant le programme créé cette fois, la structure de données de PeeringDB 2.0 telle que "as_info_dict [" data "] [0] [" org "] [" name "]" est utilisée telle quelle, et un tiers la programme. C'est très difficile à comprendre quand on y regarde, et lors du développement de fonctions supplémentaires, il est nécessaire de procéder au développement tout en examinant la structure des données, qui a tendance à être compliquée.
En utilisant le package Python qui a déjà été publié, vous pouvez développer des logiciels sans avoir connaissance de ces structures de données.
J'ai trouvé deux packages Python: En conclusion, le deuxième package est efficace pour faciliter le développement de logiciels, mais il y a des problèmes et il est encore complètement difficile à utiliser. Nous attendons avec impatience le développement de la deuxième réparation et des fonctions supplémentaires.
PeeringDB Python Client
Le package Python officiel développé par le développeur PeeringDB Matt Griswold. --J'ai essayé de l'utiliser, mais il a peu de fonctions (seulement des fonctions de base telles que tout, obtenir, créer, mettre à jour, enregistrer), et comme le programme développé cette fois, "Créer / exécuter une requête-> Obtenir une clé externe-> > Ce n'est pas si facile car cela nécessite le flux de "création et exécution d'une autre requête".
Netflix/peeringdb-py
Client PeeringDB publié par NetFlix en tant que OSS.
Par rapport au premier, il a plus de fonctions et implémente des fonctions très pratiques. Par exemple, en écrivant "print pdb.matching_ixlan ([2906, 5089])", une fonction appréciée des opérateurs de réseau, telle que l'affichage du IX commun des deux AS, est implémentée. --Très malheureusement, lorsque je l'ai installé pour une utilisation d'essai et exécuté "$ sudo pip install peeringdb", il ne peut pas être installé avec la commande pip pour le moment car le nom est dupliqué avec l'ancien package. Il est également répertorié comme Problème et peut être corrigé bientôt, mais si vous voulez vraiment l'utiliser maintenant, utilisez git clobe. Nous vous recommandons d'utiliser le fichier directement.
Cette fois, j'ai créé un logiciel pour obtenir les informations publiées dans PeeringDB via API. Il est très pratique d'obtenir des informations publiques de PeeringDB lors de la création d'une base de données d'informations d'entreprise et d'informations sur le réseau qui est Peering avec votre propre réseau. Veuillez l'utiliser si vous avez une chance.
Recommended Posts