112 lines
3.2 KiB
Bash
Executable File
112 lines
3.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Global variables
|
|
unset conf
|
|
unset network
|
|
unset type
|
|
interface="wlp4s0"
|
|
|
|
# Print helptext
|
|
function usage() {
|
|
echo Usage: $0 '[-i interface] -f conf_name'
|
|
echo " $0 -a # Connect to any known secured network"
|
|
echo " $0 -l # List networks and arp"
|
|
echo " $0 -o SSID # Connect to open network "
|
|
echo " $0 -u # Bring up interface"
|
|
echo " $0 -d # Stop the interface"
|
|
echo " $0 -I # Info "
|
|
echo " $0 -h # Usage"
|
|
echo
|
|
echo Add -v to increase verbosity.
|
|
echo "Add -t TYPE to override type guessing, where type is eth or wifi"
|
|
echo Default interface is "${interface}"
|
|
}
|
|
|
|
# Try to guess if we're ether or wifi
|
|
function guessType() {
|
|
if [ "$(echo "${interface}" | egrep -c '^enp|^eth|^eno')" -ne 1 ]; then
|
|
echo "wifi"
|
|
else
|
|
echo "ether"
|
|
fi
|
|
}
|
|
|
|
# Clean up running processes
|
|
function cleanUp() {
|
|
killall wpa_supplicant dhcpcd 2>&1
|
|
ip link set "$interface" down
|
|
}
|
|
|
|
# Connect to a given open network
|
|
# param network: an open ESSID
|
|
function connectOpen() {
|
|
network="$1"
|
|
cleanUp
|
|
ip link set "$interface" up
|
|
if [ "$type" == "wifi" ]; then
|
|
iw dev "$interface" connect "$network"
|
|
fi
|
|
}
|
|
|
|
# Connect to any known secured access point
|
|
function connectAny() {
|
|
cleanUp
|
|
ip link set "$interface" up
|
|
if [ "$type" == "wifi" ]; then
|
|
for i in `iwlist "$interface" scanning | grep ESSID | cut -f 2 -d \" | tr '[:upper:]' '[:lower:]'`; do
|
|
if [ -f /etc/wpa_supplicant/"$i".conf ]; then
|
|
/root/bin/wifi "$i" "$interface"
|
|
if [ $? -eq 0 ]; then
|
|
exit 0;
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
}
|
|
|
|
# Connect using the WPA Conf file saved
|
|
# param conf: the conf file
|
|
function connect() {
|
|
conf="$1"
|
|
cleanUp
|
|
ip link set "${interface}" up
|
|
if [ "$type" == wifi ]; then
|
|
wpa_supplicant -i "$interface" -c "$conf" -B
|
|
fi
|
|
}
|
|
|
|
# Get the information on current interfaces
|
|
function netInfo() {
|
|
ip addr list
|
|
ip route list
|
|
iwlist scanning
|
|
}
|
|
|
|
|
|
### MAIN FUNCTION ###
|
|
if [ `echo "$0" | egrep -c '(^|/)netcli$'` -eq 1 ]; then
|
|
type=`guessType`
|
|
while getopts 'adf:hIi:lo:t:uv' OPTION 2>/dev/null; do
|
|
case "${OPTION}" in
|
|
a) connectAny ;;
|
|
f) connect "/etc/wpa_supplicant/${OPTARG}.conf" ;;
|
|
d) cleanUp; exit 0 ;;
|
|
h) usage; exit 0 ;;
|
|
i) interface="${OPTARG}"; type=`guessType` ;;
|
|
I) netInfo; exit 0; ;;
|
|
l) if [ "$type" == "wifi" ]; then echo SSID Broadcasts:; iwlist "${interface}" scanning | egrep Encryption\|ESSID | sed 's/ *//' | sed 's/ESSID://' ; fi; echo; echo ARP list:; arp -a; exit $? ;;
|
|
o) connectOpen "${OPTARG}" ;;
|
|
t) if [ "$OPTARG" != "wifi" ] && [ "$OPTARG" != "eth" ]; then usage; exit 1; fi; type="${OPTARG}" ;;
|
|
u) if ! [ "$(ip link list "${interface}" | grep -m 1 -c \ UP\ )" -ne 1 ]; then ip link set "${interface}" up; fi ;;
|
|
v) set -x ;;
|
|
*) usage; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
# Attempt DHCP Lease -- if this fails, static routing will need to be added TODO
|
|
|
|
sleep 3
|
|
dhcpcd "$interface"
|
|
exit $?
|
|
fi
|