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








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








ce que je sait c'est que un petit script shell comme ca
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 #!/bin/bash IP_PUBLIQUE=`wget -q -O - http://www.whatismyip.org` echo "Adresse IP publique : $IP_PUBLIQUE"
De ce fait , je veux trouver une solution solide qui me permet de recuperer mon adresse IP publique ou au moins ma gateway
http://checkip.dyndns.com/ ce serveur là ne risque pas de tomber.![]()








pour plus de securité, peut-etre il vaut mieux tester les deux, de ce fait je peux ptre faire :
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.#!/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"
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 :
if a.a.a.a<IP_pub<b.b.b.b then action 1
else action 2








Bon deja IP_2=`wget -q -O - http://checkip.dyndns.com/ ` ne fonctionne pas donc j'ai du changer le script comme ca :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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"
Salut,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $ IP_2=$(wget -q -O - http://checkip.dyndns.com | w3m -dump -T text/html) $ echo ${IP_2#*: }
comment ça?ça ne fonctione pasça marche très bien !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 wget -q -O - http://checkip.dyndns.com/ <html><head><title>Current IP Check</title></head><body>Current IP Address: </body></html>
pour ne récupérer que l'adresse, je suggères quand même :autre chose :
Code : Sélectionner tout - Visualiser dans une fenêtre à part w3m -dump http://checkip.dyndns.com | sed 's/.*: //'
pour comparer des adresses ip, il vaut mieux adapter inet_aton en shell :
Code : Sélectionner tout - Visualiser dans une fenêtre à part test -n "$IP_1" || exit
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
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








bon voila j'ai fait quelques changements comme suit :
bon voila pour le moment , je prend mon adresse IP publique, je vérifie, si elle est vide, je quitte le programme.#!/bin/bash
IP_1=`wget -q -O - http://www.whatismyip.org`
test -n "$IP_1" || exit
echo "$IP_1"
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é..
…
Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?
non, c'est une fonction shell définie plus haut, je te la recopie icij'arrive pas à installer inet_aton....c'est avec apt-get install inet c'est ca ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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]} )) }c'est ça.il doit normalement m'annoncer que c'est dans 'intervalle c'est ca ?








voila le fichier globale :
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?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
ah ? ça fonctionne bien pour moi.
ton script est exécutable ?
tu le lances ainsi?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 cd où_est_tonScript ./tonScript
j'ai la même erreur si je lance le script avec ash tonScript !








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
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...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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![]()








voila ce que j'ai fait,
je vais essayer ca et voir ce que ca donne .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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é)
Sinon si je veux n'accepter la connexion que s'il elle appartien a deux réseaux je peux bien faire ca non ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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é)
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 )) :c'est peut-être un peu imbriqué ici
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ) ))![]()








si je me trompe pas, quand je fait ca :
tant que mon adresse n'appartient pas à mon intervalle [adr_deb, adr_fin] , je redemarre mon modem.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
---> Si elle appartient à cet intervalle, je quitte le script
Tant que mon adresse n'appartient pas à [ip_deb,ip_fin] ou [ip_deb1,ip_fin1] je redemarre..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
--->Si je trv que l'IP appartient à l'intervalle, le modem ne redemarre pas non?
Partager