Skip to content

fabiovalse/Visolario

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Visolario

Isolario is a project aimed to observe, collect and analyse real-time Internet routing data. The Visolario project is a collaboration between Isolario and the WAFI research group of the Institute of Informatics and Telematics of the CNR in Pisa focused on finding visual representations suited for the visualization of the Autonomous System (AS) topology and the BGP routing data.

This repository documents how data coming from the Isolario project has to be properly pre-processed in order to be visualized.

VisolarioData

The VisolarioData class allows to load, transform and analyse data coming from Isolario. To create a new instance:

from VisolarioData import VisolarioData

visolario = VisolarioData(tier1, topology, as_details)
  • tier1 is a list of AS numbers;
  • topology is a list of links expressed as lists containing first the source AS number and then the target AS number;
  • as_details is a list of objects containing attributes about ASes such as AS number, regional Internet registry (RIR), name, IP versions and geolocation.

# .partition()
Starting from the topology input, it is possible to create a graph where nodes are ASes and links the relationships defined in topology. This method partitions the graph into n groups P1, P2, ..., Pn according to the following procedure:

  1. The first partition P1 is given by the set of ASes belonging to tier1;
  2. P2 is computed starting from P1 and it is composed by the nodes directly linked to the ones contained in P1;
  3. Pn is computed starting from Pn-1 and it is composed by the nodes directly linked to the ones contained in Pn-1. This step is iteratively computed until no nodes remain.

# .get_hierarchy(keys)
The partitions created with the .partition() method can be hierarchically structured using get_hierarchy(). The keys input (a list of strings) defines which attributes (contained in as_details) will be used for grouping ASes. For instance, the IP version or the RIR can be used to this aim.

visolario = VisolarioData(tier1, topology, as_details)
visolario.partition()
hierarchy = visolario.get_hierarchy(['ipv', 'rir'])

The method returns a tree where each partition is hierarchically structured according to the input keys. This method uses a D3.js porting of d3.nest called nesting 0.1.0.

By printing the hierarchy it is possible to obtain a structure like:

{
  "children": [
    {
      "id": "group1",
      "children": [
        {
          "id": "v4",
          "children": [
            {
              "id": "ARIN",
              "children": [
                {
                  "ipv": "v4",
                  "rir": "ARIN",
                  "group": 1,
                  "id": "1",
                  "label": "LVLT-1 - Level 3 Communications, Inc."
                },
                ...
              ]
            },
            {
              "id": "RIPE NCC",
              "children": [...]
            },
            ...
          ]
        },
        {
          "id": "v4+v6",
          "children": [...]
        },
        {
          "id": "v6",
          "children": [...]
        }
      ]
    },
    ...
    {
      "id": "groupn",
      "children": [...]
    }
  ...
  ]
}

Releases

No releases published

Packages

No packages published

Languages