#1 Le 10/12/2008, à 19:17
- saelyx
Scripts de simplification - configuration IP - configuration WIFI
ipconfig - Affiche la configuration IP, la passerelle par défaut et le serveur DNS, voici un exemple de sortie :
Interface réseau wlan0 [ 00:1c:bc:83:13:37 ] sur notebook
Adresse IPv4 .........: 192.168.6.119 / 255.255.0.0
Paserelle par défaut .: 192.168.1.1 / TTL=128 [ 00:12:42:55:13:37 ]
Adresse IPv6 .........: fe90::41e:cffe:fe81:1337 / 64
Serveur DNS primaire .: 192.168.1.1
Voilà le script :
#!/bin/bash
EXTERNE=0
IFCES=`ifconfig | grep -i "link" | grep -v "lo" | awk {'print $1'} | grep -v "wmaster"`
function adresse_ip()
{
IFCE="$1"
mac=`ifconfig $IFCE | grep "HW" | awk {'print $5'} | tr A-Z a-z | tr - : | cut -d':' -f1,2,3,4,5,6`
mask=`ifconfig $IFCE | grep "inet adr" | awk {'print $4'} | cut -d':' -f2`
ip4=`ifconfig $IFCE | grep "inet adr" | awk {'print $2'} | cut -d':' -f2`
gw=`route -n | grep "$IFCE" | grep "UG" | awk {'print $2'}`
ip6=`ifconfig $IFCE | grep inet6 | awk {'print $3'} | cut -d'/' -f1`
scope=`ifconfig $IFCE | grep inet6 | awk {'print $3'} | cut -d'/' -f2`
host=`hostname`
if [ ! -z "$gw" ] ; then
mac_gw=`sudo arping -c 1 -w 1 -I $IFCE $gw | grep -oE "([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])" 2>/dev/null | tr A-Z a-z`
fi
if [ $EXTERNE -eq 1 ] ; then httping -h 66.102.9.104 -t 1 -c 1 2>&1 >/dev/null ; [ $? -eq 0 ] && ipe=`/opt/bin/ip-extern` ; fi
[ ! -z $gw ] && ttl=`ping -c 1 $gw -w 3 | grep ttl | awk {'print $6'} | cut -d'=' -f2`
[ -z $ttl ] && ttl="??"
echo -e "
Interface réseau \033[29;1m$IFCE\033[00m [ \033[32;1m$mac\033[00m ] sur \033[29;2m$host\033[00m
"
[ ! -z "$ip4" ] && echo -ne " Adresse IPv4 .........: \033[29;1m$ip4"
[ ! -z "$mask" ] && echo -e " / $mask\033[00m"
[ -z "$mask" ] && echo -e "\033[00m"
[ ! -z "$gw" ] && echo -e " Paserelle par défaut .: \033[29;1m$gw / TTL=\033[32;1m$ttl\033[00m [ \033[32;1m$mac_gw\033[00m\033[29;1m ]\033[00m"
[ ! -z "$ipe" ] && echo -e " Adresse externe ......: \033[32;1m$ipe\033[00m"
[ ! -z "$ip6" ] && echo -e " Adresse IPv6 .........: \033[29;1m$ip6\033[00m / \033[32;1m$scope\033[00m"
# echo
}
[ $# -eq 2 ] && [ "$2" = "-e" ] && EXTERNE=1
dns=`cat /etc/resolv.conf | grep "nameserver" | head -n 1 | awk {'print $2'}`
if [ $# -eq 0 ]
then
for IFCE in $IFCES
do
adresse_ip $IFCE
done
[ ! -z "$dns" ] && echo -e " Serveur DNS primaire .: \033[29;1m$dns\033[00m"
echo
exit 0
fi
if [ $# -eq 1 ]
then
echo $IFCES | grep "$1" 2>/dev/null >/dev/null
if [ $? -ne 0 ]
then
echo ; echo "[-] L'interface $1 n'existe pas." ; echo
exit 1
fi
IFCE=$1
adresse_ip $IFCE
[ ! -z "$dns" ] && echo -e " Serveur DNS primaire .: \033[29;1m$dns\033[00m"
echo
exit 0
fi
wiconfig - Affiche la configuration WiFi de l'interface sans-fil de façon plus claire, sans manquer d'informations
Voici ce qu'il produit en sortie :
Interface sans-fil wlan0 [ 00:1c:bc:83:13:37 ] sur notebook
Mode de la carte ........... : Managed
Adresse MAC du P.A. (BSSID) : 00:12:34:56:13:37
Nom du point d'accès (ESSID) : "WIFI_TEST"
Canal / Fréquence ...........: 64 / 5.32 GHz
Qualité du signal ...........: 76 %
Et le script :
#!/bin/bash
EXTERNE=0
IFCES=`ifconfig | grep -E "wlan|ath|rausb|wifi" | awk {'print $1'}`
function adresse_ip()
{
IFCE="$1"
mac=`ifconfig $IFCE | grep "HW" | awk {'print $5'} | tr A-Z a-z | tr - : | cut -d':' -f1,2,3,4,5,6`
host=`hostname`
essid=`iwconfig $IFCE | grep -oE "ESSID\:\"([a-zA-Z0-9\.\-\ ]){1,20}\"" | cut -d':' -f2`
ap=`iwconfig $IFCE | grep -oE "([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])"`
channel=`iwlist $IFCE channel | grep "Current" | grep -oE "([0-9]){1,2}\)" | cut -d')' -f1`
quality=`iwconfig $IFCE | grep "Quality" | awk {'print $2'} | cut -d'=' -f2 | cut -d':' -f2 | cut -d'/' -f1`
freq=`iwconfig $IFCE | grep -oE "Frequency\:([0-9\.]){1,5}\ GHz" | cut -d':' -f2`
mode=`iwconfig $IFCE | grep -oiE "mode\:([a-zA-Z]){1,10}" | cut -d':' -f2`
[ ! -z $gw ] && ttl=`ping -c 1 $gw -w 3 | grep ttl | awk {'print $6'} | cut -d'=' -f2`
[ -z $ttl ] && ttl="??"
echo -e "
Interface sans-fil \033[29;1m$IFCE\033[00m [ \033[32;1m$mac\033[00m ] sur \033[29;2m$host\033[00m
"
[ ! -z "$mode" ] && echo -e " Mode de la carte ........... : \033[29;1m$mode\033[00m"
[ ! -z "$essid" ] && echo -e " Adresse MAC du P.A. (BSSID) : \033[29;1m$ap\033[00m"
[ ! -z "$essid" ] && echo -e " Nom du point d'accès (ESSID) : \033[29;1m$essid\033[00m"
[ ! -z "$channel" ] && echo -e " Canal / Fréquence ...........: \033[29;1m$channel / $freq\033[00m"
[ ! -z "$quality" ] && echo -e " Qualité du signal ...........: \033[29;1m$quality %\033[00m"
}
if [ $# -eq 0 ]
then
for IFCE in $IFCES
do
adresse_ip $IFCE
done
echo
exit 0
else
echo $IFCES | grep "$1" 2>/dev/null >/dev/null
if [ $? -ne 0 ]
then
echo ; echo "[-] L'interface $1 n'est pas une interface sans fil. " ; echo
exit 1
fi
IFCE=$1
adresse_ip $IFCE
echo
exit 0
fi
Puis le plus intéressant, un script de connexion Wifi. Les préliminaires sont :
mkdir ~/deplacement/wifi
mkdir ~/deplacement/wpa
sudo ln -s /home/$USER/deplacement /root/deplacement
#!/bin/bash
airmonng='/opt/bin/airodump'
ipwraw='/opt/bin/ipwraw'
chemin='/root/deplacement/wpa'
app='wifi'
l=7 ; [ $USER = "root" ] && l=6
SAVED_FILE="$HOME/deplacement/wifi/"
# Programmes locaux
ifre='/opt/bin/ifre'
# strtoupper : wpa => WPA
# addquote : "Neuf WiFi" = Neuf WiFi => 'Neuf WiFi'
# Valeurs par défaut
dhcp=1
verbose=0
echo
# Quitte le programme
function die()
{
exit $1
}
# Affiche [+] en cas de probleme sinon [-]
function affiche()
{
msg=$1
err=$2
if [ $err=$test ]
then
printf "[-] $msg \n"
else
printf "[+] $msg \n"
fi
}
function usage()
{
echo "
Usage: $app <-a | -l | -m | -v file>
| <-i interface> <-e essid> <-b bssid> <-f freq> [-c wep|wpa [-k key] ] [-m PARAMS]
| <-s interface>
| <file>
<file> : Run configuration file
-a : Add a configuration file
-v file : View configuration file
-m file : Modifiy file with VIM
-r file : Remove configuration file
-l : List saved Access Point
-s interface : Scan with airodump
-i interface : Interface to use
-e essid : Access point's name
-b bssid : Access point's mac address
-f freq : Frequence, in fact this correspond to channel
-c wep|wpa : Set encodage to WEP or WPA
-k key : Key to use with previous encodage
-m PARAMS : If set, use manual configuration
PARAMS :
<ip address> <netmask> <broadcast> <gateway>
"
if [ $1 -eq 2 ] ; then
echo "
> Example : Open access point, with DHCP network configuration
$app -i eth1 -e INTERNET_FREE -f 11 -b 00:11:22:33:44:55
> Example : Protected access point, with DHCP network configuration and WPA encryption
$app -i eth1 -e WPA_PROTECTED -f 11 -b 00:12:34:56:78:9A -c wpa -k 'mon_code_wpa'
> Example : Protected access point, with manual network configuration and WEP encryption
$app -i eth1 -e WEP_PROTECTED -f 11 -b 00:12:34:56:78:9A -c wep -k '0123456789abcdef0123456789' -m 192.168.1.13 255.255.255.0 192.168.1.255 192.168.1.1
"
fi
exit $1
}
# Operations communes au reseau sans fil
function connexion_wifi()
{
ifce=$1
essid="$2"
ch=$3
ap=$4
[ $# -eq 5 ] && key=$5
affiche "Configuration de la carte $ifce" $? 0
sleep 1
[ $# -eq 4 ] && iwconfig $ifce essid "$essid" ap $ap channel $ch > /dev/null 2>/dev/null
[ $# -eq 5 ] && iwconfig $ifce essid "$essid" ap $ap channel $ch key $key > /dev/null 2>/dev/null
sleep 2
}
if [ $# -ne 1 -a $# -ne 8 -a $# -ne 12 -a $# -ne 17 -a $# -ne 10 -a $# -ne 2 ] ; then
echo "[!] Incorrect parameter count ($#)."
usage 1
fi
if [ $# -eq 1 ] ; then
case $1 in
-h) usage 0 ;;
-l) echo '[-] Wifi configuration file list :'
echo '----------------------------------'
for f in $SAVED_FILE/* ; do [ -f "$f" ] && echo "$f" | cut -d'/' -f$l ; done
i=0
for f in $SAVED_FILE/*/* ; do
i=$((i+1))
if [ -f "$f" ] ; then
d=$(echo "$f" | cut -d'/' -f$l)
w=$(echo "$f" | cut -d'/' -f$((l+1)))
[ $i -le 2 ] && echo -e "\033[01;29m$d/$w\033[00m"
[ $i -ge 3 ] && echo -e "$d/$w"
[ $i -eq 4 ] && i=0
fi
done
echo
exit 0 ;;
-a) echo '[-] Specify configurationn file :'
echo '---------------------------------'
printf "\033[01;39mFile =\033[00m " ; read file
printf "\033[01;32mInterface =\033[00m " ; read ifce
printf "\033[01;32mESSID =\033[00m " ; read essid
printf "\033[01;32mBSSID =\033[00m " ; read bssid
printf "\033[01;32mChannel =\033[00m " ; read channel
printf "\033[01;32mEncoding = " ; read enc
if [ "$enc" = "WPA" -o "$enc" = "wpa" ] ; then
printf "\033[01;32mDriver [wext] =\033[00m " ; read driver
fi
[ -z $driver ] && driver="wext"
printf "\033[01;32mKey = " ; read key
printf "\033[01;32mClient =\033[00m " ; read client
printf "\033[01;32mNetwork =\033[00m " ; read network
printf "\033[01;32mGateway =\033[00m " ; read gateway
key=$(echo $key | sed s/':'//g)
echo "##WIFI##;$essid;$bssid;$channel;$key;$client;$network;$gateway;$ifce;$enc;$driver" > $SAVED_FILE/$file
echo >> $SAVED_FILE/$file
[ ! -z $client ] && echo "spoof $ifce mac $client" >> $SAVED_FILE/$file
echo "echo \"[+] Setting interface to managed mode\"" >> $SAVED_FILE/$file
echo "ifconfig $ifce down ; iwconfig $ifce mode managed ; ifconfig $ifce up" >> $SAVED_FILE/$file
echo >> $SAVED_FILE/$file
if [ ! -z "driver" ] ; then
echo "##WIFI##;$essid;$bssid;$channel;$key;$client;$network;$gateway;$ifce;$enc;$driver" > $chemin/$essid.wpa
wpa_passphrase $essid $key >> $chemin/$essid.wpa
affiche "Generated WPA passphrase of key" 0
fi
if [ -z "$key" -a -z "$enc" -a -z "$network" ] ; then
echo "wifi -i $ifce -e $essid -b $bssid -f $channel " >> $SAVED_FILE/$file
elif [ ! -z "$key" -a ! -z "$enc" -a -z "$network" ] ; then
echo "wifi -i $ifce -e $essid -b $bssid -f $channel -c $enc -k $key" >> $SAVED_FILE/$file
elif [ ! -z "$key" -a ! -z "$enc" -a ! -z "$network" ] ; then
echo "wifi -i $ifce -e $essid -b $bssid -f $channel -c $enc -k $key -m $network $gateway" >> $SAVED_FILE/$file
elif [ -z "$key" -a -z "$enc" -a ! -z "$network" ] ; then
echo "wifi -i $ifce -e $essid -b $bssid -f $channel -m $network $gateway" >> $SAVED_FILE/$file
fi
echo >> $SAVED_FILE/$file
chmod +x $SAVED_FILE/$file
exit 0 ;;
esac
$SAVED_FILE/$1
exit $?
fi
if [ $# -eq 2 ] ; then
case $1 in
-v)
echo "[-] $2 :"
underline "[-] $2 :" ; echo
essid=`grep "##WIFI##" $SAVED_FILE/$2 | cut -d';' -f2`
bssid=`grep "##WIFI##" $SAVED_FILE/$2 | cut -d';' -f3`
channel=`grep "##WIFI##" $SAVED_FILE/$2 | cut -d';' -f4`
key=`grep "##WIFI##" $SAVED_FILE/$2 | cut -d';' -f5 | sed s/':'//g`
client=`grep "##WIFI##" $SAVED_FILE/$2 | cut -d';' -f6`
network=`grep "##WIFI##" $SAVED_FILE/$2 | cut -d';' -f7`
gateway=`grep "##WIFI##" $SAVED_FILE/$2 | cut -d';' -f8`
ifce=`grep "##WIFI##" $SAVED_FILE/$2 | cut -d';' -f9`
enc=`grep "##WIFI##" $SAVED_FILE/$2 | cut -d';' -f10`
driver=`grep "##WIFI##" $SAVED_FILE/$2 | cut -d';' -f11`
printf "\033[01;32mInterface =\033[00m $ifce
\033[01;32mESSID =\033[00m $essid
\033[01;32mBSSID =\033[00m $bssid\033[00m
\033[01;32mChannel =\033[00m $channel
\033[01;32mEncoding = $enc\033[00m"
if [ "$enc" = "WPA" -o "$enc" = "wpa" ] ; then
printf "
\033[01;32mDriver = $driver\033[00m "
fi
printf "
\033[01;32mKey = $key\033[00m
\033[01;32mClient =\033[00m $client
\033[01;32mNetwork =\033[00m $network
\033[01;32mGateway =\033[00m $gateway"
if [ -z $key ] ; then
printf "
\033[01;32mCommand =\033[00m iwconfig $ifce essid $essid ap $bssid channel $channel
"
else
printf "
\033[01;32mCommand =\033[00m iwconfig $ifce essid $essid ap $bssid key $key channel $channel
"
fi
echo
exit 0
;;
-r)
if [ -f $SAVED_FILE/$2 ] ; then
echo -n "[-] Removing $2..."
rm -f $SAVED_FILE/$2
echo "done."
echo
else
echo -n "[-] File not found : $SAVED_FILE/$2"
echo
echo
fi
exit 0
;;
-m)
if [ -f $SAVED_FILE/$2 ] ; then
echo -n "[-] Editting $2..."
vim $SAVED_FILE/$2
echo "done."
echo
else
echo -n "[-] File not found : $SAVED_FILE/$2"
echo
echo
fi
exit 0
;;
-s) $airmonng $2 ; exit 0
;;
esac
usage 1
fi
while getopts "i:e:k:b:c:f:mvhxs:" option ; do
case $option in
i) ifce=$OPTARG ;;
c) enc=$OPTARG ;;
k) key=$OPTARG ;;
e) essid=$OPTARG ;; # echo `addquote $essid` ; exit ;; #`addquote $OPTARG` ;;
b) bssid=$OPTARG ;;
m) dhcp=0 ;;
f) ch=$OPTARG ;;
v) verbose=1 ;;
h) usage 0 ;;
default) usage 2 ;;
esac
done
shift $((OPTIND - 1))
# echo
echo "[-] Interface ......: $ifce"
# echo $key
[ -z $enc ] && enc="OPEN"
echo "[-] Codage .........: $enc"
# [ ! -z $key ] && echo "[-] Key ............: $key"
[ $dhcp -eq 1 ] && echo "[-] Network config. : DHCP"
[ $dhcp -eq 0 ] && echo "[-] Network config. : manual"
echo "[-] Access Point ...: $bssid"
echo
echo "[+] Associating interface with $essid : $ch"
if [ $enc != "OPEN" ] ; then
if [ $enc = "WEP" ] ; then
connexion_wifi $ifce "$essid" $ch $bssid $key
# sleep 1
iwconfig $ifce 2>&1 | grep -i "una" >/dev/null ; t1=$?
iwconfig $ifce 2>&1 | grep -i "not" >/dev/null ; t2=$?
if [ $t1 -eq 0 -o $t2 -eq 0 ] ; then echo "[!] Unable to associate with $essid" ; die 1 ; fi
[ $dhcp -eq 0 ] && exec $ifre -m $ifce $*
[ $dhcp -eq 1 ] && exec $ifre $ifce
exit 0
fi
if [ $enc = "WPA" ] ; then
for i in `seq 1 3` ; do pkill wpa_supplicant >/dev/null 2>/dev/null ; done
affiche "Killed old wpa_suuplicant client" 0
affiche "Configuration interface to no AP" 0
iwconfig $ifce essid "" ; iwconfig $ifce ap 00:00:00:00:00:00
sleep 1
affiche "File : $chemin/$essid.wpa" 0
#wpa_supplicant -B -i $ifce -c $chemin/$essid.wpa >/dev/null 2>/dev/null
driver=`grep "##WIFI##" $chemin/$essid.wpa | cut -d';' -f11`
printf "[-] Message : "
wpa_supplicant -B -i $ifce -c $chemin/$essid.wpa -g $ifce -D $driver 2>&1 >/dev/null
sleep 4
iwconfig $ifce 2>&1 | grep -i "una" >/dev/null ; t1=$?
iwconfig $ifce 2>&1 | grep -i "not" >/dev/null ; t2=$?
sleep 1
if [ $t1 -eq 0 -o $t2 -eq 0 ] ; then echo "[!] Unable to associate with $essid" ; die 1 ; fi
[ $dhcp -eq 0 ] && exec $ifre -m $ifce $*
[ $dhcp -eq 1 ] && exec $ifre $ifce
exit 0
fi
else
connexion_wifi $ifce $essid $ch $bssid
iwconfig $ifce 2>&1 | grep -i "una" >/dev/null ; t1=$?
iwconfig $ifce 2>&1 | grep -i "not" >/dev/null ; t2=$?
if [ $t1 -eq 0 -o $t2 -eq 0 ] ; then echo "[!] Unable to associate with $essid" ; die 1 ; fi
[ $dhcp -eq 0 ] && exec $ifre -m $ifce $*
[ $dhcp -eq 1 ] && exec $ifre $ifce
fi
A bon entendeurs...
Dernière modification par saelyx (Le 16/12/2008, à 00:28)
-----BEGIN GEEK CODE BLOCK-----
GCS d- s+:+ a? C++ UL+++ P L++ E--- W+ N o-- K- w+ O-- M- V-
PS+ PE Y PGP t 5 X+ R- tv-- b+ DI- D++ G e-- h--- r+++ z+++
------END GEEK CODE BLOCK------
Hors ligne