ProbLink is a probabilistic AS relationship inference algorithm, which does inference based on key AS-interconnection features derived from stochastically informative signals. Learn more about ProbLink in our NSDI paper.
To get started using ProbLink, clone or download this GitHub repo.
Install Python dependencies
$ pip install --user -r requirements.txt
Prepare BGP paths
You can prepare BGP paths of your interest and save them to a file 'rib.txt'. The ASes on each BGP path should be delimited by '|' on each line, for example, AS1|AS2|AS3.
We provide a script (bgp_path_downloader.py) for downloading BGP paths collected from all route collectors in RouteViews and RIPE NCC towards IPv4 prefixes by using BGPStream. Follow the instructions to install BGPStream V2 first and then install pybgpstream.
$ python bgp_path_downloader.py -s <start date> -d <duration (in seconds)>
# for example, to download BGP paths on 06/01/2019 from all available route collectors
$ python bgp_path_downloader.py -s 06/01/2019 -d 86400
# BGP paths are written to 'rib.txt'.
Download AS to Organization Mapping Dataset from CAIDA
https://www.caida.org/data/as-organizations/
Download PeeringDB Dataset from CAIDA
Before March 2016: http://data.caida.org/datasets/peeringdb-v1/
After March 2016: http://data.caida.org/datasets/peeringdb-v2/
Parse downloaded BGP paths
$ python bgp_path_parser.py <peeringdb file>
# Output is written to 'sanitized_rib.txt'.
Run AS-Rank algorithm to bootstrap ProbLink
$ ./asrank.pl sanitized_rib.txt > asrank_result.txt
Run ProbLink
$ python problink.py -p <peeringdb file> -a <AS to organization mapping file>
<provider-as>|<customer-as>|-1
<peer-as>|<peer-as>|0
<sibling-as>|<sibling-as>|1
You can contact us at yuchenj@cs.washington.edu.
You may want to download the monthly inferred AS relationships here.