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 06/06/2013, à 16:36

fabkzo

Recuperer IP Raspberry Pi en Bash

Bonjour,

Je suis l'heureux possesseur d'un Raspberry Pi depuis peu; je l'utilise avec Raspbian, qui est une Debian adaptée pour cet appareil.
Mon objectif est simple : l'utilisant en nomade j'ai besoin de pouvoir recupérer la ou les adresse(s) ip de la machine ( locale et publique ) afin de pouvoir l'utiliser en ssh ; ne possédant pas de lcd pour le moment je cherche une solution à moindre coùt pour récupérer ces infos d'où l'idée de le faire en bash.
Le problème étant que je n'ai pas forcément les supports nécessaires pour la récupérer ( lecteur de carte sd, périphériques+ecran hdmi , envoi de mails non  autorisés. )
Je veux donc pouvoir envoyer ces données sur:
Problème 1 ==> une clé USB si elle est connectée et montée
et
Problème 2 ==> Sur un site distant
sinon dans un fichier log ( dans $HOME par exemple)

Bon...
J'ai commencé à étudier la chose ; je sais que je vais mettre le script dans /etc/network/if-up.d afin qu'il se lance dès qu'un câble réseau est connecté
ensuite je récupère l'état de l'usb, l'ip locale, l'ip publique si connecté à internet et doit lancer les commandes en fonction de cela.
Le top serait que le script se lance aussi des qu'une clé est insérée.
Et c'est là que je me complique ; si quelqu'un d'intéressé pouvait me filer un coup de main ce serait gentil ^^

Voilà ce que j'ai commencé à faire ( $USB n'est pas encore créée il faut que j'étudie udev ) Sachant que j'ai un souci avec l'ordre des évenements à gerer; je ne sais pas si je ne dois utiliser que du "if...elif...", ou du "case" ou créer des fonctions que je vais appeler plutôt que des variables... enfin je m'embrouille...

#!/bin/bash

ip=$( ip addr show eth0 | grep -w inet | awk '{print$2}' | cut -d/ -f1 )

if [ -z "$ip" ]; then

break

fi

