Git Product home page Git Product logo

webroutes's Introduction

WebRoutes Image

#WebRoutes: Internet mapping artware

WebRoutes is a critical artware project that provides users with a window into the Internet infrastructure and geopolitical network topology that is inherently invisible to them as they browse the web. Viewing a website is much more than an exchange between you and that website. WebRoutes illustrates how every HTTP request can mean crossing country borders and interacting with dozens of companies who own and control portions of Internet infrastructure a webpage must use to get to your computer. By visualizing an augmented traceroute process, WebRoutes identifies the Autonomous Networks (AS), ISPs, Internet Exchange Point (IXP) crossings, and Submarine Cables that work together to ping-pong TCP/IP packets back and forth from web browsers to servers. By elongating a process that usually takes milliseconds, WebRoutes allows users to follow, analyze, and draw conclusions about the intricate, often counter-intuitive, paths their packets take on their journey through the Internet.

Accuracy

WebRoutes is a digital literacy artware project and should not be used as a network diagnostic tool. Tracking a network packet's journey across the Internet is a very difficult task. The protocols that network packets use to traverse the Internet do not provide sufficient information to accurately model their route topology, yet alone convert IP addresses to geolocations. Tools like traceroute, tracert, and mtr subvert elements of network protocols in ways that allow them to be used as route mapping tools, however, the Internet is not designed in a way that makes this easy or accurate. For this reason, we've taken the liberty of making quite a lot of assumptions, generalizations, and flat-out guesses about the information that WebRoutes provides. The tools and APIs that we've utilized to build WebRoutes has been in the interest of painting "the big picture" of Internet infrastructure. To see how/what we used to detail this journey see the Approach section below.

Download

WebRoutes is not yet available for download, but we expect to publish our first release by October 2016.

Approach

Resources/Libraries

WebRoutes is released under the GPL and is free to use, edit, copy, and distribute our code.

Code

WebRoutes is built with Node.js and bundled/distributed with NW.js. It uses the traceroute command underneath.

See "dependencies" in nw-app/package.json for a list of all dependencies.

Data

WebRoutes uses data from Telegeography's Submarine Cable Map and
Internet Exchange Map projects. Ocean and country border map data are provided by Natural Earth and thematicmapping.org respectively. Geo IP lookup service is provided by ip-api.com.

Geolocation from IP Address

We've found free IP Address to Geolocation services to be wildly inaccurate. Ip-api.com does not provide information about its sources, and we've found results for the same IP Addresses to vary greatly between paid services like IP2Location, ipinfo.io, EurekAPI, DB-IP, and MaxMind. We use ip-api as our main IP->Geo service, however, we also cross reference MaxMind's free GeoipLite2 IP->Country database to ensure that there is at least rough consensus that IP addresses are coming from the correct country. If we receive contradicting results from those two services we choose to ignore the IP address completely and not show the hop to the user.

IXP crossing detection

Detecting where exactly packets are handed off from one network to another is tricky. It should be assumed that whenever a hop's autonomous network differs from a previous hop, that network exchange likely occurred at an Internet eXchange Point. However, identifying exactly which IXP the exchange occurred at is nearly impossible. A new tool/paper on the subject called TraIXroute has made significant progress in augmenting traceroute with IXP cross detection information. Unfortunately, our experience found that it had very poor results in the United States, where we have been writing and testing WebRoutes.

Instead we chose to use an approach that favors detecting IXPs with a low confidence as to their accuracy over not showing IXP crossings at all. Each time two hops ASN (Autonomous System Number) differ we assume that an IXP was crossed, and identify that crossing to have occurred at the nearest IXP to the earlier hop. Because an ASN change between two hops provides no information as to which hop (from or to) actually facilitated the network exchange, our method should be considered very naive. A better approach would be to use publicly available data about IXP traffic (IXPs very greatly in their traffic throughput/activity, and while there are a great many IXPs around the world, only a handful of them exchange the majority of the world's Internet traffic) to preference IXPs with high daily activity.

webroutes's People

Contributors

brannondorsey avatar nbriz avatar

Stargazers

Niklas Wojtkowiak avatar  avatar Pranav avatar  avatar Alain Rafiki avatar dackdel avatar Álvaro García León avatar Holly Newlands avatar David Davidson avatar G. Torres avatar  avatar Aymane avatar GAURAV avatar  avatar Joshua Pollack avatar  avatar Tom Wrenn avatar  avatar Andrew Monks avatar Thad Kerosky avatar  avatar  avatar Christian Hochfilzer avatar Surya Mattu avatar

Watchers

Christian Hochfilzer avatar James Cloos avatar  avatar  avatar pbriz avatar  avatar povalles avatar Chris Mora avatar  avatar  avatar

webroutes's Issues

full screen shortcut

when u full screen on console window both windows fullscreen
but when u full screen on map, only the map fullscreens

nav yellow highlight bugs

  • when nav'ing over oceanic cables it sometimes adds direct yellow line across ocean that shouldn't be there

confirm geo2ip

used more than one api
check to see if all api results return same city
if so confidence level: strong
if not...
check to see if the next city is same as prior on all results from api
if so, go w/same city, if not... pick our favorite, confidence level: moderate

Summarize hops in the same location

After observing the route rendering we've got right now I think it might be a good idea to summarize hops that occur in the same location instead of showing each one by simply flashing/updating the text. Right now when 4 hops in a row are made in Chicago it feels like it disrupts the rhythm of the visualization. Perhaps we could display the summary something like: "Hops #2-5 in Chicago, Illinois, US."

gallery ready

  • come up w/a solid kiosk mode plan for IRL installation ( so folks don't exit out )
  • come up w/start up scripts && watch scripts
  • figure a way to kill Meta/Alt keys
  • detect screen ( 1 or 2 ) && place windows appropriately on launch
  • hide mouse && prevent mouse defaults
  • ensure that address bar is always in focus

idle mode

if no one's used it for 3mins ( or so ) fade everything out xcept instructions && url bar ( everything else reenters once there's activity )

what's my IP

figure out some kinda "what's my IP" function, so we can mark where the request is coming from on a map

xplain limits...

...make it clear that this is a "best guess" in part b/c the network is constructed in such a way as to only make "best guesses" possible

handle redirects

doesn't seem to behave as it's supposed to if u navigate to a page that redirects to another

Cables That don't show

if a submarine cable is in the last hop it won't draw the path
( it will highlight yellow when navigating though )

How to detect an IXP

Right now we are using a 25km radius around a hop to detect if that hop was perhaps located at an IXP. Perhaps we can use this metric + a change in ASN (Autonomous System Number) to more accurately tag IXP hops.

See also The Art of Peering.

Visualize hops on map

Map may include:

  • A sidebar panel with information about the traceroute (number of hops, time info, list of locations, etc...)
  • Specific routing paths for deep sea cables
  • Multiple traceroute paths for each page request

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.