Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/05/2012, à 13:03

voxpopuli

Script random Mac adresse

Coucou. Je suis sur un script qui permet de changer automatiquement les adresse mac de toutes les cartes réseaux de l'ordinateur. J'ai déjà codé une version qui propose et demande quelle interface réseau anonymiser mais cette fois je souhaite que ce script soit le plus léger possible et n'aille besoin que du code admin pour faire son travail.

Je bloque au niveau des "grep": j'arrive a récupérer la liste des interfaces réseaux (grâce a un regex qui recherche dans ifconfig les interfaces ethernet, wifi et bluetooth et me place les résultats dans une chaine de caractères). Mon soucis est que je n'arrive pas a récupérer les interfaces individuellement et qu'étrangement grep me renvois qu'il ne trouve qu'une concordance alors qu'il a récupéré deux éléments (se qui est potentiellement foireux vu que je souhaiterai utiliser une boucle afin de faire la même manip sur chaque interface).

Voici donc le dis script:

#!/bin/bash
#AnonMacX By VoxPopuli

echo '==> Be'
echo ' Anonym <=='
#    if [ ! "$SUDO_USER" ]; then
#    sudo -k "$0"
#    exit 0
#    fi
InterfaceWifi="0"
#recup de la liste des interfaces
variable=$(ifconfig | grep Link)
InterfaceWifi=$( echo $variable | grep -o -P -T '(wlan.(0-9)*)|(eth.(0-9)*)|(hci.(0-9)*)')
echo 'Liste Interface vaut :' $InterfaceWifi 
#if [ $InterfaceWifi ]; then
InterfaceTmp=$(echo $InterfaceWifi | grep -o -P --max-count=1 -w 'wlan.[0-9]*|eth.[0-9]*|hci.[0-9]*')
echo 'Interface temporaire vaut :' $InterfaceTmp
Nombre=$(echo $InterfaceWifi | grep -o -P -w -c 'wlan.(0-9)*|eth.(0-9)*|hci.(0-9)*')
echo 'Nombre interface :' $Nombre
#fi

# PARTIE EN CONSTRUCTION
#if [ $InterfaceTmp ]; then
#    echo 'Interface temporaire : '$InterfaceTmp
#    RndMac=$( openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/.$//' ) #creation aleatoire adresse mac
#    echo 'Adresse Mac temporaire / Tempory Mac:' $RndMac
#        ifconfig $InterfaceTmp down
#        ifconfig $InterfaceTmp hw ether $RndMac
#        ifconfig $InterfaceTmp up
#else
#    echo 'Interface Inexistante / Device Not Found'
#fi
exit 0

Dans le shell j'ai les infos suivante:

:~/Script$ ./AnonMacX.sh 
==> Be
 Anonym <==
variable vaut : eth0 wlan0
Interface temporaire vaut : eth0 wlan0
Nombre interface : 1

J'en profite en même temps, j'ai un autre bug (repéré sur mon autre script), de temps en temps, alors que le script tente de changer l'adresse mac, il reçoit le code d'erreur suivant: SIOCSIFHWADDR: Ne peut attribuer l'adresse demandée. Des fois on ne le voit pas de la journée, des fois ce bug revient 5 fois d'affilé (par exemple il a buggé avec la mac suivante: c1:21:18:66:c2:52).

Merci d'avance pour votre aide et votre patience

Dernière modification par voxpopuli (Le 05/05/2012, à 13:46)


« Si la destinée ne nous aide pas, nous l'aiderons nous même à se réaliser !  »
$Wold.Action.Boot();

Hors ligne

#2 Le 05/05/2012, à 13:32

Brunod

Re : Script random Mac adresse

Salut, tu connais macchanger ?

