Download

Releases

Notice: clumsy only support Windows Vista, Windows 7 and above. 64bit Windows users are strongly recommanded to download the 64bit build.

0.3 RC3 - See here

0.2 - Updated WinDivert to 1.1.7.

Install

Extract downloaded zip file to arbitrary directory and execute clumsy.exe. clumsy is alpha quality software and does have some gotchas. Be sure to read the manual page before using it.

Build

0.3 Build

Prerequisites

  • git
  • genie - for build generation
  • Visual Studio 2019 - for debug builds and devlopment
  • MSYS2 - for release builds

For development we'll generate VS2019 solutions with genie and it should just work:

git clone https://github.com/jagt/clumsy.git 
cd clumsy
genie vs2019
            

Then open generated solution under build folder.

For building binaries that ship to users we choose to use the MSYS2 toolchain. After installation you'll need to install clang for 32/64 builds in the MSYS2 console.

pacman -Syu
pacman -S make mingw-w64-x86_64-clang mingw-w64-i686-clang
            

Say we have MSYS2 installed at C:\msys2. We'll need to setup correct path for 32/64bit builds seperately:

git clone https://github.com/jagt/clumsy.git 
cd clumsy
genie gmake

set PATH=C:/msys64/mingw64/bin;C:/msys64/usr/bin/                
make -C build config=release64

set PATH=C:/msys64/mingw32/bin;C:/msys64/usr/bin/
make -C build config=release32
            

It should produce builds that has minimal dependencies and works everywhere.

0.2 Build

If you have Visual Studio 2012 or TDM-GCC 4.8.1 installed then building is rather easy. Currently no other environment is supported.

Clone the repository. Then you'll need premake 4.4-beta5 to build the solution or makefiles. premake currently can only generate VS2010 solution file. Open it in VS2012 and choose upgrade works fine. All external dependencies are included in the repo, so it should build out of the box.

git clone https://github.com/jagt/clumsy.git 
premake4 vs2010
premake4 gmake
            

If you choose to build using VS2012, remember the runtime MUST be dynamically linked. This is due to provided library binaries are using dynamic runtime. This means if you want to distribute your builds, the user needs to install VS2012 runtime. It is recommended to use the awesome TDM64-GCC 4.8.1 to build the project. It would generate binaries without other dependencies execpt those are included here. This is also how the provided clumsy binaries above are built.

mingw32-make -C build CC=gcc config=debug32
mingw32-make -C build CC=gcc config=debug64
mingw32-make -C build CC=gcc config=release32
mingw32-make -C build CC=gcc config=release64
            

Acknowledgements

Here's a list of things used to build clumsy.

  • WinDivert used to handle the magical Windows packet capturing/reinjecting. It installs network drivers at runtime and removes it when closing, encapsuled the underdocumented Windows Filtering Platform, does a bunch of things that non Windows developers can hardly figure out how in years. WinDivert jam all these into a handful of functions for you to use for free, while similar commercial solution costs thousands.
  • IUP Portable User Interface ANSI C library to build native cross platform GUI. It's so wonderfully designed and you can pick it up in a single day, and it's a full funcion GUI toolkit in C. Think about it.
  • LICEcap free and open source gif capturing that just works.

Similar softwares

Here's a list of simlilar softwares aiming to solve the same problem, provided in case of looking for alternatives.

  • Network Emulator for Windows Toolkit (Windows) - network emulator provided by Microsoft.
  • ipfw or pfctl (FreeBSD/OSX) - low level packet filter.
  • wipfw (Windows) - ipfw Windows port with only a subset of functions.
  • netem (Linux) - Linux kernel supported network emulation.
  • tc (Linux) - Configure traffic control in the Linux kernel.
  • Throttle (Mac) - Simulate 3G network through shared wireless network.
  • Network Link Conditioner (Mac) - XCode bundled network conditioner.

License

The MIT License (MIT)