Conf-network
Descrizione
Questo è il mio secondo script (il primo è stato Compiz-git) e questa volta ero indaffarato nelle configurazioni della mia rete...
Così è nato Conf-ntwork!
Usando questo script anche gli utenti meno esperti potranno configurare la loro rete (wireless o cablata) in pochi passi e senza bisogno dell'interfaccia grafica (dunque è utile se per caso dovete connettervi ad internet proprio per cercare informazioni su come configurare X.org).
Lo script è un po' lungo, ed è stato testato su Slackware 12.1 -- kernel 2.6.26.3 (ma dovrebbe funzionare con qualsiasi distro...).
Requisiti
NET-TOOL --> per i comandi di base
WIRELESS-TOOL --> per configurare le reti wireless
DHCPCD --> per poter ricevere l'ip da un server dhcp
WPA_SUPPLICANT --> wpa_supplicant
Download
Script
Di seguito è riportato il codice dello script.
Versione 1.0
#!/bin/bash # Script che aiuta l'utente nella configurazione dei dispositivi di rete # (sia cablati, sia wireless) # # Per quanto riguarda il protocollo WPA-EAP di wpa_supplicant, non ho # avuto modo di testarlo in quanto non dispongo degli strumenti necessari. # Il resto dovrebbe funzionare :-) # # Script creato il 29/9/2008 da Ansa89 (aka h3r0) # File di configurazione di wpa_supplicant CONF_WPA="/root/.wpa_supplicant.conf" # Funzione per controllare le dipendenze check_dep () { # Controllo chi esegue lo script if [ "$(whoami)" != "root" ]; then echo echo "**ERRORE**" echo "Devi essere ROOT per eseguire questo script!" echo exit 1 fi # Controllo se i net-tool sono installati if [ -z "$(which ifconfig)" -o -z "$(which route)" ]; then echo echo "**ERRORE**" echo "Devi avere installato i NET-TOOL per eseguire questo script!" echo exit 1 fi # Controllo se i wireless-tool sono installati if [ -z "$(which iwlist)" -o -z "$(which iwconfig)" ]; then echo echo "**ERRORE**" echo "Devi avevre installato i WIRELESS-TOOL per eseguire questo script!" echo exit 1 fi # Controllo se dhcpcd e' installato if [ -z "$(which dhcpcd)" ]; then echo echo "**ERRORE**" echo "Devi avere installato DHCPCD per eseguire questo script!" echo exit 1 fi # Controllo se wpa_supplicant e' installato if [ -z "$(which wpa_supplicant)" ]; then echo echo "**ERRORE**" echo "Devi avere installato WPA_SUPPLICANT per eseguire questo script!" echo exit 1 fi } # Funzione per impostare le variabili degli eseguibili utilities () { IFCONFIG=`which ifconfig` ROUTE=`which route` DHCPCD=`which dhcpcd` IWCONFIG=`which iwconfig` IWLIST=`which iwlist` WPA_SUPPLICANT=`which wpa_supplicant` } # Funzione per spegnere le interfacce smorza () { # Guardo quali interfacce sono accese if [ -z "$1" ]; then IF=`$IFCONFIG | grep -v lo | cut -d " " -f 1` else IF=$1 fi for i in $IF; do echo -n "Devo spegnere $i? (s/n) " read risp if [ -z "$risp" -o "$risp" == "s" ]; then echo -n "Spengo $i..." $DHCPCD -k $i &> /dev/null $IFCONFIG $i down &> /dev/null echo "Fatto" echo # Controllo se e' un'interfaccia wireless if ! [ -z "$(cat /proc/net/wireless | grep $i)" ]; then # Chiedo se devo fermare anche wpa_supplicant echo -n "Fermo anche wpa_supplicant? (s/n) " read risp if [ -z "$risp" -o "$risp" == "s" ]; then killall wpa_supplicant &> /dev/null kill -9 `ps ux | grep wpa | grep -v grep | cut -d " " -f 7` &> /dev/null echo "Wpa_supplicant e' stato fermato." echo elif [ "$risp" == "n" ]; then echo echo "Wpa_supplicant non e' stato fermato." echo else echo echo "**ERRORE**" echo exit 1 fi $IWCONFIG $i essid off ap off &> /dev/null $IWCONFIG $i key off &> /dev/null $IWCONFIG $i mode managed &> /dev/null $IFCONFIG $i up fi echo elif [ "$risp" == "n" ]; then echo "$i non e' stata spenta" else echo echo "**ERRORE**" echo exit 1 fi done } # Funzione per configurare le reti cablate wired () { # Controllo il parametro passato allo script if [ -z "$1" ]; then # Se non e' stato passato niente cerco le interfacce echo -n "Cerco le interfacce... " NUM=`wc -l /proc/net/dev | cut -d " " -f 1` if [ $NUM -gt 3 ]; then IF=`tail -n $(($NUM-3)) /proc/net/dev | cut -d " " -f 3 | cut -d ":" -f 1` else echo echo "**ERRORE**" echo "Nessuna scheda ethernet trovata!" echo exit 1 fi # Tolgo le interfacce wireless perche' non interessano if [ -e /proc/net/wireless ]; then NUM=`wc -l /proc/net/wireless | cut -d " " -f 1` if [ $NUM -gt 2 ]; then IF2=`tail -n $(($NUM-2)) /proc/net/wireless | cut -d " " -f 3 | cut -d ":" -f 1` OLD_IF=$IF IF="" for i in $OLD_IF; do if [ -z "$(echo $IF2 | grep $i)" ]; then IF="$IF $i" fi done fi fi echo "Fatto" # Faccio scegliere l'interfaccia echo "Ho trovato queste intefacce wired:" for i in $IF; do IF2=$i echo $i done echo echo "Quale vuoi usare per la connessione?" echo -n "($IF2) " read DEV if [ -z "$DEV" ]; then DEV=$IF2 fi else NUM=`wc -l /proc/net/dev | cut -d " " -f 1` if tail -n $(($NUM-3)) /proc/net/dev | cut -d " " -f 3 | cut -d ":" -f 1 | grep $1 &> /dev/null; then DEV=$1 else echo echo "**ERRORE**" echo "Devi inserire un'interfaccia valida!" echo exit 1 fi fi # Spengo l'interfaccia prima di configurarla (uso la funzione smorza) smorza $DEV # Chiedo che tipo di connessione e' echo -n "Il tuo IP ti viene assegnato da un server DHCP? (s/n) " read risp if [ -z "$risp" -o "$risp" == "s" ]; then # Configurazione rete con IP dinamici echo "Avvio il demone dhcpcd..." $DHCPCD -t 20 -d $DEV sleep 5 if [ "$(ps aux | grep dhcpcd | wc -l | cut -d " " -f 1)" -gt 1 ]; then echo "Fatto!" echo "Hai configurato la tua rete cablata con successo! :-)" echo else echo "Non sono riuscito ad avviare dhcpcd!" echo "Prova ad eseguire '$DHCPCD -d $DEV' come utente root" echo exit 1 fi elif [ "$risp" == "n" ]; then # Configurazione rete con IP statici echo -n "Inserisci l'IP per $DEV: " read IPADDR if [ -z "$IPADDR" ]; then echo "**ERRORE**" echo "Devi inserire un IP per configurare la scheda!" exit 1 fi echo -n "Inserisci la maschera di rete (255.255.255.0): " read NETMASK if [ -z "$NETMASK" ]; then NETMASK="255.255.255.0" fi echo "Inserisci l'IP del broadcast:" echo -n "(puo' essere lasciato vuoto se si e' incerti) " read BROADCAST echo "Inserisci l'IP del gateway:" echo -n "(necessario per la connessione ad internet attraverso $DEV) " read GW echo "Imposto i parametri per $DEV..." if [ -z "$BROADCAST" ]; then $IFCONFIG $DEV $IPADDR netmask $NETMASK up else $IFCONFIG $DEV $IPADDR netmask $NETMASK broadcast $BROADCAST up fi if ! [ -z "$GW" ]; then $ROUTE add default gw $GW fi echo "nameserver 127.0.0.1" > /etc/resolv.conf echo "Fatto!" echo "Hai configurato la tua rete cablata con successo! :-)" echo else echo echo "**ERRORE**" echo exit 1 fi } # Funzione per configurare le reti wireless wireless () { if [ -z $1 ]; then echo "Cerco le interfacce..." if [ -e /proc/net/wireless ]; then NUM=`wc -l /proc/net/wireless | cut -d " " -f 1` if [ $NUM -gt 2 ]; then IF=`tail -n $(($NUM-2)) /proc/net/wireless | cut -d " " -f 3 | cut -d ":" -f 1` else echo echo "**ERRORE**" echo "Nessuna scheda wireless trovata!" echo exit 1 fi else echo echo "**ERRORE**" echo "Nessuna scheda wireless trovata!" echo exit 1 fi echo "Fatto" echo "Ho trovato queste interfacce wireless:" for i in $IF; do IF2=$i echo $i done echo echo "Quale vuoi usare per la connessione?" echo -n "($IF2) " read DEV if [ -z "$DEV" ]; then DEV=$IF2 fi else if [ -e /proc/net/wireless ]; then NUM=`wc -l /proc/net/wireless | cut -d " " -f 1` if tail -n $(($NUM-2)) /proc/net/wireless | cut -d " " -f 3 | cut -d ":" -f 1 | grep $1; then DEV=$1 else echo echo "**ERRORE**" echo "Devi inserire un'interfaccia wireless valida!" echo exit 1 fi fi fi # Spengo l'interfaccia prima di configurarla (uso la funzione smorza) smorza $DEV # Cerco le reti wireless echo "Scanning delle reti con $DEV..." echo $IWLIST $DEV scan echo echo "Non farti prendere dal panico per l'eventuale eccessiva lunghezza dell'output" # Incomincio a chiedere i vari parametri # ESSID echo -n "cerca la tua rete e inserisci l'ESSID (il nome): " read ESSID if [ -z "$ESSID" ]; then echo echo "**ERRORE**" echo "Devi inserire il nome di una rete a cui connettersi!" echo exit 1 fi # CHANNEL echo -n "Inserisci il channel della rete (non la frequenza!): " read CHAN if [ -z "$CHAN" ]; then echo echo "**ERRORE**" echo "Devi inserire il canale della rete scelta!" echo exit 1 fi # MODE echo -n "Inserisci il tipo di rete: managed (con access point) o ad-hoc (senza access point): " read MODE if [ -z "$MODE" ]; then MODE="managed" fi # Chiedo se serve la password echo -n "La rete necessita di password? (s/n) " read risp if [ -z "$risp" -o "$risp" == "s" ]; then # Quale tipo di password? echo "WEP o WPA?" echo "(N.B. WPA e' solo per reti con access point!)" echo -n "(wpa) " read TYPE if [ [ -z "$TYPE" -o "$TYPE" == "wpa" -o "$TYPE" == "WPA" ] -a [ "$MODE" == "managed" -o "$MODE" == "Managed"] ]; then # WPA echo "Hai scelto WPA" echo "ctrl_interface=/var/run/wpa_supplicant" > $CONF_WPA echo "ctrl_interface_group=0" >> $CONF_WPA echo "eapol_version=1" >> $CONF_WPA echo "ap_scan=1" >> $CONF_WPA echo "fast_reauth=1" >> $CONF_WPA echo "" >> $CONF_WPA chmod 600 $CONF_WPA # Chiedo quale tipo di WPA echo "Che tipo di criptaggio devo usare?" echo -e "\tWPA-PSK\n\tWPA-EAP\n\tNONE\t(per chiavi WEP)" read TYPE case "$TYPE" in # WPA-PSK WPA-PSK) # Chiedo la password echo "Adesso dovrai inserire la password." echo "Vuoi che i caratteri digitati vengano visualizzati? (s/n) " read risp echo -n "Inserisci la password: " if [ -z "$risp" -o "$risp" == "n" ]; then read -s PSK elif [ "$risp" == "s" ]; then read PSK else echo echo "**ERRORE**" echo exit 1 fi # Creo il file di configurazione echo -n "Creo il file di configurazione..." echo "network={" >> $CONF_WPA echo -e "\tscan_ssid=1" >> $CONF_WPA echo -e "\tssid=\"$ESSID\"" >> $CONF_WPA echo -e "\tmode=0" >> $CONF_WPA echo -e "\tproto=WPA WPA2" >> $CONF_WPA echo -e "\tkey_mgmt=WPA-PSK" >> $CONF_WPA echo -e "\tpairwise=CCMP TKIP" >> $CONF_WPA echo -e "\tgroup=CCMP TKIP WEP104 WEP40" >> $CONF_WPA echo -e "\tpsk=\"$PSK\"" >> $CONF_WPA echo "}" >> $CONF_WPA echo "Fatto" ;; # WPA-EAP WPA-EAP) # Chiedo quale tipo di EAP echo "Quale tipo di EAP vuoi usare?" echo -e "\tTLS\n\tPEAP\n\tTTLS" read TYPE case "$TYPE" in # WPA-EAP --> TLS TLS) # Chiedo l'identita' echo -n "Inserisci la tua identita': " read ID if [ -z "$ID" ]; then echo echo "**ERRORE**" echo "Devi inserire il tuo identificativo per connetterti alla rete!" echo exit 1 fi # Chiedo il file del certificato echo "Inserisci il nome del file che contiene" echo -n "l'autorizzazione del server (comprensivo di path assoluto!): " read CA if [ -z "$CA" -o ! -e $CA ]; then echo echo "**ERRORE**" echo "Devi inserire il nome del certificato del server, comprensivo di path assoluto!" echo exit 1 fi # Chiedo il file del certificato echo "Inserisci il nome del file che contiene " echo -n "il certificato del client (comprensivo di path assoluto!): " read CLIENT if [ -z "$CLIENT" -o ! -e $CLIENT ]; then echo echo "**ERRORE**" echo "Devi inserire il nome del certicficato del tuo client, comprensivo di path assoluto!" echo exit 1 fi # Chiedo il file della chiave privata echo "Inserisci il nome del file che contiene" echo -n "la chiave privata (comprensivo di path assoluto!): " read KEY if [ -z "$KEY" -o ! -e $KEY ]; then echo echo "**ERRORE**" echo "Devi inserire il nome della chiave primaria, comprensivo di path assololuto!" echo exit 1 fi # Chiedo la password echo "Adesso dovrai inserire la password." echo -n "Vuoi che i caratteri digitati vengano visualizzati? (s/n) " read risp echo -n "Inserisci la password: " if [ -z "$risp" -o "$risp" == "n" ]; then read -s PASSWD elif [ "$risp" == "s" ]; then read PASSWD else echo echo "**ERRORE**" echo exit 1 fi # Creo il file di configurazione echo -n "Creo il file di configurazione..." echo "network={" >> $CONF_WPA echo -e "\tscan_ssid=1" >> $CONF_WPA echo -e "\tssid=\"$ESSID\"" >> $CONF_WPA echo -e "\tmode=0" >> $CONF_WPA echo -e "\tproto=WPA WPA2" >> $CONF_WPA echo -e "\tkey_mgmt=WPA-EAP" >> $CONF_WPA echo -e "\tpairwise=CCMP TKIP" >> $CONF_WPA echo -e "\tgroup=CCMP TKIP WEP104 WEP40" >> $CONF_WPA echo -e "\teap=TLS" >> $CONF_WPA echo -e "\tidentity=\"$ID\"" >> $CONF_WPA echo -e "\tca_cert=\"$CA\"" >> $CONF_WPA echo -e "\tclient_cert=\"$CLIENT\"" >> $CONF_WPA echo -e "\tprivate_key=\"$KEY\"" >> $CONF_WPA echo -e "\tprivate_key_passwd=\"$PASSWD\"" >> $CONF_WPA echo "}" >> $CONF_WPA echo "Fatto" ;; # WPA-EAP --> PEAP PEAP) # Chiedo l'identita' echo -n "Inserisci la tua identita': " read ID if [ -z "$ID" ]; then echo echo "**ERRORE**" echo "Devi inserire il tuo identificativo per connetterti alla rete!" echo exit 1 fi # Chiedo il file del certificato echo "Inserisci il nome del file che contiene" echo -n "l'autorizzazione del server (comprensivo di path assoluto!): " read CA if [ -z "$CA" -o ! -e $CA ]; then echo echo "**ERRORE**" echo "Devi inserire il nome del certificato del server, comprensivo di path assoluto!" echo exit 1 fi # Chiedo la password echo "Adesso dovrai inserire la password." echo -n "Vuoi che i caratteri digitati vengano visualizzati? (s/n) " read risp echo -n "Inserisci la password: " if [ -z "$risp" -o "$risp" == "n" ]; then read -s PASSWD elif [ "$risp" == "s" ]; then read PASSWD else echo echo "**ERRORE**" echo exit 1 fi # Creo il file di configurazione echo -n "Creo il file di configurazione..." echo "network={" >> $CONF_WPA echo -e "\tscan_ssid=1" >> $CONF_WPA echo -e "\tssid=\"$ESSID\"" >> $CONF_WPA echo -e "\tmode=0" >> $CONF_WPA echo -e "\tproto=WPA WPA2" >> $CONF_WPA echo -e "\tkey_mgmt=WPA-EAP" >> $CONF_WPA echo -e "\teap=PEAP" >> $CONF_WPA echo -e "\tidentity=\"$ID\"" >> $CONF_WPA echo -e "\tpassword=\"$PASSWD\"" >> $CONF_WPA echo -e "\tca_cert=\"$CA\"" >> $CONF_WPA echo -e "\tphase1=\"peaplabel=0\"" >> $CONF_WPA echo -e "\tphase2=\"auth=MSCHAPV2\"" >> $CONF_WPA echo "}" >> $CONF_WPA echo "Fatto" ;; # WPA-EAP --> TTLS TTLS) # Chiedo l'identita' echo -n "Inserisci la tua identita': " read ID if [ -z "$ID" ]; then echo echo "**ERRORE**" echo "Devi inserire il tuo identificativo per connetterti alla rete!" echo exit 1 fi # Chiedo l'identita' anonima echo -n "Inserisci la tua identita' anonima: " read ANON_ID # Chiedo il file del certificato echo "Inserisci il nome del file che contiene" echo -n "l'autorizzazione del server (comprensivo di path assoluto!): " read CA if [ -z "$CA" -o ! -e $CA ]; then echo echo "**ERRORE**" echo "Devi inserire il nome del certificato del server, comprensivo di path assoluto!" echo exit 1 fi # Chiedo la password echo "Adesso dovrai inserire la password." echo -n "Vuoi che i caratteri digitati vengano visualizzati? (s/n) " read risp echo -n "Inserisci la password: " if [ -z "$risp" -o "$risp" == "n" ]; then read -s PASSWD elif [ "$risp" == "s" ]; then read PASSWD else echo echo "**ERRORE**" echo exit 1 fi # Creo il file di configurazione echo -n "Creo il file di configurazione..." echo "network={" >> $CONF_WPA echo -e "\tscan_ssid=1" >> $CONF_WPA echo -e "\tssid=\"$ESSID\"" >> $CONF_WPA echo -e "\tmode=0" >> $CONF_WPA echo -e "\tproto=WPA WPA2" >> $CONF_WPA echo -e "\tkey_mgmt=WPA-EAP" >> $CONF_WPA echo -e "\teap=TTLS" >> $CONF_WPA echo -e "\tidentity=\"$ID\"" >> $CONF_WPA echo -e "\tanonymous_identity=\"$ANON_ID\"" >> $CONF_WPA echo -e "\tpassword=\"$PASSWD\"" >> $CONF_WPA echo -e "\tca_cert=\"$CA\"" >> $CONF_WPA echo -e "\tphase2=\"auth=MD5\"" >> $CONF_WPA echo "}" >> $CONF_WPA echo "Fatto" ;; # Spazio per gli errori *) echo echo "**ERRORE**" echo "Devi inserire un tipo di EAP tra quelli proposti!" echo exit 1 ;; esac ;; # NONE (static WEP) NONE) # Chiedo la password echo "Adesso dovrai inserire la password." echo -n "Vuoi che i caratteri digitati vengano visualizzati? (s/n) " read risp echo -n "Inserisci la password in esadecimale (controlla le impostazioni dell'access point): " if [ -z "$risp" -o "$risp" == "n" ]; then read -s PASSWD elif [ "$risp" == "s" ]; then read PASSWD else echo echo "**ERRORE**" echo exit 1 fi # Creo il file di configurazione echo -n "Creo il file di configurazione..." echo "network={" >> $CONF_WPA echo -e "\tscan_ssid=1" >> $CONF_WPA echo -e "\tssid=\"$ESSID\"" >> $CONF_WPA echo -e "\tmode=0" >> $CONF_WPA echo -e "\tkey_mgmt=NONE" >> $CONF_WPA echo -e "\twep_tx_keyidx=0" >> $CONF_WPA echo -e "\twep_key0=$PASSWD" >> $CONF_WPA echo "}" >> $CONF_WPA echo "Fatto" ;; # Spazio per gli errori *) echo echo "**ERRORE**" echo "Devi inserire un tipo di criptaggio tra quelli proposti!" echo exit 1 ;; esac # Chiedo che driver deve usare wpa_supplicant echo "Che driver deve usare wpa_supplicant?" echo -e "\twext\t(Generic driver)\tDefault" echo -e "\tralink\t(Ralink driver)" echo -e "\thostap\t(Prism2/2.5/3 driver)" echo -e "\tprism54\t(PrismGT/Duette/Indigo driver)" echo -e "\tmadwifi\t(Atheros driver)" echo -e "\tatmel\t(Atmel AT76C5XXx driver)" echo -e "\tipw\t(IntelProWireless 2100/2200 driver)" echo -e "\tndiswrapper\t(Ndiswrapper driver)" read DRIVER if [ -z "$DRIVER" ]; then DRIVER="wext" fi # Imposto i parametri wireless echo "Setto i parametri wireless per $DEV e avvio wpa_supplicant..." if $IWCONFIG $DEV mode $MODE essid $ESSID channel $CHAN && $WPA_SUPPLICANT -D$DRIVER -i$DEV -c$CONF_WPA -B ; then echo "Fatto" wired $DEV else echo echo "**ERRORE**" echo exit 1 fi elif [ "$TYPE" == "wep" -o "$TYPE" == "WEP" ]; then # Se non e' WPA, allora e' WEP echo "Hai scelto WEP" # Chiedo la password echo "Adesso dovrai inserire la password." echo "Vuoi che i caratteri digitati vengano visualizzati? (s/n) " read risp echo -n "Inserisci la password in esadecimale (controlla le impostazioni dell'access point): " if [ -z "$risp" -o "$risp" == "n" ]; then read -s PASSWD elif [ "$risp" == "s" ]; then read PASSWD else echo echo "**ERRORE**" echo exit 1 fi # Imposto i parametri wireless echo "Setto i parametri wireless per $DEV..." if $IWCONFIG $DEV mode $MODE essid $ESSID channel $CHAN && $IWCONFIG $DEV key $PASSWD ; then echo "Fatto" wired $DEV else echo echo "**ERRORE**" echo exit 1 fi else echo echo "**ERRORE**" echo "Devi inserire un tipo di password tra quelli proposti!" echo exit 1 fi elif [ "$risp" == "n" ]; then # La rete wireless non ha bisogno di password echo "La rete scelta non e' protetta." # Imposto i parametri wireless echo "Setto i parametri wireless per $DEV..." if $IWCONFIG $DEV mode $MODE essid $ESSID channel $CHAN ; then echo "Fatto" $IWCONFIG $DEV key off &> /dev/null wired $DEV else echo echo "**ERRORE**" echo exit 1 fi else echo echo "**ERRORE**" echo exit 1 fi } # Controllo le dipendenze check_dep # Imposto gli eseguibili utilities # Controllo i parametri passati allo script case "$1" in "--wired") wired $2 exit 0 ;; "--wireless") wireless $2 exit 0 ;; *) echo echo "Opzioni valide:" echo "$0 --wired [dev] --> per configurare reti cablate" echo "$0 --wireless [dev] --> per configurare reti wireless" echo -e "\t\t[dev] --> l'interfaccia da usare (opzionale, da usare senza '[]')" echo echo "Versione 1.0" echo "By Ansa89 (http://stiiv.netsons.org)" echo exit 1 ;; esac #EOF
- Autore: Ansa89
News
Sezione dedicata alla spiegazione delle eventuali migliorie che vengono apportate allo script.
- V 1.0 --> Prima release...Attendo qualche feedback per eventuali modifiche
Feedback
Per commenti e suggerimenti inviatemi una e-mail a
ansa89[AT]slacky[DOT]it
Oppure venite sul mio sito internet
HAVE A LOT OF FUN