diff --git a/client/bin/bgpranking b/client/bin/bgpranking index 3035299..811d2fe 100755 --- a/client/bin/bgpranking +++ b/client/bin/bgpranking @@ -16,10 +16,20 @@ from datetime import date, timedelta if __name__ == '__main__': parser = argparse.ArgumentParser(description='Run a query against BGP Ranking') parser.add_argument('--url', type=str, help='URL of the instance.') - group = parser.add_mutually_exclusive_group(required=True) + parser.add_argument('--date', default=date.today().isoformat(), help='Date of the dataset required') + sub_parsers = parser.add_subparsers(title='Available commands') + + index_query = sub_parsers.add_parser('index') + index_query.add_argument('--limit', default=100, help='Max number of ASN to get') + index_query.add_argument('--family', default='v4', help='v4 or v6') + index_query.set_defaults(which='index') + + simple_query = sub_parsers.add_parser('simple') + group = simple_query.add_mutually_exclusive_group(required=True) group.add_argument('--asn', help='ASN to lookup') group.add_argument('--ip', help='IP to lookup') + simple_query.set_defaults(which='simple') args = parser.parse_args() @@ -30,13 +40,16 @@ if __name__ == '__main__': bgpranking = BGPRanking() ipasn = IPASNHistory() - if args.ip: - response = ipasn.query(args.ip) - print(json.dumps(response, indent=2)) - if 'response' in response and response['response']: - asn = response['response'][list(response['response'].keys())[0]]['asn'] - else: - asn = args.asn + if args.which == 'simple': + if args.ip: + response = ipasn.query(args.ip) + print(json.dumps(response, indent=2)) + if 'response' in response and response['response']: + asn = response['response'][list(response['response'].keys())[0]]['asn'] + else: + asn = args.asn - response = bgpranking.query(asn, date=(date.today() - timedelta(1)).isoformat()) + response = bgpranking.query(asn, date=(date.today() - timedelta(1)).isoformat()) + elif args.which == 'index': + response = bgpranking.asns_global_ranking(address_family=args.family, limit=args.limit, date=args.date) print(json.dumps(response, indent=2)) diff --git a/client/pybgpranking/api.py b/client/pybgpranking/api.py index 31a6fe9..9fc8d27 100644 --- a/client/pybgpranking/api.py +++ b/client/pybgpranking/api.py @@ -10,6 +10,7 @@ from typing import Union import requests from urllib.parse import urljoin +from datetime import date class BGPRanking(): @@ -40,3 +41,9 @@ class BGPRanking(): to_query['source'] = source r = self.session.post(urljoin(self.root_url, '/json/asn'), data=json.dumps(to_query)) return r.json() + + def asns_global_ranking(self, date: str=date.today().isoformat(), address_family: str='v4', limit: int=100): + '''Get the top `limit` ASNs, from worse to best''' + to_query = {'date': date, 'ipversion': address_family, 'limit': limit} + r = self.session.post(urljoin(self.root_url, '/json/asns_global_ranking'), data=json.dumps(to_query)) + return r.json()