brutemachine

package module
v0.0.0-...-0331ad6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 3, 2017 License: GPL-3.0 Imports: 6 Imported by: 9

README

BruteMachine

This is a Go library which main purpose is giving an interface to loop over a dictionary and use those words/lines as input for some custom logic such as HTTP file bruteforcing, DNS bruteforcing, etc. Brute-Machine will take care of parallelism, job dispatching and so on, allowing you to focus on what matters most, the actual logic of your software.

baby-gopher

Example

The following is an example of how to use brutemachine to perform HTTP files bruteforcing.

package main

import (
    "fmt"
    "net/http"
    "strings"

    "github.com/evilsocket/brutemachine"
)

const base = "http://some-url.com/"

func DoRequest(page string) interface{} {
    url := strings.Replace(fmt.Sprintf("%s%s", base, page), "%EXT%", "php", -1)
    resp, err := http.Head(url)
    // Only pass valid responses to the handler.
    if err == nil && resp.StatusCode == 200 {
        return url
    }

    return nil
}

func OnResult(res interface{}) {
    fmt.Printf("@ Found '%s'\n", res)
}

func main() {
    m := brutemachine.New( -1, "dictionary.txt", DoRequest, OnResult)
    if err := m.Start(); err != nil {
        panic(err)
    }

    m.Wait()

    fmt.Printf("\nDONE:\n")
    fmt.Printf("%+v\n", m.Stats)
}

Installation

go get github.com/evilsocket/brutemachine

License

This project is copyleft of Simone Margaritelli and released under the GPL 3 license.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func LineReader

func LineReader(filename string, noff int64) (chan string, error)

LineReader will accept the name of a file and offset as argument and will return a channel from which lines can be read one at a time.

Types

type Machine

type Machine struct {
	// Runtime statistics.
	Stats Statistics
	// contains filtered or unexported fields
}

The main object.

func New

func New(consumers int, filename string, run_handler RunHandler, res_handler ResultHandler) *Machine

Builds a new machine object, if consumers is less or equal than 0, CPU*2 will be used as default value.

func (*Machine) Start

func (m *Machine) Start() error

Start the machine.

func (*Machine) UpdateStats

func (m *Machine) UpdateStats()

func (*Machine) Wait

func (m *Machine) Wait()

Wait for all jobs to be completed.

type ResultHandler

type ResultHandler func(result interface{})

This is where positive results are handled.

type RunHandler

type RunHandler func(line string) interface{}

This is where the main logic goes.

type Statistics

type Statistics struct {
	// Time the execution started
	Start time.Time
	// Time the execution finished
	Stop time.Time
	// Total duration of the execution
	Total time.Duration
	// Total number of inputs from the wordlist
	Inputs uint64
	// Executions per second
	Eps float64
	// Total number of executions
	Execs uint64
	// Total number of executions with positive results.
	Results uint64
}

This structure contains some runtime statistics.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL