/synner

A TCP SYN flood client written in Rust, powered by libpnet

Primary LanguageRustMIT LicenseMIT

Synner /'sɪnə'/

A TCP SYN flood client written in Rust, powered by libpnet


Prequisites

  • rustc/cargo v1.27.0
  • WinPcap for Windows for libpnet to work (see this)

Usage

cargo run TARGET_IP INTERFACE_NAME

In order to be able to pull the list of network interfaces, make sure that you are running in a terminal/command prompt with admin privilieges.

If you are not sure about the interface name, you can run the tool with a dummy value (e.g. \DEVICE\) and wait for it to print out the list of interfaces like so:

cargo run 192.168.33.10 \DEVICE\
   Compiling synner v0.1.0 (file:///C:/Users/juxhindb/Projects/synner)
    Finished dev [unoptimized + debuginfo] target(s) in 1.63s
     Running `target\debug\synner.exe 192.168.33.10 \DEVICE\`
List of Available Interfaces

Interface name: "\\Device\\NPF_{B1BBC7C0-C3CF-490B-A640-00ABDB86F989}"
Interface MAC: 0a:00:27:00:00:12
Interface IP: 192.168.99.1

Interface name: "\\Device\\NPF_{AD266AD1-7AE0-4360-8EE5-ED6283B43B9C}"
Interface MAC: 2a:56:5a:4f:fc:e9
Interface IP: 0.0.0.0

Interface name: "\\Device\\NPF_{2288F93F-E56C-4F71-8B8E-C385BE71421F}"
Interface MAC: 1a:56:5a:4f:fc:e9
Interface IP: 0.0.0.0

Where you can then copy the name. Be sure to unescape the \\.

Example

Running cargo run 206.189.96.237 \Device\NPF_{F94968E8-FBA0-410D-8CD3-F205AEAD4DC9} again a test DigitalOcean droplet. The GIF below is split into three panels. Bottom one running synner, top-right is an SSH connection running a TCP dump (sudo tcpdump "tcp[tcpflags] & (tcp-syn) != 0" -i eth0 -n) and the top-left is me attempting to make another SSH connection to the target machine once the target is being flooded.

foo