-This software is to be used for experimentation with the CXP (Control eXchange Point) concept and is associated with the following publications: TBA

-Disclaimer: this README will be refined according to code user experience. This is only an initial basic version.

-The repo contains the full code regarding CXP-based experiments, running version.

-Main run file: go to main_scripts/bash and run: sh If you want to experiment with the different data sources and parsers you can modify this file accordingly.

-Contact Vasileios Kotronis ( for more details if required.


general pre-requisites (be careful with the order of installation!):

apt-get install python-bs4 #for html parsing

apt-get install python-lxml #for xml/html parsing

use to install easy_install

sudo apt-get install python-pip

sudo easy_install scipy #scientific tools for Python

sudo easy_install numpy #numerical computations with Python

sudo easy_install scikits.statsmodels #scipy toolkis and statistical models, use its api

sudo pip install statsmodels #upgraded statsmodels version

sudo easy_install matplotlib #for network graph visualization

sudo apt-get install libgeos-dev #for the geolocation plots (pre-req for basemap)

sudo easy_install basemap #for the geolocation plots (main library)

sudo easy_install networkx #for network graph visualization

use #to install SubnetTree

sudo easy_install geoip2 #for the geoip database handling #and install the GeoLite2-City.mmdb binary under "data/ixp_mapping"

ATTENTION: In case more packages are required in your platform, please contact us. This README file will be accordingly updated.


Instructions for the code in data_parsers/ixp_mapping:

This code has only been tested with Python 2.7. It may not function correctly with Python 3.x. It WILL NOT function correctly on older versions of Python, due to extensive use of functionality that has only been made available in Python 2.7. The author has attempted to conform to Google coding guidelines ( However, there is no guarantee that the code is fully compliant.

Required modules: Many internal modules, including Numpy. Apart from those, the following external modules:

NetworkX - General graph theory module. Used extensively.

NetAddr - Use for operations on IP prefixes. Only version 0.7.7 (possibly older, but not tested). New versions will not work correctly, as the internal IntSet module is used directly for efficiency reasons (and has been removed in the latest version). If desired, the code in can be adapted so that the IPSet class is used instead (the author found its performance, with respect to the union operation, unsatisfactory for usage here).

SubNetTree - implements Patricia trees in Python. Used for IP -> AS conversion.

Matplotlib - Plotting library for Python. Used for visualisation.

Except where otherwise stated, the latest version should be used.