During my Network study, I always admire the way that BGP works and operate. The black magic that handle how the packets are exit from one country (Autonomous System=ASN for short!) and enter the another without any “Boarding-Pass” or “Visa”. Not just that, but BGP strive to make the travel time and path is the shortest one amongst the available routes to destination using of exchanged path attributes between those ASN. very clever, robust and old
But as the internet routing table grows and number of assigned ASN increase each day, I think it’s become harder to visualize the interconnection between ASNs. Everyday a new ASN is being connected to a bunch of other ASNs and it’s really hard to trace those connections with just a raw data provided by Route Glass Servers or RIRs.
So I think it’s time to involve Python to solve this problem. Basically I tried to build a python module that answer the below questions:
1- How ASNs are being connected to each other given a list of ASNs?
2- How ASNs are being connected in one country?
3- Which ASNs are considered as an Service Provider or IXP? (has more than 15 BGP peering with other ASN)
4- Which ASN is considered an Upstream to a specific ASN? That will help in defining the ASN gateway for a country for example.
5- Which ASN is considered a Downstream (Customer) to a specific Service Provider (Operator)? and how are they distributed comparing to other Service Providers?
6- Finally I need all of that in one picture, visually! You know the old say,
A picture is worth a thousand words
I started developing a python module to address the above questions and in two days I have a promising prototype and able to visualize the first country then later on added a capability to visualize a portion set of ASNs. Final stage is adding some console logs for troubleshooting and publishing the package into PyPI . I called it (bgp_visualize) , Yeah, Couldn’t find a better one .
I tried to design the bgp_visualize to work with a minimum set of possible data. For example in case of visualizing BGP in specific country, you need to just provide the country code. However you can customize the way and look for the generated graph by providing few parameters like node_color , node_size , desired_background and so on.
Working on Module
First you need to install it (and install python 2.7 of course if you didn’t have it already in your machine)
pip install bgp_visualize
Using GUI (Pycharm IDE)
Open Settings | Project Interpreter | | Add New
Then search for bgp_visualize python module and install it
Then Run the below code to visualize a set of ASNs (You can run it also from Python native IDLE if you’re using Windows OS)
from bgp_visualize import bgp_visualize_asn ASNs= bgp_visualize_asn.bgp_visualize(asns=[8452,24835],dark=True) ASNs.Draw()
from bgp_visualize import bgp_visualize_asn country= bgp_visualize_asn.bgp_visualize(country='sa') country.Draw()
There’re a lot of screenshots for different BGP graphs are available in my Github page, so please check them out!. Also you can send me your generated graph and I’ll add it to the Github
bgp_visualize module use different colors to represent the Autonomous System role in the graph. below is the list of colors and meaning of each in the generated graph
First if AS is considered to be a service provider or IXP, then it will be colored with one of below colors
if AS is an upstream for specific ASN, then it will be colored as blue
ASN is Downstream:
Transit or not defined
I really enjoyed working on this package!.You can use it to troubleshoot and visualize any ASN in your network or in your country and understand the upstreams and downstreams for each one and easily identify the service providers, All in one graph!
For me, I had that idea long time ago to visualize every ASN, every connection, every prefix in the planet and draw them in nice and presentable way and I think this package is a good start, That’s my dream!.
Finally , I hope this has been informative for your and I’d like to thank you for reading.