Précédent   Forum des professionnels en informatique > Systèmes > Linux
Linux Forum d'entraide sur le système Linux. Avant de poster -> Tutoriels Linux, F.A.Q Linux
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/11/2011, 11h11   #1
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
Par défaut Connaitre son adresse IP Publique

Bonjour,

j'aimerai savoir s'il y'a une commande linux qui permet de connaitre son adresse IP Publique (evidemment une commande ).

Je sait que ifconfig te donne l'adresse en LAN, mais pas en WAN.

Merci
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 11h22   #2
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
ce que je sait c'est que un petit script shell comme ca
Code :
1
2
3
4
 
#!/bin/bash
IP_PUBLIQUE=`wget -q -O - http://www.whatismyip.org`
echo "Adresse IP publique : $IP_PUBLIQUE"
pourra donner l'adresse publique utiliser, mais c'est pas du solide, car le jour ou le site www.whatismyip.org ne sera pas accessible, mon prg ne fonctionnera plus.

De ce fait , je veux trouver une solution solide qui me permet de recuperer mon adresse IP publique ou au moins ma gateway
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 11h29   #3
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
http://checkip.dyndns.com/ ce serveur là ne risque pas de tomber.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 11h54   #4
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
pour plus de securité, peut-etre il vaut mieux tester les deux, de ce fait je peux ptre faire :


Citation:
#!/bin/bash
IP_1=`wget -q -O - http://www.whatismyip.org`
IP_2=`wget -q -O - http://checkip.dyndns.com/ `

if IP_1 ='' then IP_pub=IP_2

echo "Adresse IP publique : $IP_pub"
je ne suis pas trés fort en script shell, mais peut-etre ca vérifie si il y'a un résultat retourné ou non.


Sinon qui a une idée comment comparer en shell cette adresse si elle se trouve dans une plage d'IP bien précise genre :

Citation:
if a.a.a.a<IP_pub<b.b.b.b then action 1

else action 2
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 12h04   #5
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
Bon deja IP_2=`wget -q -O - http://checkip.dyndns.com/ ` ne fonctionne pas donc j'ai du changer le script comme ca :

Code :
1
2
3
4
5
6
7
8
9
 
#!/bin/bash
IP_1=`wget -q -O - http://www.whatismyip.org`
if [ "$IP_1" == "" ]
then
exit
fi
 
