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

JavaScript Discussion :

Obtenir l'adresse IP du serveur local


Sujet :

JavaScript

  1. #1
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut Obtenir l'adresse IP du serveur local
    Bonjour,

    Je suis débutant, et je dois gérer un petit site web sur un système informatique en local. Ce système n'a pas accès à internet.
    Je cherche à modifier son adresse local à partir d'un script PHP. Je ne sais pas si c'est la bonne idée.

    Pour cela j'ai besoin d'abord d'obtenir son adresse IP.
    J'ai crée un script PHP qui fourni l'adresse ip du serveur:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
       $localIP = gethostbyaddr($_SERVER['REMOTE_ADDR']);
       echo '<pre>';print_r($localIP);echo '</pre>';
       return $localIP;
    ?>

    J'aimerai utiliser ce script dans une fonction javascript de ma page web pour l'afficher sur un élément text

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function Defaultsettings(){
        document.getElementById('alertPresence').value = getIP();
    }
    function getIP(){
        ????
    }
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <body>
    <label for="AddrIP">Adresse IP :</label><br />
    <input id="AddrIP" name="AddrIP" type="text" placeholder="127.0.0.1" required autofocus required pattern="((([0-2][0-5]{2})|([0-1][0-9]{2})|([0-9]{1,2}))\.){3}(([0-2][0-5]{2})|([0-1][0-9]{2})|([0-9]{1,2}))" >
    </body>

    Comment fait on appel à un script php dans une fonction javascript ?

    Je vous remercie pour votre aide.
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

  2. #2
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Citation Envoyé par Masmeta Voir le message
    Aux persévérants aucune route n'est interdite
    Excellente devise

    Citation Envoyé par Masmeta Voir le message
    je dois gérer un petit site web […] Je cherche à modifier son adresse local à partir d'un script PHP. Je ne sais pas si c'est la bonne idée.
    Peux-tu préciser ce que tu entends par « modifier son adresse » ? Et pourquoi tu penses avoir besoin de le faire ?
    Sache qu'un serveur local est toujours accessible à l'adresse 127.0.0.1 même si un alias comme localhost est souvent utilisé.

    Comment fait on appel à un script php dans une fonction javascript ?
    Eh bien tu peux :
    • soit simplement provoquer l'ouverture de la page dans ton navigateur, par exemple avec window.open
    • soit utiliser Ajax.

    Dans les deux cas il faut de toutes façons que la page de départ ait été ouverte dans ton navigateur avec le protocole http: – avec file: ça ne marchera pas par mesure de sécurité. Tu dois donc passer par ton serveur local dès le départ, et donc connaître son adresse… C'est le serpent qui se mord la queue. Heureusement, comme je l'ai dit, tu es sûr que ça marche en passant par 127.0.0.1.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut
    Bonjour

    Merci de ta réponse.
    Le système embarqué doit s'intégré dans un réseau interne. L'installateur configure le système embarqué grâce à son poste.
    L'intégrateur a travers son navigateur , va se connecter au système suivant une adresse ip de défaut du type 192.168.0.10. Pour le mettre dans son réseau interne, il va changer son adresse ip 192.168.10.5, par exemple.
    le système embarqué utilise un serveur web lighttpd pour cela.

    Je n'ai pas bien compris le principe :
    du soit simplement provoquer l'ouverture de la page dans ton navigateur, par exemple avec window.open()
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

  4. #4
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    D'accord, c'est de l'embarqué, autant pour moi.

    Alors si j'ai bien tout compris, au début, l'utilisateur commence par accéder à 192.168.0.10 avec son navigateur c'est bien cela ?
    Et donc il reçoit une page servie par lighttpd. C'est cette page web dont tu as donné le code. J'ai toujours bon ?

    Je m'explique sur l'histoire du window.open :
    mettons que ton script PHP qui permet de connaître l'IP s'appelle getip.php. Dans ta page web tu places un lien :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="#" onclick="window.open('getip.php'); return false">get IP</a>
    En fait tu peux même faire un lien « normal » :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="getip.php" target="_blank">get IP</a>
    Je n'ai pas pensé à ça hier, c'est pourtant le plus simple.

    Je remarque un truc : gethostbyaddr ne va pas te permettre d'obtenir une IP. Cett fonction est faite pour trouver les noms de domaine. En fait, $_SERVER['REMOTE_ADDR'] suffit.
    Comme ton système n'est pas relié à Internet, si tu utilises gethostbyaddr sur les adresses du réseau local de type 192.168.x.x qui, a priori, n'ont pas de nom associé, ton script PHP va tenter d'interroger le serveur DNS le plus proche, et va mettre un certain temps avant de se rendre compte qu'il n'y a pas de connection. Ça va provoquer des temps de réponse exaspérants.

    Tu constateras vite que la solution window.open ou simple lien n'est pas des plus pratiques : ouvrir une nouvelle fenêtre pour afficher juste une IP, c'est bourrin. Le mieux ce serait de passer par Ajax.

    Je vais simplifier un peu ton code PHP. En Ajax, le format le plus simple est souvent le texte brut : pas besoin de <pre>.

    getip.php :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    header('Content-Type: text/plain');
    echo $_SERVER['REMOTE_ADDR'];
    ?>

    En JavaScript :
    Code JS : 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
    31
    32
    33
    34
    function getIP() {
      var req = new XMLHttpRequest(); // instancie une requête Ajax
     
      req.onreadystatechange = function() { // surveille la progression de la requête
        if (req.readyState < 4) return; // 4 = requête terminée
        if (req.status !== 200) {
          // code d'erreur HTTP : on signale l'erreur à l'utilisateur
          ajaxError(req.status, req.statusText);
        } else {
          // code HTTP 200, tout va bien, on a reçu l'IP
          document.getElementById('AddrIP').value = req.responseText;
        }
      };
     
      // prépare et lance la requête
      req.open('get', 'getip.php');
      req.send();
    }
     
    function ajaxError(code, text) {
      /* exemples : code = 404, text = 'Not Found'
                    code = 500, text = 'Internal Server Error'
        
      Ici il s'agit de signaler un problème à l'utilisateur, pas au développeur.
      Il ne faut donc pas des informations de débogage mais une explication sur
      les causes possibles de l'erreur et comment y remédier si c'est faisable.
      
      Par exemple, 404 => peut-être que le serveur n'a pas été démarré,
                          ou un câble est débranché
                   500 => le système est trop occupé, réessayez plus tard
      */
     
      ...
    }

    Avec l'habitude tu verras que c'est la gestion des erreurs qui demande le plus de temps et de réflexion. Car les erreurs Ajax ne te concernent pas toi, développeur (hors phase initiale de débogage), mais concernent bel et bien l'utilisateur ! Il faut lui indiquer précisément ce qui se passe et comment il peut résoudre le problème. Signaler une erreur à l'utilisateur est une tâche délicate, et très souvent elle n'est pas faite correctement. Y compris sur des sites très populaires…

    Question : est-ce que tu sais déjà comment changer l'adresse IP du système ? Je ne suis pas sûr qu'on puisse le faire avec PHP. Il faudra sans doute faire un appel externe du genre exec.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  5. #5
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut
    Bonjour,
    Alors si j'ai bien tout compris, au début, l'utilisateur commence par accéder à 192.168.0.10 avec son navigateur c'est bien cela ?
    Oui c'est cela.

    Et donc il reçoit une page servie par lighttpd. C'est cette page web dont tu as donné le code. J'ai toujours bon ?
    La première page doit être une page de login, qui si le login est ok, pointe sur la page où doit se trouver la configuration du système.

    J'ai pris la solution suivant AJAX. Cela correspond au fonctionnement voulu. Je te remercie pour ton aide.

    Pour la fonction function ajaxError(code, text)
    Il faut partir sur le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function ajaxError(code, text) {
      /* exemples : code = 404, text = 'Not Found'
                    code = 500, text = 'Internal Server Error'
      [....] 
      */
      if (code == 404)
    	document.getElementById('AddrIP').value = "Not found";

    est-ce que tu sais déjà comment changer l'adresse IP du système ? Je ne suis pas sûr qu'on puisse le faire avec PHP. Il faudra sans doute faire un appel externe du genre exec.
    Pour cela je pensais partir sur un script php appeler par un bouton de type 'submit'. Le script serait le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    $cmd = sprintf('ifconfig eth0 %s',$addrIP);
    $output = shell_exec($cmd);
    ?>
    Cela m'oblige à mettre mon serveur web en root. C'est une solution qui ne me plait pas trop. Cependant je ne vois pas comment faire autrement.
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

  6. #6
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Citation Envoyé par Masmeta Voir le message
    Cela m'oblige à mettre mon serveur web en root. C'est une solution qui ne me plait pas trop.
    Évidemment.

    Cependant je ne vois pas comment faire autrement.
    Je ne sais pas exactement quel est ton système mais je devine qu'il est de type UNIX. Tu pourrais utiliser une commande du genre su avec un compte ayant les droits suffisants. Dans l'idéal tu crées un compte qui représente ton serveur et tu lui donnes uniquement les droits dont il a besoin.
    Je ne suis pas tout à fait à l'aise avec les scripts shell et je sais que certaines variantes de su demandent le mot de passe de façon interactive, donc je ne sais pas si la chose est faisable, du moins d'une manière qui ne soit pas déraisonnablement compliquée – en cherchant un peu je suis tombé sur expect mais c'est le genre de chose qui me parait déraisonnablement compliquée.
    Dans tous les cas, ton serveur aura besoin du mot de passe du compte, stocke-le de préférence dans un fichier qui ne se trouve pas dans la partie www/. Et si tu utilises un gestionnaire de version (SVN, Git), pense à mettre le fichier du mot de passe dans la liste « ignore »
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Obtenir l'adresse IP du poste local
    Par Demco dans le forum ANT
    Réponses: 1
    Dernier message: 02/08/2011, 11h20
  2. Obtenir une adresse d'un serveur DHCP
    Par Dragna_x dans le forum Debian
    Réponses: 6
    Dernier message: 11/04/2011, 14h52
  3. Réponses: 3
    Dernier message: 30/10/2008, 14h30
  4. Réponses: 3
    Dernier message: 09/08/2007, 13h23
  5. Obtenir l'adresse locale
    Par persia dans le forum Langage
    Réponses: 4
    Dernier message: 05/04/2007, 17h37

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