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

Langage PHP Discussion :

Méthode pour réaliser un ping


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 48
    Points : 21
    Points
    21
    Par défaut Méthode pour réaliser un ping
    Salutations !

    Je suis confronté à un problème plutôt banal mais je n'arrive pas à m'en débarasser pour autant !

    Avant d'étoffer mon script, je voudrais réaliser un "ping" sur un de mes switch et récupérer la réponse sur une page (testping.php)

    J'ai pour cela utilisé la fonction exec mais le problème c'est qu'au retour, tous les accents et certains espaces sont remplacés par des ',' ou des ? dans des losanges noirs.

    J'ai essayé l'encodage utf-8 mais cela n'a rien changé !

    J'ai ensuite tenté un str_replace pour virer tous ces symboles indésirables mais je ne connais pas leur "désignation".

    Ma question est donc : existe-t-il un moyen de corriger ce problème, ou dois-je impérativement passer par la fonction fsockopen pour réaliser mon ping ?

    Merci de votre aide !

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    sous quel OS ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 48
    Points : 21
    Points
    21
    Par défaut
    désolé de ne pas l'avoir précisé : Windows XP !

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    fait un iconv de windows-1252 vers utf8

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 48
    Points : 21
    Points
    21
    Par défaut
    Je ne suis pas sûr d'avoir tout compris mais j'essaierai cela demain (je dois quitter le bureau !)

    Merci de la réponse et à demain !

    bonne soirée

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Perso j'avais plus ou moins résolu le problème à l'aide la fonction dans ce commentaire : http://www.php.net/manual/fr/functio...exec.php#79272

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo fix_string(`ping 192.168.1.1`);
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 48
    Points : 21
    Points
    21
    Par défaut
    j'ai essayé avec ta méthode stealth35 mais cela n'a pas fonctionné malheureusement

    @grunk : merci de la réponse je teste ça !

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 48
    Points : 21
    Points
    21
    Par défaut
    Petite question tout de même, la chaîne $str proposée dans cette fonction est la chaîne qui comporte les "," et autres symboles à la place des accents ?

    Mon script a un objectif unique : vérifier la présence d'un switch sur le réseau, même pas besoin d'affichage en fait !

    Je pourrais éventuellement réaliser le ping et utiliser la fonction qui permet de détecter une chaine de caractères (et ainsi déterminer le cas ou le switch a répondu, ou pas), mais c'est pas très propre comme méthode !

    Je pense m'orienter vers fsockopen() mais je suis ouvert a toute proposition :]

    Merci du coup de main !

    EDIT : Même si c'est une méthode peu propre comem je le disais, avec strstr() je peux chercher le mot perte et vérifier le pourcentage (après avoir lancé une requête ping), mais je suis assez réticent à cette pratique !

    J'ai essayé la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $fp = fsockopen("192.168.1.1", 80, $errno, $errstr, 5) //si je ne me trompe pas, il n'y a aucun porte spécifique pour un ping...
    le soucis c'est que je ne sais pas ou j'en suis. fsockopen retourne un pointeur, moi je voudrais simplement savoir si la connection a été établie, ou pas. Quelqu'un aurait une idée pour réaliser ce test ?

    Merci!

  9. #9
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    //si je ne me trompe pas, il n'y a aucun porte spécifique pour un ping
    Le ping c'est le protocole ICMP , les ports c'est uniquement sur TCP ou UDP.

    Ouvrir une socket sur le switch peut être une solution. Dans ton cas tu interroge le port 80 donc sa suppose que ton switch est une interface web (peux probable ).
    Si il répond fsockopen te retourne un pointeur (donc le switch est joignable) ou false si il n'est pas joignable (sur ce port spécifique)
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 48
    Points : 21
    Points
    21
    Par défaut
    C'est bien ce que j'avais lu pour le ping, c'est pour ça que j'ai mis ce commentaire, je ne savais pas quel port il était pertinent de spécifier étant donné qu'il n'a pas d'intérêt dans l'utilisation que je fais de la fonction.

    Quel port tester avec cette fonction dans ce cas la ?

    Je dois être chanceux alors car le script suivant fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?phpfunction ping($host, $port, $timeout)
    {//cette fonction est déclarée dans un fichier fonctions.php à part
    $fp = fsockopen($host, $port, $timeout);
    if(!fp) {return "DOWN";}
    RETURN "OK";
    }?>
    Sur ma page "testping.php", j'effectue les commandes suivantes :

    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
    <?php
    include("fonctions.php");
    connexionsql(); //connection à ma BDD
     
    $sql = 'SELECT IP_Switch FROM switch';
    $req = mysql_query/*blablabla etc...*/;
     
    while($host = mysql_fetch_array($req))
    {
    $port = 80; //c'est ici que je suis chanceux ?!
    $timeout = 3;//je ne suis pas patient è_é
     
    $test = ping($host[0], $port, $timeout);
     
    //je teste si c'est DOWN ou OK
     
    if($test == "OK")
    {
    echo $host[0].'-> ping r&eacute;ssi !<br/>';
    }
    else {
    $host[0].'-> ping &eacute;chou&eacute; !<br/>';
    }
    }
    ?>
    cela fonctionne, mais quel port devrais-je mentionner pour éviter le 80 ?

    NOTE : Mes switchs sont : 2 Cisco Catalyst 2900XL, 1 Catalyst 2950XL, Des Procurve 2610...

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    pour iconv fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo iconv('CP850', 'UTF-8', `ping www.developpez.net`);

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 48
    Points : 21
    Points
    21
    Par défaut
    @stealth35 : Je peux l'effectuer et si cela a fonctionné le mentionner sur ce sujet mais je me suis définitivement orienté vers une autre solution étant donné que je n'ai pas besoin d'afficher le résultat d'un requête ping. Je veux simplement savoir si le switch est sur le réseau ou pas.

    merci tout de même

  13. #13
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    pour iconv fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo iconv('CP850', 'UTF-8', `ping www.developpez.net`);
    Bien vu pour le CP850 ça marche

    Pour tes switchs faut voir avec ton admin réseau mais c'est pas évident qu'il y'est quelconque port sur lequel tu puisse l'interroger.

    En revanche tu devrais pouvoir interroger une machine relié à ce switch sur un port tcp/udp. Si la machine te répond le switch est en route sinon ce n'est pas le cas.
    C'est valable uniquement sur un réseau simple sans route alternative évidemment.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Membre éclairé
    Inscrit en
    Mai 2010
    Messages
    299
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 299
    Points : 879
    Points
    879
    Par défaut
    Ces switchs ne sont pas interrogeable en SNMP ? de mémoire c'est le protocole pour ce genre de chose (sous couvert que tu puisses et l'équipement aussi)
    "«Les petites filles sont des punks»."

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 48
    Points : 21
    Points
    21
    Par défaut
    Pour le moment ces switchs sont tous reliés à un seul et même ordinateur (sur lequel je développe) et répondent tous sur le port 80. Chance ? je l'ignore.

    Du coup je ne sais pas trop quel port utiliser pour éviter de prendre ce risque !

    Ceci-dit, mon script php fonctionne très bien : Je récupère les IP de mes switchs dans ma BDD dans un tableau que je parcoure et je sauvegarde les fichiers de configuration de tous les switchs qui ont répondu à mon "pseudo-ping".

    Reste donc à savoir quels ports peuvent-être utilisés de manière "générique" pour ce genre de test sur un switch

  16. #16
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 48
    Points : 21
    Points
    21
    Par défaut
    Ces switchs sont probablement manageables en SNMP, personnellement je les configure via un script Perl que j'ai programmé (qui en fait exécute une connexion telnet pour le management)

    Mais ou voulais-tu en venir pour le SNMP ?

  17. #17
    Membre éclairé
    Inscrit en
    Mai 2010
    Messages
    299
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 299
    Points : 879
    Points
    879
    Par défaut
    Ben juste qu'il doit y avoir moyen de savoir leur état de fonctionnement en les interrogeant en SNMP.

    Mais bon si ton "ping" marche, c'est l'essentiel.
    "«Les petites filles sont des punks»."

Discussions similaires

  1. [MVVM] Bonne méthode pour réaliser de l'héritage/template
    Par uluquiorra dans le forum Windows Presentation Foundation
    Réponses: 10
    Dernier message: 07/02/2013, 15h23
  2. Recherche composant ou méthode pour réaliser un plan dynamique
    Par kineton dans le forum Développement Windows
    Réponses: 0
    Dernier message: 14/10/2010, 10h14
  3. Réponses: 7
    Dernier message: 30/07/2009, 16h10
  4. Méthode pour réaliser ce type d'effet
    Par socket77 dans le forum Flash
    Réponses: 3
    Dernier message: 30/04/2008, 17h28
  5. Fonction/méthode pour obtenir l'IP de la machine
    Par sirex007 dans le forum Web & réseau
    Réponses: 3
    Dernier message: 10/04/2003, 14h36

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