créer un fichier texte en fonction de l'interface reseau

Bonjour à tous,

Je vous sollicite car j’ai besoin de votre aide.

J’aurais besoin de créé un fichier texte vide dans mon /home en fonction de l’interface réseau (eth0 ou wlan0) active.

Ainsi si je suis connecté au net via eth0 je voudrais que mon /home contienne un fichier “eth0” et si je suis connecté en wlan0 un fichier qui se nomme “wlan0”.

Alors biensur je pourais faire un script qui tourne en arrière plan et qui test en permanence mes interfaces réseau. Mais je ne trouve pas ça très propre…

Quelqu’un saurait comment je peux faire cela?

Il suffit de créer des scripts dans /etc/network/if-up.d/ et /etc/network/if-down.d/
La variable contenant le nom de l’interface qui a généré l’évènement up/down (selon le répertoire) est $IFACE. Tu peux probablement aussi faire un seul script commun aux deux répertoires (avec un symlink) et récupérer le type d’évènement dans une variable, mais là tout de suite je me rappelle plus laquelle donc faire deux scripts distincts c’est plus simple. :mrgreen:
L’avantage de ces répertoires c’est que ça marche toujours peu importe la manière dont tu te connectes (/etc/network/interfaces, NetworkManager, Wicd, …).

Je ne connaissais pas ce dossier :smiley: ça m’a l’air pas mal :wink:

Le problème j’ai l’impression que quoi que je fasse, la variable $IFACE me renvoit toujours “eth0”.

J’ai mis ce script le script suivant dans /etc/network/if-up.d :

[code]#! /bin/bash

rm /home/snake57/wlan0
rm /home/snake57/eth0

touch /home/snake57/$IFACE[/code]

Mais comme je l’ai dis le fichier créé se nomme tous le temps “eth0”.

Déjà, comme je te disais perso je ferais deux scripts. Dans if-up.d/ tu fais un touch “/home/snake57/$IFACE” et dans if-down.d/ tu fais juste un rm “/home/snake57/$IFACE”.
Je peux te garantir que ça marche, sur mon netbook j’ai un script qui prend $IFACE en compte pour ajuster mon MTU et il marche aussi bien pour eth0 que wlan0 (d’ailleurs il s’exécute aussi pour lo mais je fais un test pour exclure ce cas).

Si tu veux voir ce qui se passe précisément tu peux essayer ce script :

#!/bin/sh LOGFILE="/home/snake57/if-up.log" echo >>"$LOGFILE" "------------------------------" env >>"$LOGFILE" echo >>"$LOGFILE" "------------------------------" echo >>"$LOGFILE"
Ça te listera dans le fichier log de ton choix toutes les variables d’environnement disponibles, charge à toi d’essayer

Je viens de tester avec deux scripts, un dans if-up.d pour créer le fichier l’autre dans if-down.d pour le supprimer.

Les deux scripts fonctionne, je vois bien le fichier se supprimer et se recréer lorsque je passe de l’ethernet au wifi et vice versa.

Mais dans tous les cas mon fichier se nomme “eth0” je ne comprends pas pourquoi?!?!

As-tu essayé le script que je t’ai donné (celui avec env) ? Ça te permettra de voir ce qui se passe précisément au niveau des variables d’environnement.
Tu peux aussi laisser tes scripts actuels en place et faire ifdown lo && ifup lo en l’état actuel de tes scripts ça devrait te créer un fichier lo dans ton home puisqu’apparemment tu ne fais aucun test pour exclure lo.

J’ai trouver le soucis.

Enfait lorsque je passe par l’interface graphique pour switcher de wlan0 à eth0 et vice versa les scripts fonctionne très bien.

Mais si je suis connecté en eth0 et que je débranche mon cable ethernet, ça me reconnecte automatiquement sur wlan0 et c’est la que le script continue a me donner eth0 alors qu’on est passé sur wlan0.

Je ne sais pas ce qu’est lo :blush: Je n’utilise que wlan0 et eth0

C’est bizarre, chez moi ça marche peu importe la manière dont je m’y prends (y compris en débranchant sans prévenir). :017

lo c’est l’interface locale (loopback). Elle est systématiquement activée, c’est par elle que passent tous les paquets à destination de localhost (127.0.0.1). Tu peux vérifier sa présence avec ifconfig. :wink:

Question accessoire pour mon édification personnelle, à destination du pro du réseau qui se reconnaîtra s’il passe par là… :wink:
Disons que ma machine est configurée avec une IP LAN 192.168.1.10. Si, localement, j’envoie un paquet vers cette IP ça passe par l’interface concernée (eth0 par exemple) ou bien c’est court-circuité par lo ? Dans l’absolu ça n’a pas grande importance vu que le paquet ne sort jamais sur le LAN, c’est juste une question de curiosité et comme je ne sais pas me servir des trucs genre tcpdump (oui je sais c’est pas compliqué, faut juste que j’apprenne à décoder le bazar :blush:) c’est plus facile de demander… Le seul endroit où je vois une éventuelle différence de comportement c’est par rapport aux règles iptables qui intègrent une condition en fonction de l’interface.

ok Siam merci pour ton aide, j’ai plus qu’a trouvé pourquoi ça marche pas en débranchant le câble. Je vais faire quelques test.

Salut,
Simple curiosité: Ça te sert à quoi d’avoir ce fichier dans ton /home ?

Je reviens vers vous car la solution apportée ne me satisfait pas. Puisque chez moi lorsque je débranche physiquement le câble ethernet et que mon PC passe en wifi. le script proposé ne fonctionne pas.

Mon idée est donc de créer un nouveau script dans if-up.d et que ce script fasse un test fiable me permettant de savoir si je suis sur eth0 ou wlan0. Le problème est que je ne vois pas comment faire ce test.

Si quelqu’un peux m’aider je suis preneur.

[quote=“lol”]Salut,
Simple curiosité: Ça te sert à quoi d’avoir ce fichier dans ton /home ?[/quote]
Pour le moment simplement à faire des tests, je veux simplement pouvoir connaître a tout moment l’interface utilisée. Donc je le met dans mon /home comme ça je peux vérifier simplement le fonctionnement.

[quote=“syam”]Question accessoire pour mon édification personnelle, à destination du pro du réseau qui se reconnaîtra s’il passe par là… :wink:
Disons que ma machine est configurée avec une IP LAN 192.168.1.10. Si, localement, j’envoie un paquet vers cette IP ça passe par l’interface concernée (eth0 par exemple) ou bien c’est court-circuité par lo ?[/quote]
Comme le pro du réseau ne semble pas être passé par là, je vais répondre à sa place.
La réponse est donnée par la commande "ip route get ". On voit que pour une adresse locale, l’interface de sortie est toujours lo. Et c’est normal : les paquets sortant par une interface ethernet son émis sur le câble. Certes on aurait pu imaginer un mécanisme de rebouclage à l’intérieur du pilote ethernet, mais ce serait se compliquer la vie pour rien alors que l’interface de loopback est là pour ça.

:laughing:
Merci pour l’explication. :wink: