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 :

Compléter un script qui ping une liste d'IP


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2014
    Messages : 39
    Points : 26
    Points
    26
    Par défaut Compléter un script qui ping une liste d'IP
    Bonjour,

    J'étais à la recherche d'une solution pour pinger une liste d'ip sur un réseau local.
    Je me suis orienté vers le javascript, à défaut d'avoir trouvé mieux, mais je débute dans ce langage.

    Le code suivant est opérationnel mais le fait que les pings soient envoyés tous en même temps peux poser des problèmes dans les réponses.
    J'aurais besoin d'y intégrer un setTimeout pour les requêtes ping soit envoyé une après l'autre :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    <script type='text/javascript'> 
    window.onload=function(){
    function ping(ip, callback) {
     
        if (!this.inUse) {
            this.status = 'unchecked';
            this.inUse = true;
            this.callback = callback;
            this.ip = ip;
            var _that = this;
            this.img = new Image();
            this.img.onload = function () {
                _that.inUse = false;
                _that.callback('Connection_OK');
     
            };
            this.img.onerror = function (e) {
                if (_that.inUse) {
                    _that.inUse = false;
                    _that.callback('Connection_OK', e);
                }
     
            };
            this.start = new Date().getTime();
            this.img.src = "http://" + ip;
            this.timer = setTimeout(function () {
                if (_that.inUse) {
                    _that.inUse = false;
                    _that.callback('Hors_ligne');
                }
            }, 1500);
        }
    }
    var PingModel = function (servers) {
        var self = this;
        var myServers = [];
        ko.utils.arrayForEach(servers, function (location) {
            myServers.push({
                name: location,
                status: ko.observable('unchecked')
            });
        });
        self.servers = ko.observableArray(myServers);
        ko.utils.arrayForEach(self.servers(), function (s) {
            s.status('checking');
            new ping(s.name, function (status, e) {
                s.status(status);
            });
        });
    };
    var komodel = new PingModel([
        'localhost',
        '10.252.0.28',
        '10.252.0.29',
        '10.252.0.38',
        '10.252.0.39',
        '10.252.0.41',
        '10.252.0.225', 
        '10.252.0.42',
        '10.252.0.44',
        '10.252.0.46',
        '10.252.0.49',
        '10.252.0.220',
        '10.252.0.50',
        '10.252.0.227',
        '10.252.0.33',
        '10.252.0.226',
        '10.252.0.48',
        '10.252.0.35',
        '10.252.0.223',
        '10.252.0.34',
        '10.252.0.47',
        '10.252.0.45',
        '10.252.0.43',
        '10.252.0.37',
        '10.252.0.224',
        '10.252.0.36',
        '10.252.0.51',
        '10.252.0.52',
        '10.201.140.1',	
        '10.201.140.2',
        '10.201.140.3',
        '10.201.166.1',
        '10.201.166.2',
        '10.201.166.4',
        '10.201.166.3',
        '10.201.166.5',
        '10.201.133.1',
        '10.201.133.50',
        '10.201.133.51'
     
        ]);
    ko.applyBindings(komodel);
    }//]]>  
     
    </script>
    Merci de votre aide.

  2. #2
    Membre confirmé
    Avatar de Darkaurora
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 382
    Points : 549
    Points
    549
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Je ne suis pas certain que les pings soient tous envoyés en même temps. L'action se produit ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        ko.utils.arrayForEach(self.servers(), function (s) {
            s.status('checking');
            new ping(s.name, function (status, e) {
                s.status(status);
            });
        });
    Les pings sont (pour moi) envoyés les uns à la suite des autres, mais tu appelles une classe qui contient une fonction callback. Je pense donc que le script va lancé la fonction autant de fois que tu as d'ip dans ton tableau avant même que tu ais commencé à recevoir des réponses t'informant de l'état des ip.

    Pour ma part le fonctionnement du code est tout a fait correct et logique, maintenant si tu souhaites effectivement ping + attendre la réponse avant prochain ping tu pourrais t'y prendre de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        var indice = 0;
        var MyFunction = function(i, myServer) {        
                var s = myServer[i];
                s.status('checking');
                new ping(s.name, function (status, e) {
                    s.status(status);
                    if(myServer.length>i) {
                        MyFunction(i++, myServer);
                    }
                });
        }
    De cette manière tu devrais passé à l'élément suivant dans ton tableau d'ip uniquement lorsque la réponse du ping est reçu ET traité.

    Je n'ai pas testé le code, de plus je n'ai pas compris ou est initialisé l'objet "ko", je ne garantis pas le succès mais je pense qu'il s'agit d'une bonne piste pour commencer.
    Je préfère fermer ma gueule et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet.

Discussions similaires

  1. Script qui effectue une commande sur chaque dossier de son listing
    Par nc13160 dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 24/07/2012, 17h21
  2. Script qui ouvre une page web et remplit le formulaire
    Par koKoTis dans le forum VBScript
    Réponses: 12
    Dernier message: 15/08/2006, 03h34
  3. Réponses: 2
    Dernier message: 03/05/2006, 01h12
  4. Un script qui fermerait une page avec chrono ?
    Par beegees dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 31/03/2006, 11h01
  5. methode qui retourne une liste d'objets du meme type
    Par anoukhan dans le forum Oracle
    Réponses: 8
    Dernier message: 12/01/2006, 19h38

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