echo "$IP_1"
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 12h11   #6
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Citation:
Envoyé par marouene_ Voir le message
Bon deja IP_2=`wget -q -O - http://checkip.dyndns.com/ ` ne fonctionne pas
Code :
1
2
3
$ IP_2=$(wget -q -O - http://checkip.dyndns.com | w3m -dump -T text/html)
 
$ echo ${IP_2#*: }
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 12h31   #7
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
comment ça
Citation:
ça ne fonctione pas
?
Code :
1
2
wget -q -O - http://checkip.dyndns.com/ 
<html><head><title>Current IP Check</title></head><body>Current IP Address: </body></html>
ça marche très bien !
pour ne récupérer que l'adresse, je suggères quand même :
Code :
w3m -dump http://checkip.dyndns.com | sed 's/.*: //'
autre chose :
Code :
test -n "$IP_1" || exit
pour comparer des adresses ip, il vaut mieux adapter inet_aton en shell :
Code bash :
1
2
3
4
5
6
7
8
inet_aton() {
#on peut mettre un test sur le format de l'argument passé à la fonction
   IFS='.' read -a ip <<<"$1"
   echo $(( (${ip[0]}*256**3) + (${ip[1]}*256**2) + (${ip[2]}*256) + ${ip[3]} ))
}
 
inet_aton 123.456.789.123
2093684091
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/11/2011, 15h41   #8
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
bon voila j'ai fait quelques changements comme suit :

Citation:
#!/bin/bash
IP_1=`wget -q -O - http://www.whatismyip.org`

test -n "$IP_1" || exit

echo "$IP_1"
bon voila pour le moment , je prend mon adresse IP publique, je vérifie, si elle est vide, je quitte le programme.

Sauf que la j'ai pas trés compris la commande inet-aton(), malgrès les recherches que j'ai fait..

Enfet ce que je veux faire c'est vérifier si mon adresse IP appartient à un sous réseau bien déterminé..
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 15h56   #9
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
Code BASH :
1
2
3
4
5
6
7
adr_deb=95.108.1.1
adr_fin=95.108.1.255
adr_pub=95.108.1.125
if (( $(inet_aton $adr_deb) < $(inet_aton $adr_pub) &&  $(inet_aton $adr_pub) < $(inet_aton $adr_fin) ))
then echo "$adr_pub dans le ss-réseau"
else echo "$adr_pub pas dans le ss-réseau"
fi

?
ça dira si l'adr_pub est dans l'intervalle, pas vraiment si elle appartient à un sous-réseau.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 16h51   #10
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
Citation:
Envoyé par N_BaH Voir le message
Code BASH :
1
2
3
4
5
6
7
adr_deb=95.108.1.1
adr_fin=95.108.1.255
adr_pub=95.108.1.125
if (( $(inet_aton $adr_deb) < $(inet_aton $adr_pub) &&  $(inet_aton $adr_pub) < $(inet_aton $adr_fin) ))
then echo "$adr_pub dans le ss-réseau"
else echo "$adr_pub pas dans le ss-réseau"
fi

?
ça dira si l'adr_pub est dans l'intervalle, pas vraiment si elle appartient à un sous-réseau.
je suis entrain de tester ca, j'arrive pas à installer inet_aton....c'est avec apt-get install inet c'est ca ?

Sinon, la comparaison se fait sur tous les octets, c'est à dire si

adr_deb=95.107.1.125
adr_fin=95.110.1.255

adr_pub=95.108.55.21

il doit normalement m'annoncer que c'est dans 'intervalle c'est ca ?
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 17h01   #11
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
Citation:
j'arrive pas à installer inet_aton....c'est avec apt-get install inet c'est ca ?
non, c'est une fonction shell définie plus haut, je te la recopie ici
Code :
1
2
3
4
5
inet_aton() {
#on peut mettre un test sur le format de l'argument passé à la fonction
   IFS='.' read -a ip <<<"$1"
   echo $(( (${ip[0]}*256**3) + (${ip[1]}*256**2) + (${ip[2]}*256) + ${ip[3]} ))
}
Citation:
il doit normalement m'annoncer que c'est dans 'intervalle c'est ca ?
c'est ça.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 17h20   #12
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
voila le fichier globale :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
#!/bin/bash
 
 
inet_aton() {
#on peut mettre un test sur le format de l'argument passé à la fonction
   IFS='.' read -a ip <<<"$1"
   echo $(( (${ip[0]}*256**3) + (${ip[1]}*256**2) + (${ip[2]}*256) + ${ip[3]} ))
}
 
 
IP_1=`wget -q -O - http://www.whatismyip.org`
 
test -n "$IP_1" || exit
 
echo "$IP_1"
 
adr_deb=95.66.1.1
adr_fin=95.77.255.255
 
if (( $(inet_aton $adr_deb) < $(inet_aton $IP_1) &&  $(inet_aton $IP_1) < $(inet_aton $adr_fin) ))
then echo "$IP_1 in network"
else echo "$IP_1 not in  network"
fi
bon a prioris ca fonctionne, mais je veux savoir, meme si la difference se résidue au niveau de plusieurs octects, (comme le cas ici) on nous annonce qu'il appartient au réseau?
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 17h30   #13
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
ah ? ça fonctionne bien pour moi.

ton script est exécutable ?
tu le lances ainsi
Code :
1
2
cd où_est_tonScript
./tonScript
?

j'ai la même erreur si je lance le script avec ash tonScript !
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 17h49   #14
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
enfet je le lancais avec un sh et non avec un ./ apparamment c'est pour ca qu'il n'a pas fonctionné.

Bon jusqu'a la tout va bien : ) merci beaucoup...

juste je veux te demander un truc, ..:

Mon prb est le suivant, j'ai un modem qui peut se connecter sur deux gateway, donc moi je veux le forcer à se connceter sur une gw bien précise..

Jusqu'a la mon script me permet de détecter mon IP publique et puis de savoir sur qu'elle gw je suis connecté...

ce que j'envisage de faire c'est de lancer mon script qui detecte l'adresse IP, puis si elle n'est pas dans ma plage annoncé, je redemarre mon modem automatiquement jusqu'a ce qu'il soit dans mon réseau ...ca donne ca

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
 
#!/bin/bash
 
 
inet_aton() {
#on peut mettre un test sur le format de l'argument passé à la fonction
   IFS='.' read -a ip <<<"$1"
   echo $(( (${ip[0]}*256**3) + (${ip[1]}*256**2) + (${ip[2]}*256) + ${ip[3]} ))
}
 
 
IP_1=`wget -q -O - http://www.whatismyip.org`
 
test -n "$IP_1" || exit
 
echo "$IP_1"
 
adr_deb=95.66.1.1
adr_fin=95.77.255.255
 
if (( $(inet_aton $adr_deb) < $(inet_aton $IP_1) &&  $(inet_aton $IP_1) < $(inet_aton $adr_fin) ))
then echo "$IP_1 in network"
else reboot.jar
fi
sachant que reboot.jar est un petit prg que j'ai crée et qui me premet de telnet mon modem puis de le redemarrer...

j'aimerai savoir comment faire pour que mon je ne quitte le script que si je suis dans le network desiré..

ché pas si c'est claire
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 18h04   #15
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
utilise une boucle until au lieu d'un if.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/11/2011, 20h48   #16
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
Citation:
Envoyé par N_BaH Voir le message
utilise une boucle until au lieu d'un if.
voila ce que j'ai fait,

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
 
#!/bin/bash
 
 
inet_aton() {
#on peut mettre un test sur le format de l'argument passé à la fonction
   IFS='.' read -a ip <<<"$1"
   echo $(( (${ip[0]}*256**3) + (${ip[1]}*256**2) + (${ip[2]}*256) + ${ip[3]} ))
}
 
 
IP_1=`wget -q -O - http://www.whatismyip.org`
 
test -n "$IP_1" || exit
 
echo "$IP_1"
 
adr_deb=95.66.1.1
adr_fin=95.77.255.255
 
until (( $(inet_aton $adr_deb) < $(inet_aton $IP_1) &&  $(inet_aton $IP_1) < $(inet_aton $adr_fin) ))
do 
reboot.jar
 
sleep 15 (pour attendre que le modem redemarre)
 
done
 
echo "$IP_1 in network" (pour vérifier qu'elle est bien dans network désiré)
je vais essayer ca et voir ce que ca donne .

Sinon si je veux n'accepter la connexion que s'il elle appartien a deux réseaux je peux bien faire ca non ?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
adr_deb=95.66.1.1
adr_fin=95.77.255.255
 
adr_deb1=95.98.1.1
adr_fin1=95.99.255.255
 
 
until (( $(inet_aton $adr_deb) < $(inet_aton $IP_1) &&  $(inet_aton $IP_1) < $(inet_aton $adr_fin) )  || ( $(inet_aton $adr_deb1) < $(inet_aton $IP_1) &&  $(inet_aton $IP_1) < $(inet_aton $adr_fin1) ) )
do 
reboot.jar
 
sleep 15 (pour attendre que le modem redemarre)
 
done
 
echo "$IP_1 in network" (pour vérifier qu'elle est bien dans network désiré)
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 21h16   #17
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
là, ça redémarrera le modem si l'adresse publique appartient à l'un ou (||) à l'autre.
donc, ta phrase est fausse, mais le code paraît correct, mais vérifie les parenthèses !

on pourrait aussi utiliser l'opérateur ternaire (( expr ? expr_if_true : expr_if_false )) :
Code :
1
2
(( ( $(inet_aton $adr_deb) < $(inet_aton $IP_1) && $(inet_aton $IP_1) < $(inet_aton $adr_fin) ) ? 1 : \
   ( ( $(inet_aton $adr_deb1) < $(inet_aton $IP_1) && $(inet_aton $IP_1) < $(inet_aton $adr_fin1) ) ? 1 : 0 ) ))
c'est peut-être un peu imbriqué ici
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 21h54   #18
Membre chevronné
 
Inscription : août 2010
Messages : 416
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 416
Points : 732
Points : 732
si je me trompe pas, quand je fait ca :
Code :
1
2
3
4
5
6
7
8
 
until (( $(inet_aton $adr_deb) < $(inet_aton $IP_1) &&  $(inet_aton $IP_1) < $(inet_aton $adr_fin) ))
do 
reboot.jar
 
sleep 15 (pour attendre que le modem redemarre)
 
done
tant que mon adresse n'appartient pas à mon intervalle [adr_deb, adr_fin] , je redemarre mon modem.

---> Si elle appartient à cet intervalle, je quitte le script

Code :
1
2
3
4
5
6
7
8
 
until (( $(inet_aton $adr_deb) < $(inet_aton $IP_1) &&  $(inet_aton $IP_1) < $(inet_aton $adr_fin) )  || ( $(inet_aton $adr_deb1) < $(inet_aton $IP_1) &&  $(inet_aton $IP_1) < $(inet_aton $adr_fin1) ) )
do 
reboot.jar
 
sleep 15 (pour attendre que le modem redemarre)
 
done
Tant que mon adresse n'appartient pas à [ip_deb,ip_fin] ou [ip_deb1,ip_fin1] je redemarre..

--->Si je trv que l'IP appartient à l'intervalle, le modem ne redemarre pas non?
marouene_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 22h47   #19
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
c'est ça.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h35.


 
 
 
 
Partenaires

Hébergement Web