wifi 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  1. #!/bin/bash
  2. DELAY=2
  3. PREFERENCE_RANDOM_MAC_ADDRESS="mac_addr=1\npreassoc_mac_addr=1\ngas_rand_mac_addr=1"
  4. CONFIG_PATH="/etc/wpa_supplicant/"
  5. SETCOLOR_SUCCESS="echo -en \\033[1;32m"
  6. SETCOLOR_NORMAL="echo -en \\033[0;39m"
  7. SETCOLOR_FAILURE="echo -en \\033[1;31m"
  8. SETCOLOR_SEPARATOR="echo -en \\033[1;34m"
  9. SETCOLOR_MENU="echo -en \\033[1;36m"
  10. print_menu() {
  11. $SETCOLOR_NORMAL
  12. echo "\nWelcome to EWI"
  13. $SETCOLOR_SEPARATOR
  14. echo "\n:::::::::::::::::::::::::::::::::::::::::::::::::::"
  15. $SETCOLOR_MENU
  16. echo "\n0 - Exit"
  17. echo "\n1 - Scan wifi"
  18. echo "\n2 - Connect to wifi and generate config file"
  19. echo "\n3 - Connect to wifi (do not generate config file)"
  20. echo "\n4 - Disconnect to wifi"
  21. echo "\n5 - Print wifi configs"
  22. echo "\n6 - Delete wifi config"
  23. $SETCOLOR_SEPARATOR
  24. echo "\n:::::::::::::::::::::::::::::::::::::::::::::::::::"
  25. $SETCOLOR_NORMAL
  26. }
  27. kill_process() {
  28. # Kill it if wifi is work
  29. PROCESS_DHCLIENT=$(pgrep "dhclient")
  30. PROCESS_WPA_SUPPLICANT=$(pgrep "wpa_supplicant")
  31. if [[ "$PROCESS_WPA_SUPPLICANT" == [0-9]* ]]; then
  32. kill -15 "$PROCESS_WPA_SUPPLICANT"
  33. fi
  34. if [[ "$PROCESS_DHCLIENT" == [0-9]* ]]; then
  35. kill -15 "$PROCESS_DHCLIENT"
  36. fi
  37. }
  38. scan_wifi() {
  39. # Up wireless and scan to wifi points
  40. ip link set $WIRELESS up
  41. WIFI_LIST=$(iw $WIRELESS scan | grep -o "SSID: .*" | grep -o " .*")
  42. echo "$WIFI_LIST"
  43. }
  44. generateConfigFile() {
  45. # Save config file
  46. local CONFIG_FILE=$(wpa_passphrase $WIFI_SSID $WIFI_PASSWORD)
  47. echo -e "$CONFIG_FILE" > "$CONFIG_FILE_PATH" &&
  48. echo -e $PREFERENCE_RANDOM_MAC_ADDRESS >> "$CONFIG_FILE_PATH"
  49. }
  50. print_wifi_adapters() {
  51. clear
  52. for ((i=0; i < ${#WIFI_ADAPTERS__ARRAY[@]}; i++)) do
  53. echo "\n::::::::::::::::::::::::::::::::::"
  54. echo "\n ${i} ${WIFI_ADAPTERS__ARRAY[$i]}"
  55. done
  56. echo "\n::::::::::::::::::::::::::::::::::"
  57. }
  58. print_wifi() {
  59. clear
  60. for ((i=0; i < ${#WIFI_LIST__ARRAY[@]}; i++)) do
  61. echo "\n::::::::::::::::::::::::::::::::::"
  62. echo "\n ${i} ${WIFI_LIST__ARRAY[$i]}"
  63. done
  64. echo "\n::::::::::::::::::::::::::::::::::"
  65. }
  66. print_wifi_ssid() {
  67. clear
  68. for ((i=0; i < ${#WIFI_SSID_ARRAY[@]}; i++)) do
  69. echo "\n::::::::::::::::::::::::::::::::::"
  70. echo "\n ${i} ${WIFI_SSID_ARRAY[$i]}"
  71. done
  72. echo "\n::::::::::::::::::::::::::::::::::"
  73. }
  74. connect() {
  75. wpa_supplicant -B -i $WIRELESS -c "$CONFIG_FILE_PATH"
  76. dhclient "$WIRELESS"
  77. }
  78. USER=$(whoami)
  79. if [[ "$USER" != "root" ]]; then
  80. echo -e "\n::::::::::::::::::::::::::::::::::"
  81. echo -e "\nPlease run as root user"
  82. echo -e "\n::::::::::::::::::::::::::::::::::"
  83. sleep $DELAY
  84. exit
  85. fi
  86. while true; do
  87. # Print menu
  88. clear
  89. echo -e $(print_menu)
  90. read -p "SELECT OPTION: " option
  91. # if's OPTIONS
  92. if [[ "$option" == 0 ]]; then
  93. clear
  94. break
  95. elif [[ "$option" == 1 ]]; then
  96. # Kill wifi if it work
  97. $(kill_process)
  98. # Get list wireless
  99. WIFI_ADAPTERS__ARRAY=$(iw dev | grep -io "wl.*" | fmt)
  100. WIFI_ADAPTERS__ARRAY=($WIFI_ADAPTERS__ARRAY)
  101. # Print list wireless and select it
  102. while true; do
  103. echo -e $(print_wifi_adapters)
  104. read -p "Select to wireless: " SELECT_WIRELESS
  105. if [[ $SELECT_WIRELESS == [0-9] ]]; then
  106. WIRELESS=${WIFI_ADAPTERS__ARRAY[$SELECT_WIRELESS]}
  107. else
  108. $SETCOLOR_FAILURE
  109. echo "This adaprer is not =("
  110. sleep $DELAY
  111. $SETCOLOR_NORMAL
  112. continue
  113. fi
  114. if [[ "$WIRELESS" == "" ]] ; then
  115. $SETCOLOR_FAILURE
  116. echo "This adaprer is not =("
  117. $SETCOLOR_NORMAL
  118. sleep $DELAY
  119. continue
  120. fi
  121. break
  122. done
  123. # Scan wifi points
  124. WIFI_LIST__ARRAY=$(scan_wifi | fmt -w 2500)
  125. WIFI_LIST__ARRAY=($WIFI_LIST__ARRAY)
  126. # Print list wifi points
  127. echo -e $(print_wifi)
  128. read -p "Press 'Enter' to continue: "
  129. continue
  130. elif [[ "$option" == 2 ]]; then
  131. # Kill wifi if it work
  132. $(kill_process)
  133. # Get list wireless
  134. WIFI_ADAPTERS__ARRAY=$(iw dev | grep -io "wl.*" | fmt)
  135. WIFI_ADAPTERS__ARRAY=($WIFI_ADAPTERS__ARRAY)
  136. # Print list wireless and select it
  137. while true; do
  138. echo -e $(print_wifi_adapters)
  139. read -p "Select to wireless: " SELECT_WIRELESS
  140. if [[ $SELECT_WIRELESS == [0-9] ]]; then
  141. WIRELESS=${WIFI_ADAPTERS__ARRAY[$SELECT_WIRELESS]}
  142. else
  143. $SETCOLOR_FAILURE
  144. echo "This adaprer is not =("
  145. $SETCOLOR_NORMAL
  146. sleep $DELAY
  147. continue
  148. fi
  149. if [[ "$WIRELESS" == "" ]] ; then
  150. $SETCOLOR_FAILURE
  151. echo "This adaprer is not =("
  152. $SETCOLOR_NORMAL
  153. sleep $DELAY
  154. continue
  155. fi
  156. break
  157. done
  158. # Scan wifi points
  159. WIFI_LIST__ARRAY=$(scan_wifi | fmt -w 2500)
  160. WIFI_LIST__ARRAY=($WIFI_LIST__ARRAY)
  161. # Print list wifi points
  162. while true; do
  163. echo -e $(print_wifi)
  164. read -p "Select to wifi: " SELECT_WIFI
  165. if [[ "$SELECT_WIFI" == [0-9] ]]; then
  166. WIFI_SSID=${WIFI_LIST__ARRAY["$SELECT_WIFI"]}
  167. else
  168. $SETCOLOR_FAILURE
  169. echo "This wifi ssid is not =("
  170. $SETCOLOR_NORMAL
  171. sleep $DELAY
  172. continue
  173. fi
  174. if [[ "$WIFI_SSID" == "" ]]; then
  175. $SETCOLOR_FAILURE
  176. echo "This wifi ssid is not =("
  177. $SETCOLOR_NORMAL
  178. sleep $DELAY
  179. continue
  180. fi
  181. break
  182. done
  183. # Get password to wifi
  184. while true; do
  185. clear
  186. read -p "Password: " WIFI_PASSWORD
  187. if (( ${#WIFI_PASSWORD} < 8 )); then
  188. $SETCOLOR_FAILURE
  189. echo "Password must be 8..63 characters"
  190. $SETCOLOR_NORMAL
  191. sleep $DELAY
  192. continue
  193. fi
  194. break
  195. done
  196. # Generate config and connect
  197. CONFIG_FILE_PATH="/etc/wpa_supplicant/${WIFI_SSID}.conf"
  198. $(generateConfigFile)
  199. clear
  200. $SETCOLOR_SUCCESS
  201. echo "Connection ${WIFI_SSID}..."
  202. echo -e $(connect)
  203. break
  204. elif [[ "$option" == 3 ]]; then
  205. # Kill wifi if it work
  206. $(kill_process)
  207. # Get list wireless
  208. WIFI_ADAPTERS__ARRAY=$(iw dev | grep -io "wl.*" | fmt)
  209. WIFI_ADAPTERS__ARRAY=($WIFI_ADAPTERS__ARRAY)
  210. # Print list wireless and select it
  211. while true; do
  212. echo -e $(print_wifi_adapters)
  213. read -p "Select to wireless: " SELECT_WIRELESS
  214. if [[ $SELECT_WIRELESS == [0-9] ]]; then
  215. WIRELESS=${WIFI_ADAPTERS__ARRAY[$SELECT_WIRELESS]}
  216. else
  217. $SETCOLOR_FAILURE
  218. echo "This adaprer is not =("
  219. $SETCOLOR_NORMAL
  220. sleep $DELAY
  221. continue
  222. fi
  223. if [[ "$WIRELESS" == "" ]] ; then
  224. $SETCOLOR_FAILURE
  225. echo "This adaprer is not =("
  226. $SETCOLOR_NORMAL
  227. sleep $DELAY
  228. continue
  229. fi
  230. break
  231. done
  232. WIFI_SSID_ARRAY=$(ls -w 1 "$CONFIG_PATH" | grep -oi ".*[^.conf$]" | fmt -w 2500)
  233. WIFI_SSID_ARRAY=($WIFI_SSID_ARRAY)
  234. # Print list wifi points
  235. while true; do
  236. echo -e $(print_wifi_ssid)
  237. read -p "Select to wifi: " SELECT_WIFI_SSID
  238. if [[ "$SELECT_WIFI_SSID" == [0-9] ]]; then
  239. WIFI_SSID=${WIFI_SSID_ARRAY["$SELECT_WIFI_SSID"]}
  240. else
  241. $SETCOLOR_FAILURE
  242. echo "This wifi ssid is not =("
  243. $SETCOLOR_NORMAL
  244. sleep $DELAY
  245. continue
  246. fi
  247. if [[ "$WIFI_SSID" == "" ]]; then
  248. $SETCOLOR_FAILURE
  249. echo "This wifi ssid is not =("
  250. $SETCOLOR_NORMAL
  251. sleep $DELAY
  252. continue
  253. fi
  254. CONFIG_FILE_PATH="$CONFIG_PATH${WIFI_SSID}.conf"
  255. break
  256. done
  257. # connect
  258. clear
  259. $SETCOLOR_SUCCESS
  260. echo "Connection $WIFI_SSID..."
  261. echo -e $(connect)
  262. break
  263. elif [[ "$option" == 4 ]]; then
  264. $(kill_process)
  265. $SETCOLOR_SUCCESS
  266. echo "Disconnect successfully"
  267. sleep $DELAY
  268. elif [[ "$option" == 5 ]]; then
  269. WIFI_SSID_ARRAY=$(ls -w 1 "$CONFIG_PATH" | grep -oi ".*[^.conf$]" | fmt -w 2500)
  270. WIFI_SSID_ARRAY=($WIFI_SSID_ARRAY)
  271. echo -e $(print_wifi_ssid)
  272. read -p "Press 'Enter' to continue: "
  273. continue
  274. elif [[ "$option" == 6 ]]; then
  275. # get array wifi ssid (configs)
  276. WIFI_SSID_ARRAY=$(ls -w 1 "$CONFIG_PATH" | grep -oi ".*[^.conf$]" | fmt -w 2500)
  277. WIFI_SSID_ARRAY=($WIFI_SSID_ARRAY)
  278. # print configs and selection will be deleted config file
  279. while true; do
  280. echo -e $(print_wifi_ssid)
  281. read -p "Select file for delete: " SELECT_CONFIG_FILE
  282. if [[ "$SELECT_CONFIG_FILE" == [0-9] ]]; then
  283. CONFIG_FILE=${WIFI_SSID_ARRAY["$SELECT_CONFIG_FILE"]}
  284. else
  285. $SETCOLOR_FAILURE
  286. echo "This wifi ssid is not =("
  287. $SETCOLOR_NORMAL
  288. sleep $DELAY
  289. continue
  290. fi
  291. if [[ "$CONFIG_FILE" == "" ]]; then
  292. $SETCOLOR_FAILURE
  293. echo "This wifi ssid is not =("
  294. $SETCOLOR_NORMAL
  295. sleep $DELAY
  296. continue
  297. fi
  298. break
  299. done
  300. # You really want delete this file?
  301. CONFIG_FILE_PATH="$CONFIG_PATH${CONFIG_FILE}.conf"
  302. read -p "You want delete ${CONFIG_FILE_PATH}? [y/n]: " IS_DELETE
  303. if [[ "$IS_DELETE" == "y" ]]; then
  304. cd "$CONFIG_PATH" &&
  305. rm "${CONFIG_FILE}.conf" &&
  306. $SETCOLOR_SUCCESS
  307. echo "File will be deleted"
  308. $SETCOLOR_NORMAL
  309. sleep $DELAY
  310. continue
  311. else
  312. $SETCOLOR_FAILURE
  313. echo "File will be not deleted =3"
  314. $SETCOLOR_NORMAL
  315. sleep $DELAY
  316. continue
  317. fi
  318. else
  319. $SETCOLOR_FAILURE
  320. echo "This option is not =("
  321. $SETCOLOR_NORMAL
  322. sleep $DELAY
  323. continue
  324. fi
  325. done