Home

Awesome

Modified Wehe Server for MobileAtlas

This repository contains a modified version of the Wehe server used to detect economic differentiation in mobile networks via traffic replaying using the MobileAtlas measurement platform.

Project Overview

The Wehe Project

Wehe is a project that provides a framework for detecting differential treatment of network traffic — i.e. the blocking or throttling of specific types of traffic. WEHE provides a mobile client allowing volunteers to check whether their ISP throttles some applications' traffic — it offers tests for select commonly used apps such as YouTube, Netflix, and Skype. The mobile client communicates with a server to replay the prerecorded traffic captures twice — first unaltered and then as control traffic by transforming the original payloads, thus preventing the control traffic from being correctly classified and throttled. The server then compares throughput samples collected during the two replays to determine the presence of differential traffic treatment. Because of the use of a custom replay server, WEHE cannot detect traffic differentiation that is IP address based.

MobileAtlas

MobileAtlas is a measurement platform for experiments with cellular network roaming. It consists of multiple probes hosted in different countries, each having a modem and a wired internet connection. The novel approach taken by MobileAtlas is that instead of each Probe having its own fixed sim card, communication between the modem and the sim card gets tunnelled over the internet. This approach enables the geographic decoupling of sim cards and probes, leading to better scalability and flexibility.

MobileAtlas Wehe Tests

To create our tests, we recorded network traffic of five different applications: WhatsApp, Snapchat, Facebook Messenger, FM4 (an Austrian radio station) app, and FM4 web client.

We installed the applications and connected the phones to a Wireguard VPN to intercept and record network traffic. The image below shows the VPN setup: The phone sends/receives network traffic over the VPN tunnel to/from a Laptop (sitting in the same local network), recording the VPN traffic that acts as a router and forwards all packets to the internet.

<picture> <source media="(prefers-color-scheme: dark)" srcset="./graphics/VPN-setup-whitebg.svg"> <source media="(prefers-color-scheme: light)" srcset="./graphics/VPN-setup.svg"> <img alt="Shows the described setup used to record application traffic" src="./graphics/VPN-setup-whitebg.svg"> </picture>

With this setup, we recorded different usage patterns of the applications — trying to make sure recordings are at least 1MB in size — e.g. with Snapchat we recorded a session only using the Spotlight feature (snapchat_spotlight_1.mp4).

These recorded pcaps can be found in the pcaps/ directory. This directory also contains screen captures showing how the applications were used while recording the pcaps. NOTE: Most recordings were made on iOS; the few Android recordings are labelled accordingly and contain android in their file names.

Running our tests involves installing the modified client on MobileAtlas probes in different countries and running replays of applications included in a zero-rating offer against the modified replay server. Supposing the ISP's traffic classification infrastructure uses the TLS SNI extension or the HTTP Host header to decide whether to zero-rate traffic, some replayed conversations should be zero-rated and thus not incur any cost. Next, we request data from a service not included in a zero-rating offer to determine whether non-zero-rated traffic is billed as expected (and also to detect whether the replay traffic has been included in its entirety in the current bill).

<picture> <source media="(prefers-color-scheme: dark)" srcset="./graphics/MobileAtlasWehe-whitebg.svg"> <source media="(prefers-color-scheme: light)" srcset="./graphics/MobileAtlasWehe.svg"> <img alt="Depicts the described experiment setup" src="./graphics/MobileAtlasWehe-whitebg.svg"> </picture>

Changes to the Wehe Server

We implemented the following changes while integrating Wehe into the MobileAtlas framework:

Supporting multiple TCP and UDP conversations per test

Initially, Wehe supported only one TCP/UDP conversation per Test. Our changes make it possible to create tests from PCAP files that contain many TCP and UDP streams and thus allow tests to better reflect the behaviour of the actual applications.

<picture> <source media="(prefers-color-scheme: dark)" srcset="./graphics/ModifiedWehe-whitebg.svg"> <source media="(prefers-color-scheme: light)" srcset="./graphics/ModifiedWehe.svg"> <img alt="Portraits the support for multiple TCP/UDP conversations per test" src="./graphics/ModifiedWehe-whitebg.svg"> </picture>

IPv6 support

We added support that allows replaying conversations that happened over IPv6. It is impossible to replay network traffic that was initially IPv6 over IPv4 and vice versa. If a replay client cannot use IPv6, all IPv6 traffic is skipped while replaying. To allow the replaying of IPv6 traffic even when IPv6 is unavailable, we introduced an option in the replay parser (the program responsible for parsing pcap files to create tests) that allows translating all IPv6 traffic to IPv4.

Removal of analysis server

Since we want to study economic differentiation, we do not start the analysis server that performs the statistical analysis to detect DPI-based throttling via throughput data.

Changes in test generation

The replay parser (the program that parses pcap files to generate Wehe test files) ignored all conversations with Apple IP addresses (17.0.0.0/8) by default. Therefore, we removed this filter to keep the replays closer to the original recordings.

Adding new Tests

Record the traffic by using tcpdump, e.g., running tcpdump while watching a video and save the pcap file as app1.pcap. We will use the parser script to process the pcap and create the replay files (in JSON/Pickle format) that can be used by the client and server.

Assume the pcap is stored in the/dir/to/pcap.

10.10.10.2
fc00::2
sudo docker run -it --rm -v "the/dir/to/pcap":/replay_folder --entrypoint /usr/bin/env wehe python
replay_parser.py --pcap_folder="/replay_folder" --convert_to_ipv4=<true|false>
python replay_parser.py --pcap_folder=the/dir/to/pcap --convert_to_ipv4=<true|false>

About the Code

Usage

How to run a replay step by step:

Set up Wehe server:

Instructions on how to use the modified Wehe client can be found in its repository.

NOTE: Running the server outside of a container requires python 2.7 and the dependencies in requirements.txt. It also requires tshark, openssl, and tcpdump to be installed.

Containerization

This API has been containerized. To run it within a container first go to the cloned directory and build with

sudo docker build . -t wehe

Then run with

sudo docker run -v <where/the/certs/are>:/wehe/ssl -v <where/to/save/the/output/on/host>:/data/RecordReplay --env SUDO_UID=$UID --net=host -itd wehe

Remove d from -itd to run outside of detached mode and see the output in STDOUT

Funding

This project is funded through the NGI0 PET Fund, a fund established by NLnet with financial support from the European Commission's Next Generation Internet programme, under the aegis of DG Communications Networks, Content and Technology under grant agreement No 825310.