daily pastebin goal
8%
SHARE
TWEET

connect.sh

a guest Jun 1st, 2013 286 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/bash
  2.  
  3. #
  4. # 01/06/2013
  5. # This script attempts to semi-automate the wifi connection process from the command line.
  6. # It is intended to be used on a headless machine without the requirement of typing several commands for a connection.
  7. # The script stores previous connection credentials in PLAINTEXT as *.wpa files in the executed directory and in /etc/wpasupplicant.conf.  These .wpa files are used to connect to several different ap using  previously stored info.
  8. # Probably a good idea to stop and other network managing software while running this script, also in testing wpa_supplicant does a pretty good job of re-connecting a disassociated link automatically.
  9. #
  10. # Mainly created from a combination of scripts taken from theses two sources:
  11. # http://www.backtrack-linux.org/forums/archive/index.php/t-3367.html
  12. # AND
  13. # http://www.linuxquestions.org/questions/linux-general-1/wifi-connect-script-tested-in-ubuntu-772646/
  14. #
  15. # Copy, Distribute and Modify Freely.
  16. #
  17.  
  18.  
  19. INT=$1
  20.  
  21. if [ -z "$1" ]; then
  22.         printf "Usage: $0 [interface]\n"
  23.         exit
  24. fi
  25.  
  26. if [ "$(id -u)" != "0" ]; then
  27.         printf "This script must be run as root\n" 1>&2
  28.         exit
  29. fi
  30.  
  31. #
  32. # Search for previous saved config files
  33. #
  34. function read_saved {
  35.         #
  36.         # Search for previous wpa configuration files.
  37.         #
  38.  
  39.         #
  40.         # Save and change IFS so spaces in file names are not interpreted as separate lines in the array
  41.         #
  42.         OLDIFS=$IFS
  43.         IFS=$'\n'
  44.  
  45.         #
  46.         # Read all file names into an array ref:http://www.cyberciti.biz/tips/handling-filenames-with-spaces-in-bash.html
  47.         # " -printf '%f\n' " removes path info from outputs ref:http://serverfault.com/questions/354403/remove-path-from-find-command-output
  48.         #
  49.         SAVED_LIST=($(find . -type f -name "*.wpa" -printf '%f\n'))
  50.  
  51.         #
  52.         # restore ifs
  53.         #
  54.         IFS=$OLDIFS
  55.  
  56.  
  57.         #
  58.         # Tests for number of saved wifi connections, if none exit
  59.         #
  60.         if [ -z "${SAVED_LIST[0]}" ]; then
  61.                 printf "There are no previous saved wifi connections\n\n"
  62.                 #
  63.                 # Create new connection
  64.                 #
  65.                 conf_create
  66.         fi
  67.  
  68.         #
  69.         #PS3 Sets the prompt for the select statement below
  70.         #
  71.         PS3="Choose a previously saved wifi connection or 's' to skip: "
  72.  
  73. #
  74. #Select one of the previous saved configurations to connect with or quit
  75. #
  76. select ITEM in "${SAVED_LIST[@]}"; do
  77.         #
  78.         # Quit if selected number does not exist or alpha in entered
  79.         #
  80.         if [ -z "$ITEM" ] ; then
  81.                         printf "Skipping\n"
  82.                         conf_create
  83.         fi
  84.  
  85.         printf "$ITEM is selected\n"
  86.         cat "$ITEM">/etc/wpa_supplicant.conf | xargs
  87.         connect "$ITEM"
  88. done
  89. }
  90.  
  91. function conf_create (){
  92.         #
  93.         # Scans for wifi connections & isolates wifi AP name
  94.         #
  95.         eval LIST=( $(sudo iwlist $INT scan 2>/dev/null | awk -F":" '/ESSID/{print $2}') )
  96.  
  97.         #
  98.         #PS3 Sets the prompt for the select statement below
  99.         #
  100.         PS3="Choose wifi connection or 'q' to quit: "
  101.  
  102.         #
  103.         # Tests for number of wifi connections, exits if none
  104.         #
  105.                 if [ -z "${LIST[0]}" ]; then
  106.                         printf "No available wifi connection using $INT\n"
  107.                         exit
  108.                 fi
  109.  
  110.         #
  111.         # Select from a LIST of scanned connections
  112.         #
  113.         select ITEM in "${LIST[@]}"; do
  114.         ifconfig $INT | grep inet
  115.  
  116.                 #
  117.                 # Quit if selected number does not exist or alpha in entered
  118.                 #
  119.                 if [ -z "$ITEM" ] ; then
  120.                                 printf "Exiting\n"
  121.                                 exit
  122.                 fi
  123.  
  124.                 #
  125.                 # Get user input for passphrase no need to escape spaces
  126.                 #
  127.                 printf "Enter the passphrase for $ITEM?\n"
  128.                 read "PASSPHRASE"
  129.  
  130.                 #
  131.                 # Append the ITEM variable (ESSID) to .wpa to make a filename for saved configs
  132.                 #
  133.                 FILENAME=$ITEM".wpa"
  134.  
  135.                 #
  136.                 # Run wpa_passphrase to generate a file for wpa_supplicant to use, store it locally and in etc/wpa_supplicant.conf
  137.                 #
  138.                 printf "Running wpa_passphrase\n"
  139.                 wpa_passphrase "$ITEM" "$PASSPHRASE" > "$FILENAME" | xargs
  140.                 cat "$FILENAME">/etc/wpa_supplicant.conf | xargs
  141.                 printf "Creating new configuration using $ITEM\n"
  142.  
  143.                 #
  144.                 # Jump to connect function, pass on the ESSID variable for connection
  145.                 #
  146.                 connect $ITEM
  147.         done
  148. }
  149.  
  150. function connect (){
  151.         printf "Connecting using file $*\n"
  152.  
  153.         #
  154.         # Capture incoming argument
  155.         #
  156.         ESSID=$*
  157.  
  158.         #
  159.         # Kill previous instances of wpa_supplicant to stop other instances wpa_supplicant fighting several different AP's
  160.         # Kill based on ref: http://thegeekstuff.com/2011/10/grep-or-and-not-operators/ and  http://stackoverflow.com/questions/3510673/find-and-kill-a-process-in-one-line-using-bash-and-regex
  161.         # Release dhcp ip's and bring down the interface
  162.         #
  163.         kill $(ps aux | grep -E '[w]pa_supplicant.*\'$INT'' |  awk '{print $2}') | xargs
  164.         dhclient $INT -r
  165.         ifconfig $INT down
  166.  
  167.         #
  168.         # Assign new credentials to interface
  169.         #
  170.         iwconfig $INT mode managed essid "$ESSID"
  171.         printf "Configured interface $INT; ESSID is $ESSID\n"
  172.         ifconfig $INT up
  173.         printf "Interface $INT is up\n"
  174.         wpa_supplicant -B -Dwext -i$INT -c/etc/wpa_supplicant.conf 2>/dev/null | xargs
  175.         printf "wpa_supplicant running, sleeping for 15...\n"
  176.  
  177.         #
  178.         # Wait to connect before asking for a ip address
  179.         #
  180.         sleep 15
  181.         printf "Running dhclient\n"
  182.         dhclient $INT
  183.  
  184.         #
  185.         # Show current ip for interface
  186.         #
  187.         ifconfig $INT | grep inet
  188. exit
  189. }
  190.  
  191. #
  192. # Start here
  193. #
  194. read_saved
  195.  
  196. exit
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top