-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 run.sh If you want to experiment with the different data sources and parsers you can modify this file accordingly.
-Contact Vasileios Kotronis (firstname.lastname@example.org) 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 http://pypi.python.org/pypi/setuptools 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 http://www.bro.org/download/README.pysubnettree.html #to install SubnetTree
sudo easy_install geoip2 #for the geoip database handling
http://dev.maxmind.com/geoip/geoip2/geolite2/ #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 (http://google-styleguide.googlecode.com/svn/trunk/pyguide.html?utm_source=Python+Weekly+Newsletter&utm_campaign=96df3e3c62-Python_Weekly_Issue_32_April_26_2012&utm_medium=email#Python_Language_Rules) 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 ipset.py 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.