usb=$(...)
ip2=$( w3m -dump http://www.monip.org/ | awk -F': ' ' /IP/{print$2}')

sendips()
{
echo -e "adresse IP reseau local: $ip\nadresse ip publique : $ip2 " > /media/recupip/$ip.txt 
curl --data-urlencode "file@$ip.txt" http://www.monsite.com/.../...
}

if [ -z "$ip2" ] && [ -n "$usb" ] ; then

echo -e "adresse IP reseau local: $ip"  > /media/recupip/$ip.txt 

elif [ -z "$ip2" ] && [ -z "$usb" ] ; then

echo -e "adresse IP reseau local: $ip"  > $HOME/$ip.txt

else

sendips()

fi

pinterest ==> fabkzo!
Python beginner on Rpi
http://www.fabkzo.com

Hors ligne

#2 Le 07/06/2013, à 05:37

nesthib

Re : Recuperer IP Raspberry Pi en Bash

Pour lancer ton script à l'insertion de la clé, regarde du côté de udev, tu peux lancer des commandes arbitraires et donc écrire sur ta clé ton adresse IP :

ACTION=="add", SUBSYSTEMS=="usb", ATTRS{product}=="…" ,  RUN+="/usr/bin/touch /tmp/u"

en mettant le modèle de la clé dans ATTRS{product} (facultatif mais permet de cibler précisément ta clé, ou encore mieux utilise ATTRS{serial}).

Quelques simplifications peuvent être faites :

ip addr show eth0 | awk -F '[ /]*' '/inet /{print $3}'

L'ensemble des tests qui suit est un peu brouillon et manque d'indentation pour être clair (les lignes vides ne servent en revanche à rien), mais ça me semble correct


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#3 Le 07/06/2013, à 18:49

fabkzo

Re : Recuperer IP Raspberry Pi en Bash

Merci pour la simplification , ok pour l'indentation

à propos de udev, crois-tu que je puisse faire en sorte que quelque soit la clé USB - ou support de stockage -utilisé je puisse lancer cela , évitant des réglages pour un support unique qui peut être perdu?
( avant que je ne me tape la doc  )

De plus je pensais rajouter une partie au début du script qui check si les outils necessaires sont bien installés ( par ex: curl ) et sinon les installer mais SANS les droits roots compte tenu du fait que je n'ai  pas acces à l'interface... ça reste tres optionnel  puisque je peux le faire avant , néanmoins j'aimerais savoir comment faire  ( avec dpkg? )


pinterest ==> fabkzo!
Python beginner on Rpi
http://www.fabkzo.com

Hors ligne

#4 Le 07/06/2013, à 19:46

nesthib

Re : Recuperer IP Raspberry Pi en Bash

Tu peux faire ta règle udev pour n'importe quel support USB, il suffit de ne pas mettre la contrainte sur l'identifiant de ta clé.

En ce qui concerne l'installation sans droits root des paquets, c'est une mauvaise idée et, à mon avis, une perte de temps. Configure correctement tes outils dès le départ.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#5 Le 10/06/2013, à 22:41

fabkzo

Re : Recuperer IP Raspberry Pi en Bash

Voici la dernière mouture de mon petit script:

#!/bin/bash

day=$(date)
usb=$(ls /media/USB)
ip=$(ip addr show eth0 | awk -F '[ /]*' '/inet /{print $3}')
ip2=$(curl ifconfig.me)
sleep 3
if [ -z "$ip" ]; then
    exit 0
else
    echo -e "$day\nadresse IP reseau local: $ip" > /tmp/$ip.txt
fi
if [ -n "$usb" ] && [ -z "$ip2" ]; then
    mv /tmp/$ip.txt /media/USB/$ip.txt
else
    echo -e "$day\nadresse IP reseau local: $ip\nadresse ip publique : $ip2 " > /media/USB/$ip.txt
    curl --data-urlencode "file@/tmp/$ip.txt" http://www.fabkzo.com/.../...

fi

Notes:

-Udev n'est pas utilisé pour la gestion d'évènements à l'insertion d'une clé USB (lancement de scripts etc... ) compte tenu de ce qui semble être une  chute de tension à l'insertion de la clé qui coupe l'interface réseau du pi
-la clé USB  est montée automatiquement au lancement  grâce aux réglages de /etc/fstab
-Mon curl n'est pas prêt pour l'envoi des données sur le net, du coup le cas où l'accès au net est existant mais la clé USB absente n'est pas résolvable.

Au sujet de Curl plusieurs choix:
- soit poster les données en tant que commentaires sur un site qui m'appartient
- soit un truc style pastebin
- soit ce qui m'interesse le plus : création préalable d'un fichier XML , envoi pour remplacement par curl , lecture directe sur page web sans authentification ou quoi que ce soit ( ==>ajax)
[Et c'est là que par le pouvoir du crâne ancestral j'en appelle à toutes les forces qui pourraient m'aider...]
-soit tout faire mais pfiou...

Je compte rajouter l'envoi d'un mail  (pour ceux qui n'auraient fait que ça) mais mon but est de pouvoir lire directement les éléments de mon petit appareil en rentrant une URL à partir d'un smartphone.

Si vous avez des idées d'infos à rajouter -tant qu'à faire- à l'enregistrement des données( resultat traceroute? nslookup? météo? ) je suis preneur !


pinterest ==> fabkzo!
Python beginner on Rpi
http://www.fabkzo.com

Hors ligne

#6 Le 15/06/2013, à 07:33

peyo56

Re : Recuperer IP Raspberry Pi en Bash

fabkzo a écrit :

Voici la dernière mouture de mon petit script:

#!/bin/bash

day=$(date)
usb=$(ls /media/USB)
ip=$(ip addr show eth0 | awk -F '[ /]*' '/inet /{print $3}')
ip2=$(curl ifconfig.me)
sleep 3
if [ -z "$ip" ]; then
    exit 0
else
    echo -e "$day\nadresse IP reseau local: $ip" > /tmp/$ip.txt
fi
if [ -n "$usb" ] && [ -z "$ip2" ]; then
    mv /tmp/$ip.txt /media/USB/$ip.txt
else
    echo -e "$day\nadresse IP reseau local: $ip\nadresse ip publique : $ip2 " > /media/USB/$ip.txt
    curl --data-urlencode "file@/tmp/$ip.txt" http://www.fabkzo.com/.../...

fi

Notes:

-Udev n'est pas utilisé pour la gestion d'évènements à l'insertion d'une clé USB (lancement de scripts etc... ) compte tenu de ce qui semble être une  chute de tension à l'insertion de la clé qui coupe l'interface réseau du pi
-la clé USB  est montée automatiquement au lancement  grâce aux réglages de /etc/fstab
-Mon curl n'est pas prêt pour l'envoi des données sur le net, du coup le cas où l'accès au net est existant mais la clé USB absente n'est pas résolvable.

Au sujet de Curl plusieurs choix:
- soit poster les données en tant que commentaires sur un site qui m'appartient
- soit un truc style pastebin
- soit ce qui m'interesse le plus : création préalable d'un fichier XML , envoi pour remplacement par curl , lecture directe sur page web sans authentification ou quoi que ce soit ( ==>ajax)
[Et c'est là que par le pouvoir du crâne ancestral j'en appelle à toutes les forces qui pourraient m'aider...]
-soit tout faire mais pfiou...

Je compte rajouter l'envoi d'un mail  (pour ceux qui n'auraient fait que ça) mais mon but est de pouvoir lire directement les éléments de mon petit appareil en rentrant une URL à partir d'un smartphone.

Si vous avez des idées d'infos à rajouter -tant qu'à faire- à l'enregistrement des données( resultat traceroute? nslookup? météo? ) je suis preneur !

Personelement, j'avait un script déclenché par cron toutes les heures :

INTERFACE="eth0"
ID="RPI"
IP=$(ifconfig $INTERFACE | sed -n 's/.*inet.*adr:\([0-9.]*\).*/\1/p')
wget -O - "http://monsite.com/private/ip.php?id=$ID&ip=$IP&interface=$INTERFACE"

Ensuite sur le serveur, suffisait de capturer l'ip externe due a la conexion et de reprendre les aguments, j'avait laissé le script en l'état, mais maintenant je l'utilise avec un dyndns.


Installation simple : Windows Vista 1h48 - Ubuntu Maverick 0h27
Instalation complete: Windows Vista ... - Ubuntu Maverick 2h
Comme quoi, Il y en a qui choisissent trop vite mais pas pour le plus rapide ...
Actuelement : Ubuntu 12.04 (Unity)

Hors ligne

#7 Le 15/06/2013, à 09:02

fabkzo

Re : Recuperer IP Raspberry Pi en Bash

Ok, interessant
j'ai aussi vu un truc comme ça, en python:
http://www.siliciumcorp.com/developpeme … pberry-pi/

Donc ça te permet de toujours pouvoir joindre ton serveur malgré ton IP dynamique, mais toujours chez toi, avec des règles de routage spécifiques ?Quand l'IP change dois-tu la modifier à la main ou cela se fait-il automatiquement?
En tous cas je te remercie du tuyau et vais regarder tout ça de plus près.
Sinon mon cas est particulier dans la mesure où je veux pouvoir accéder au Pi en SSH depuis le réseau auquel je suis connecté avec un autre appareil ( par exemple au fablab) ; l'adresse ip publique peut me servir pour des infos de géolocalisation; mais je ne suis pas dans l'optique de laisser le raspberry branché H24 en mode serveur ==> Je veux  qu'il puisse faire remonter des infos sur un autre serveur.


pinterest ==> fabkzo!
Python beginner on Rpi
http://www.fabkzo.com

Hors ligne