macchanger --help
GNU MAC Changer
Usage: macchanger [options] device

  -h,  --help                   Print this help
  -V,  --version                Print version and exit
  -s,  --show                   Print the MAC address and exit
  -e,  --endding                Don't change the vendor bytes
  -a,  --another                Set random vendor MAC of the same kind
  -A                            Set random vendor MAC of any kind
  -r,  --random                 Set fully random MAC
  -l,  --list[=keyword]         Print known vendors
  -m,  --mac=XX:XX:XX:XX:XX:XX
       --mac XX:XX:XX:XX:XX:XX  Set the MAC XX:XX:XX:XX:XX:XX

Report bugs to alvaro@gnu.org


Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis

Hors ligne

#3 Le 05/05/2012, à 13:40

voxpopuli

Re : Script random Mac adresse

Oui je l'ai sur mon ordinateur et il n'est pas franchement abouti. Pour utiliser macchanger il faut les lignes de commandes suivantes:

sudo su
ifconfig Interface_Reseau down
macchanger -r Interface_Reseau
ifconfig Interface_Reseau up

Le tout peut être condensé en

 sudo ifconfig Interface down | sudo macchanger -r Interface | sudo ifconfig Interface up

Se qui est très proche de la ligne suivante (ou on fait tout le boulot):

sudo ifconfig Interface down | sudo ifconfig Interface hw ether Mac_Addr | sudo ifconfig Interface up

J'avais pensé mettre macchanger pour le random mais je me suis dis que rajouter une dépendance pour un script aussi petit sa craignait ^^. Donc pour en revenir a mon script, a la différence avec macchanger c'est qu'il ne demandera strictement rien a part le mot de passe admin (requis pour ifconfig), et qu'il fera tout seul les ifconfig.

Merci de ta réponse en tout cas wink


« Si la destinée ne nous aide pas, nous l'aiderons nous même à se réaliser !  »
$Wold.Action.Boot();

Hors ligne

#4 Le 05/05/2012, à 13:49

Brunod

Re : Script random Mac adresse

Et si tu repartais du source de macchanger ? wink


Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis

Hors ligne

#5 Le 05/05/2012, à 14:15

voxpopuli

Re : Script random Mac adresse

Pas bête l'idée, je vais regarder de ce côté là, peut-être que sa réglera le bug qui survient de temps en temps. Merci pour la suggestion. Mais en attendant, histoire d'avoir appris au moins quelque chose en bash, existe-t-il une fonction équivalente à preg_match (php), a savoir qui recherche dans une string pour terminer dans un array?
En attendant je vous soumet mon script concurrent a macchanger smile

Cette version demande quelle interface il faut changer. Vu que le bug cité plus haut survient de temps en temps, je suggère de vérifier que l'opération s'est bien déroulé avant de se fier a l'adresse mac random (via un simple ifconfig).
Nécessite de le rendre exécutable ("sudo chmod +x ./AnonMac.sh")

#!/bin/bash
#AnonMac By VoxPopuli
#tested on ubuntu
echo '==> Be'
echo ' Anonym <=='
    if [ ! "$SUDO_USER" ]; then
    sudo -k "$0"
    exit 0
    fi
InterfaceChoisie=""
UtilisateurSaisie=''
#recup de la liste des interfaces
variable=$(ifconfig | grep Link)
InterfaceWifi=$( echo $variable | grep -o -P '(wlan.(0-9)*)|(eth.(0-9)*)|(hci.(0-9)*)')
echo 'Quelle interface souhaitez-vous rendre anonyme? / Choose your device'
echo $InterfaceWifi
read UtilisateurSaisie
if [ $UtilisateurSaisie ]; then
InterfaceChoisie=$(echo $InterfaceWifi | grep -o -P $UtilisateurSaisie)
fi
if [ $InterfaceChoisie ]; then
    echo 'Interface choisie / Device : '$InterfaceChoisie
    RndMac=$( openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/.$//' ) #creation aleatoire adresse mac
    echo 'Adresse Mac temporaire / Tempory Mac:' $RndMac
        ifconfig $InterfaceChoisie down
        ifconfig $InterfaceChoisie hw ether $RndMac
        ifconfig $InterfaceChoisie up
else
    echo 'Interface Inexistante / Device Not Found'
fi
exit 0

Dernière modification par voxpopuli (Le 05/05/2012, à 14:18)


« Si la destinée ne nous aide pas, nous l'aiderons nous même à se réaliser !  »
$Wold.Action.Boot();

Hors ligne

#6 Le 05/05/2012, à 16:18

no_spleen

Re : Script random Mac adresse

Bonjour,

Pour en revenir au problème initial, l'option -c de [e]?grep ne compte pas le nombre de résultats du regex, mais le nombre de ligne contenant au moins 1 match.

Essaye plutôt

Nombre=$(echo $InterfaceWifi | awk '{x=x+NF}END{print x}')

EDIT :

ou plus simple

Nombre=$(echo $InterfaceWifi | wc -w)

EDIT2

ou si tu veux être sur de récupérer uniquement des interfaces

Nombre=$(echo $InterfaceWifi | tr ' ' '\n' | grep -c '[wlan|eth][0-9]*')

Dernière modification par no_spleen (Le 05/05/2012, à 16:41)

Hors ligne

#7 Le 06/05/2012, à 12:50

voxpopuli

Re : Script random Mac adresse

Merci de cette réponse fort intéressante no_spleen. La boucle peut donc être mise en place vu que maintenant on a la limite, reste plus qu'a récupérer proprement les valeurs une après l'autre. En php se serait tout simple, un preg_match avec une boucle foreach ^^

J'ai découvert pourquoi mon script buggait: certaines adresses mac ne peuvent être attribuer. Je ne comprends par contre pas pourquoi, ces adresses ne font pas parties des réservées visible sur wikipédia. Je donne une série d'exemple testé en ligne de commande:
Quand la commande ne renvoi rien, comme a l'habitude linux c'est que tout s'est bien déroulé, si non il est indiqué l'erreur directement sous la commande.

voxpopuli@:~/Script$ sudo ifconfig wlan0 hw ether 00:00:c5:62:3b:41
voxpopuli@:~/Script$ sudo ifconfig wlan0 hw ether 09:eb:c5:62:3b:41
SIOCSIFHWADDR: Ne peut attribuer l'adresse demandée
voxpopuli@:~/Script$ sudo ifconfig wlan0 hw ether 19:eb:c5:62:3b:41
SIOCSIFHWADDR: Ne peut attribuer l'adresse demandée
voxpopuli@:~/Script$ sudo ifconfig wlan0 hw ether 0a:eb:c5:62:3b:41
voxpopuli@:~/Script$ sudo ifconfig wlan0 hw ether 01:eb:c5:62:3b:41
SIOCSIFHWADDR: Ne peut attribuer l'adresse demandée
voxpopuli@:~/Script$ sudo ifconfig wlan0 hw ether 0b:eb:c5:62:3b:41
SIOCSIFHWADDR: Ne peut attribuer l'adresse demandée
voxpopuli@:~/Script$ sudo ifconfig wlan0 hw ether 0a:eb:c5:62:3b:41
voxpopuli@:~/Script$ sudo ifconfig wlan0 hw ether 0c:eb:c5:62:3b:41
voxpopuli@:~/Script$ sudo ifconfig wlan0 hw ether 0d:eb:c5:62:3b:41
SIOCSIFHWADDR: Ne peut attribuer l'adresse demandée
voxpopuli@:~/Script$ sudo ifconfig wlan0 hw ether 0e:eb:c5:62:3b:41
voxpopuli@:~/Script$ sudo ifconfig wlan0 hw ether 0f:eb:c5:62:3b:41
SIOCSIFHWADDR: Ne peut attribuer l'adresse demandée
voxpopuli@:~/Script$ sudo ifconfig wlan0 hw ether 02:eb:c5:62:3b:41


« Si la destinée ne nous aide pas, nous l'aiderons nous même à se réaliser !  »
$Wold.Action.Boot();

Hors ligne