In September 2015,
traceroute bad.horse pops out on Twitter.
When I type this command in terminal, the lyrics of Bad Horse appear on the output.
My first thought was: that's so cool!
My second thought was: how did they do that?
As a PhD student doing network research, it doesn't take me too long to figure out the underlying mechanisms. And I want to do something better: let everyone have their own "traceroute bad.horse".
What it does
And here comes the TraceArt project: anyone can submit their favorite quotes, lyrics, or poem, and turn it into a traceroute destination that can display these text.
How we built it
TraceArt has 3 major modules:
- Frontend web page, which allows user to submit the quotes / lyrics / poem.
- Backend services, which accepts the submission, assigns a block of IP addresses, and provisions reverse DNS records for those addresses to display each line of text.
- A hop emulator, which emulates multiple network hops when a destination is being tracerouted to.
Since there's no more IPv4 addresses left, TraceArt is built to work on IPv6 network. IPv6 connectivity comes from HE TunnelBroker.
Challenges we ran into
ICMPv6 checksum computation is one of the headaches. Wireshark is constantly reporting "incorrect checksum" and traceroute will not work without a correct checksum. We carefully read the protocols again, debug the code, and identified then fixed the issue.
Accomplishments that we're proud of
Ruoyu is a beginner that learnt a bit of Python last semester and does not have knowledge on network protocols. Junxiao explains the network protocols and programming techniques, so that Ruoyu successfully wrote backend scripts that generates DNS server configuration files.
What we learned
We had a deeper understand on IPv6 protocols, and gained experience on collaboration between experienced and inexperienced developers.
What's next for TraceArt
The frontend web page can allow uploading a greyscale picture, which is then converted into a matrix to be displayed on traceroute output.
Security of the backend services needs improvement.