Traffic Generators

From Network Security Wiki


Siege

Siege is an open source stress / regression test and benchmark utility.

siege -c100 -t30S -d10 -b -v aman.info.tm

Some Extensions

--header="Cookie: SESSb43b2d1d084de3872c89b0b125b64564=Jafuk06rppYAXIxWaU0LY2VmqxN997DsKU3BSgfArCM" 
-f /path/to/some-urls.txt

The some-urls.txt file is just a simple list of URLs on newlines:

http://www.mywebsite.com/about-us
http://www.mywebsite.com/contact-us

Httperf

Installation:

sudo apt install httperf

Usage:

httperf --server waf.avitest.com --port 80 --num-conns 100 --rate 10 --timeout 1

Curl

curl -s -o /dev/null -w "%{http_code}" http://waf.avitest.com
seq 100 | parallel -j0 curl -s -o /dev/null -w "%{http_code}" http://waf.avitest.com
for i in `seq 1 99999`; do echo "Status Code:"; curl -s -o /dev/null -w "%{http_code}" https://10.1.1.1; sleep 1; done

Apache Benchmark

ab -t 1 -n 1000 -c 300 http://waf.avitest.com/

Increase Apache MaxClients (now called MaxRequestWorkers in new versions) on Backend Server:

sudo nano /etc/apache2/mods-available/mpm_event.conf
MaxRequestWorkers         1000
ServerLimit         565

Locust

Installation:

sudo apt-get update
sudo apt-get -y install python-pip python-dev libxml2-dev libxslt-dev
sudo pip install locustio

Install pyzmq for tests across multiple servers to increase the testing capacity:

sudo pip install pyzmq

Set file limit to unlimited to ensure there is no OS problems with files at concurrency:

ulimit -n 9999


Locust File

Single “task” which gets a specific webpage:

from locust import HttpLocust, TaskSet, task

class UserBehavior(TaskSet):

    @task
    def get_something(self):
        self.client.get("/something")

class WebsiteUser(HttpLocust):
    task_set = UserBehavior


The test below logs a user in to groupster then requests what will be their home page 1 time for every 3 times it requests a group page:

from locust import HttpLocust, TaskSet

def login(l):
    l.client.post("/login/process", {"email":"me@someemail.com", "pass":"password"})

def index(l):
    l.client.get("/")

def group(l):
    l.client.get("/group/1/")

class UserBehavior(TaskSet):
    tasks = {index:1, group:3}

    def on_start(self):
        login(self)

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait=5000
    max_wait=9000

Executing

Upload the locust test file (Click here to see how to make a locust testfile) Exec this command (this only starts the interface to control the tests it doesnt actually start a test):

locust -f ./test.py --host=http://somedomain.io --master

You will get this:

SHOW LOCUST PICS HERE

Go to the web interface to control the test variables and to start and stop it.


Running on multiple hosts:

You will have a master slave setup where only one master exists.

Run the "running a test" steps on each node you want to have as part of the testing cluster but on each slave you should exec this instead:

locust -f ./test.py --host=http://somedomain.io --slave --master-host=x.x.x.x

Where x.x.x.x is the ip of the master you would have set up in the "running a test" section.

You will only need to use the one admin interface provided my the master. It should report whether the slaves are correctly setup and activey serving traffic.


Distributed Mode

Running locally is fine for basic testing and getting started with Locust, but most applications will not receive a significant load if you’re just running it from your local machine. It’s almost always necessary to run it in distributed mode. This is easy to do with a couple AWS nodes.

After installing Locust and moving your locustfile.py to all nodes, you can start the “master” node:

locust --host=http://localhost:5000 --master

Then start any “slave” nodes, giving them a reference to the master node:

locust --host=http://localhost:5000 --slave\
 --master-host=192.168.10.100

Slowhttptest

Source: ubuntu.com

        This section is under construction.


References





{{#widget:DISQUS |id=networkm |uniqid=Traffic Generators |url=https://aman.awiki.org/wiki/Traffic_Generators }}