Introduction

Wireless Network Reproduction (aka WNR) is a network emulator which allows developers to exactly reproduce any kind of terrible network condition on your own mobile device, or even Android/iOS emulators running on Mac OS.

Features

Aspects that can be controlled by WNR include:

You could run WNR in two different mode:

  1. Gateway Mode: First share your internet connection through Internet-Sharing, and then WNR would shape / interfere the network traffic between your MacBook and your mobile device, just like a router.
  2. Emulator Mode: Just start an Android / iOS emulator, specify the process name in WNR, and then you will have emulated network condition in your virtual machine. In this mode you don't need a real mobile phone.

Advantages

Requirements

Download

For Chinese users, please download WNR through Baidu Yun.

For other users, check Github releases for latest build.

Getting Started

  1. Download WNR from URL links above.
  2. Extract and save it into your hard drive.
  3. Run this app, click "Network Emulator" button, and enter your root password.
  4. If this is your first time to run this, you need to disable kernel extension checking according to the prompt.
  5. Restart your Mac and run this app again, you may see the emulator interface shown above.
  6. Click "Add Configuration" and select a default configuration or your customized ones.
  7. If you need to inspect on packets transmitted from / to your device, then select a position to save .pcap files.
  8. If you want to run emulation on real device, then start "Internet-Sharing" of macOS, and switch emulator mode to "WiFi" instead of "Local".
  9. If you want to run emulation on Android virtual machine, you need to specify the PID or process name ("vboxheadless" for VirtualBox based Android emulators) of your Android emulator.
  10. Finally, when everything is ready, click "Start" and check if the emulator is working as expected.

Notice

Examples

Network Emulation

The following animation shows the basic usages of WNR.

Bandwidth Limitation

The following animation shows how to limit bandwidth of a specific process such as wget.

TCP Connection Analyze

We use a time-related function bandwidth(t) = 256 + 1024 * sin(t/4) (KB/s) to emulate some sort of dynamic bandwidth limitation, and then use TCP data visualization of WNR to show the actual bandwidth variation, which results in the figure shown below:

Contributions

Please use Github issues for requests.

We guarantee that we will try our best to meet the need of new features / bug fixes in first 30 issues; and we actively welcome pull requests.

ChangeLog

Changes are tracked as Github commits and releases.

License

Wireless Network Reproduction is BSD-licensed.