140 | 141 |  142 | 143 |
144 | 145 | **Client :space_invader:** 146 | 147 | > The core part of Hulk is the `Hulk client` aka `Hulk.py`. \ 148 | This client\bot launches a barrage of `asynchronous HTTP requests` to the target server. \ 149 | These incoming requests, put a burden on the target and makes it slow to respond. \ 150 | With the launcher script, we can launch multiple instances of Hulk using `multi-threading`. \ 151 | The target will be hit with so many requests that it will ultimately break into a `500 error`. \ 152 | Usually, the client completes 500 attacks and sends back the list of status messages. \ 153 | In case of special events, the client will immediately send an Interrupt message to the server. \ 154 | Example Special Events: *Successful DDoS*, *404 Target Not Found*, etc. 155 | 156 | **Server :computer:** 157 | 158 | > Hulk was originally a single instanced DoS script. However, it has been modified to be run as multiple instances. \ 159 | The cluster of many such instances is called a `botnet`. And this botnet can be controlled and monitored by the `Server`. \ 160 | The `Server` and `Client` communicate with each other through TCP `WebSockets`. 161 | Based on the settings, this is usally a persistent bidirectional channel. \ 162 | In case the server receives `Interrupts` from a client, it will send out a broadcast message to all the clients, asking them to stop the attacks. \ 163 | The clients go to Standby mode and await further instructions from the server. 164 | > 165 | > The server can also send information to the GUI to keep a track of the botnet. \ 166 | This information is sent via Unix\Windows `Named Pipes` for low latency `IPC`. 167 | 168 | **GUI :desktop_computer:** 169 | 170 | > The GUI is a `NextJS` web application that is used to monitor the botnet via Named Pipes. \ 171 | When run as a binary, GUI makes use of `Electron` which exposes the information directly to the Frontend. \ 172 | When run as a Node process, a node server listens to the Named Pipe and passes on the information to a HTTP Streaming API. \ 173 | Then the frontend will pick it up from the API using `EventSource`. 174 | 175 |