Git Product home page Git Product logo

hochwasser's Introduction

๐ŸŒŠ๐ŸŒŠ๐ŸŒŠ Hochwasser ๐ŸŒŠ๐Ÿคฝ๐ŸŒŠ

Highly efficient distributed Pixelflut client.

  • Sends static images, text, generated patterns (animations upcoming)
  • REPL enables fast iterations
  • CnC server + client architecture (it's webscale!) (can also run in a single process)
  • Faster than sturmflut (in some benchmarks at least)
  • No dependencies (pixelflut apparently was considered a primary use case in the design of golang's stdlib ๐Ÿ‘)

testimonials

Pixelflut endlich durchgespielt.

  • Steffen Cybert

N-no more micro-ddosing: bring on ssome Hochwasser and exppperience colors never seen befffore!1!

  • Morty

Hochwasser brings back the D in social DDoSing! Man, I forgot which one..

  • Doc Brown

build / install

  1. have a go installation >= 1.12
  2. go get github.com/SpeckiJ/Hochwasser
  3. go install github.com/SpeckiJ/Hochwasser

The help texts may be lacking, it's recommended to read rpc/repl.go.

hacking

Look at the github.com/SpeckiJ/Hochwasser/pixelflut subpackage, it contains the performance sensitive core.

The code is getting somewhat bloatedenterprise-ready, so if you want to quickly render a fun thing, it may be easier to just build a separate executable on top of pixelflut.Flut(), than to extend Hochwasser.

benchmark

The following benchmark was run on a max-spec X280 against version d4c574b.

I could not figure out what the performance bottleneck is, but it doesn't seem to be CPU limited, as turbo-boost doesn't kick in.

To reproduce, run the following commands in separate shells:

iperf -s -p 1234
go run main.go -image benchmark/test.png -connections 10

screenshot: 55 Gbps of hochwasser

55 Gbps on average! ๐ŸŒŠ๐ŸŒŠ๐ŸŒŠ

sturmflut (./sturmflut 127.0.0.1:1337 benchmark/test.png -t 10, version 8ec6ee9) managed to get 48 Gpbs throughput on this system.

Hint: Benchmarking throughput against the pixelnuke server is pointless, as performance is then CPU-limited to ~1 Gbps by the server. Using iperf removes the server limitation. This also means that these metrics of several Gbps are far higher than realworld scenarios.

future ideas

see IDEAS.

hochwasser's People

Contributors

6543 avatar noerw avatar speckij avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

hochwasser's Issues

Feature request: Offset abuse, stripped hex

Offset abuse

Most servers (pixel, pixelflut-server-dotnet, shoreline...) support
OFFSET <x> <y>

Depending on the screen size, abuse of OFFSET yields a significant efficiency increase in efficiency.
By splitting the image into blocks (e.g. 100x100 or 10x10), prepending each block with an offset command and sending relative coordinates the amount of bytes sent can be reduced.

For a 1280x720 full hex image, a block size of 100x100 yields a 12% reduction in bytes to be transmitted.
A block size of 10x10 yields a 22% reduction.
Potential efficiency gain scales with canvas size.
The theoretical maximum is yet to be determined, and further optimization is possible by dynamically adjusting block size.

When using a fixed number of connections/threads with multiple blocks being handled by one connection, the blocks need to be sent sequentially and ideally as a concatenated byte stream.

Stripped hex

When sending hex values with less than 6 digits, servers seem to behave the same and add leading zeroes. All hex values can be optimized by stripping up to 5 zeroes from the left.

[bug] align command line arguments with REPL functionality

Currently the command line does not support all functionality the REPL offers. Especially for automated deployments it would be useful to align both options into a central struct.

Currently missing from CLI:

  • metrics
  • offset rand
  • rgbsplit
  • txt
  • rotation
  • scale

Missing from REPL:

  • cpuprofile not trivial nor meaningful to add

[feature] bomb preview

Currently when connecting to a rรกn c&c a client has no idea of knowing what is currently being pushed.

It would be cool to see a preview of what is currently pushed by a specific machine, especially when pushing with multiple people in different physical locations. Else only the human using the c&c REPL knows.

[feature] quiet/verbose toggle

The REPL can get pretty spammy with "No connection"/"attempt failed" messages (e.g. when getting locked out because of BBR fun).

Toggling all error messages off would be quite useful else the REPL is practically unusable.

Example:
spammy

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.