clumsy 0.2

clumsy makes your network condition on Windows significantly worse, but in a managed and interactive manner.

Introduction

Leveraging the awesome WinDivert library, clumsy stops living network packets and capture them, lag/drop/tamper/.. the packets on demand, then send them away. Whether you want to track down weird bugs related to broken network, or evaluate your application on poor connections, clumsy will come in handy:

  • No installation.
  • No need for proxy setup or code change in your application.
  • System wide network capturing means it works on any application.
  • Support not only HTTP, any protocol based on TCP/IP is supported.
  • Works even if you're offline (ie, connecting from localhost to localhost).
  • Your application keeps running, while clumsy can start and stop anytime.
  • Interactive controll how bad the network can be, with enough visual feedback to tell you what's going on.

In Action

Here's a demo of clumsy working on a netcat listening for localhost udp packets, illustrated as animated gif.
If you figured out what's going on then go to Download page and give it a try! If not, scroll on:

Details

clumsy will choose which packets to capture by given filter, in which in can specify whether it's inbound or outbound, tcp or udp, socket port or ip, or a logical combination of many of those criterias. When started clumsy will only capture packets based on the filter, leaving others untouched.

After packets are captured, you can choose to enable provided functions to worsen perspective network condition:

  1. Lag, hold the packets for a short period of time to emulate network lagging.
  2. Drop, randomly discard packets.
  3. Throttle, block traffic for a given time frame, then send them in a single batch.
  4. Duplicate, send cloned packets right after to the original one.
  5. Out of order, re-arrange the order of packets.
  6. Tamper, nudge bits of packet's content.

Though nowadays it seems everybody have high speed broadband Internet connection, it's still important to face the fact that network transportation isn't always reliable. You don't want a duplicated UDP packet to crash your application. Properly handle this usually requires adding more code in their projects, and it's not always easy nor possible. Hopefully clumsy can provide an easy and painless (though suboptimal) option to do this for busy developers.

The project repository is on github. Download clumsy here. But before you actually use it, be sure to read the manual to know its capabilities and limitations.