IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Connaitre son adresse IP Publique


Sujet :

Linux

  1. #1
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    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

  2. #2
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    ce que je sait c'est que un petit script shell comme ca
    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"
    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

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 587
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 470
    Points
    19 470
    Par défaut
    http://checkip.dyndns.com/ ce serveur là ne risque pas de tomber.

  4. #4
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    pour plus de securité, peut-etre il vaut mieux tester les deux, de ce fait je peux ptre faire :


    #!/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 :

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

    else action 2

  5. #5
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    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"

  6. #6
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Citation Envoyé par marouene_ Voir le message
    Bon deja IP_2=`wget -q -O - http://checkip.dyndns.com/ ` ne fonctionne pas
    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#*: }

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 587
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 470
    Points
    19 470
    Par défaut
    comment ça
    ça ne fonctione pas
    ?
    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>
    ça marche très bien !
    pour ne récupérer que l'adresse, je suggères quand même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    w3m -dump http://checkip.dyndns.com | sed 's/.*: //'
    autre chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test -n "$IP_1" || exit
    pour comparer des adresses ip, il vaut mieux adapter inet_aton en shell :
    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

  8. #8
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    bon voila j'ai fait quelques changements comme suit :

    #!/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é..

  9. #9
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 587
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 470
    Points
    19 470
    Par défaut
    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.

  10. #10
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    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 ?

  11. #11
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 587
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 470
    Points
    19 470
    Par défaut
    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 : 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]} ))
    }
    il doit normalement m'annoncer que c'est dans 'intervalle c'est ca ?
    c'est ça.

  12. #12
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    voila le fichier globale :
    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
    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?

  13. #13
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 587
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 470
    Points
    19 470
    Par défaut
    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 !

  14. #14
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    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 : 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
    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

  15. #15
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 587
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 470
    Points
    19 470
    Par défaut
    utilise une boucle until au lieu d'un if.

  16. #16
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    utilise une boucle until au lieu d'un if.
    voila ce que j'ai fait,

    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é)
    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 : 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é)

  17. #17
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 587
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 470
    Points
    19 470
    Par défaut
    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 : 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 ) ))
    c'est peut-être un peu imbriqué ici

  18. #18
    Membre éclairé
    Inscrit en
    Août 2010
    Messages
    416
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 416
    Points : 828
    Points
    828
    Par défaut
    si je me trompe pas, quand je fait ca :
    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
    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 : 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
    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?

  19. #19
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 587
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 470
    Points
    19 470
    Par défaut
    c'est ça.

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/05/2008, 07h31
  2. tomcat depuis son adresse ip publique
    Par yodark dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 17/03/2008, 21h31
  3. Connaitre son adresse IP sur internet
    Par dafdan dans le forum C++Builder
    Réponses: 4
    Dernier message: 25/01/2007, 21h12
  4. Connaitre son adresse ip publique
    Par samball dans le forum C++
    Réponses: 6
    Dernier message: 03/07/2006, 23h37
  5. connaitre son adresse IP
    Par Tex-Twil dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 14/01/2006, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo