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 Perl Discussion :

timeout en dessous d'une seconde


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 59
    Par défaut timeout en dessous d'une seconde
    Bonjour

    j'ai un petit problème de timeout. j'aimerais pourvoir le descendre en dessous de la seconde. En faite, j'ai un nom de pc et je veux connaitre son adresse IP, donc je fais un ping sur ce nom et j'obtiens son ip. Mais lorsque le nom de pc correspond a aucune IP, j'ai un timeout d'une seconde meme si je précise 0.01 seconde (1 seconde doit être par defaut).
    Et comme j'ai environ 350 PC, le scan dure environ la minute alors qu'il pourrait etre de 10 secondes grand max.

    Voici mon code

    use Net:: Ping;
    $host = "pc-80kc32j";
    $p = Net:: Ping->new("icmp");
    $p->hires();
    ($ret, $duration, $ip) = $p->ping($host,0.01);
    printf("$host [ip: $ip] is alive (packet return time: %.2f ms)\n", 1000 * $duration);
    $p->close();

    il y a un espace entre :: Ping car s'il tout est collé, j'ai un smilley

    Donc si quelqu'un sait comment diminuer le timeout en dessous de la seconde, merci de m'en faire part

  2. #2
    Membre Expert Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Par défaut
    Je ne sais pas si on peut diminuer le ping en dessous d'une seconde, mais ce que tu peux faire, c'est forker ton appli et lancer 1 thread par PC scanné ! ca évitera d'avoir à attendre le résultat d'une requête avant de commencer à scanner un 2°

    il y a un espace entre :: Ping car s'il tout est collé, j'ai un smilley
    C'est à ça que sert la balise code.
    Merci d'y penser la prochaine fois, parce que là c'est un code simple, mais quand c'est plus compliqé...


  3. #3
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 59
    Par défaut
    Je viens d'essayer mais en faite ça ralenti le processus. Perl doit mettre du temps a réserver de la mémoire pour qu'un thread soit lancer. Ce qui fait que c'est plus rapide en faisant un à un que 10 par 10, par exemple. Il faut seulement environ 2 ms pour résoudre un nom de pc en une IP lorsque tout va bien. Sur mes 350 pc, je dois avoir environ 50 nom de pc non résolu.
    Merci quand meme.

  4. #4
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Regarde la documentation de Net::Ping, il y a une méthode pour scanner plusieurs adresses en même temps sans forker (ni utiliser de threads).

    --
    Jedaï

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 59
    Par défaut
    Ok je regarderai ça lundi parce que c'est week end maintenant

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 59
    Par défaut
    Bonjour

    J'ai cherché dans la doc et je ne vois pas comment on peut scanner plusieurs adresses en même temps. Enfin j'ai trouvé un exemple de la doc permettant d'interroger plusieurs adresses mais elles sont scannées les une après les autres.
    Donc, si Jedai, tu pouvais me donner un peu plus de détail sur le scan simultané.

    Voici l'exemple de la doc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @host_array[0] = "pc-80kc32j";
    @host_array[1] = "PC-CNF508162";
    $p = Net::Ping->new("syn");
    $p->{port_num} = getservbyname("http", "tcp");
    foreach $host (@host_array) {
      $p->ping($host);
    }
    while (($host,$rtt,$ip) = $p->ack) {
      print "HOST: $host [$ip] ACKed in $rtt seconds.\n";
    }
    Merci

  7. #7
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par jean tof
    Bonjour

    J'ai cherché dans la doc et je ne vois pas comment on peut scanner plusieurs adresses en même temps. Enfin j'ai trouvé un exemple de la doc permettant d'interroger plusieurs adresses mais elles sont scannées les une après les autres.
    Donc, si Jedai, tu pouvais me donner un peu plus de détail sur le scan simultané.

    Voici l'exemple de la doc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @host_array[0] = "pc-80kc32j";
    @host_array[1] = "PC-CNF508162";
    $p = Net::Ping->new("syn");
    $p->{port_num} = getservbyname("http", "tcp");
    foreach $host (@host_array) {
      $p->ping($host);
    }
    while (($host,$rtt,$ip) = $p->ack) {
      print "HOST: $host [$ip] ACKed in $rtt seconds.\n";
    }
    Merci
    Regarde attentivement cet exemple : on ne regarde pas le résultat de ping(), tous les ping sont fait à la suite sans attendre la réponse. On attend la réponse dans la boucle while() avec la méthode ack(), mais les réponses n'arrivent pas forcément dans l'ordre où l'on a envoyé les ping().
    En pratique tous les ping() sont attendus en parallèle.

    --
    Jedaï

  8. #8
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par jean tof
    Bonjour

    j'ai un petit problème de timeout. j'aimerais pourvoir le descendre en dessous de la seconde. En faite, j'ai un nom de pc et je veux connaitre son adresse IP, donc je fais un ping sur ce nom et j'obtiens son ip. Mais lorsque le nom de pc correspond a aucune IP, j'ai un timeout d'une seconde meme si je précise 0.01 seconde (1 seconde doit être par defaut).
    Et comme j'ai environ 350 PC, le scan dure environ la minute alors qu'il pourrait etre de 10 secondes grand max.

    Voici mon code

    use Net:: Ping;
    $host = "pc-80kc32j";
    $p = Net:: Ping->new("icmp");
    $p->hires();
    ($ret, $duration, $ip) = $p->ping($host,0.01);
    printf("$host [ip: $ip] is alive (packet return time: %.2f ms)\n", 1000 * $duration);
    $p->close();

    il y a un espace entre :: Ping car s'il tout est collé, j'ai un smilley

    Donc si quelqu'un sait comment diminuer le timeout en dessous de la seconde, merci de m'en faire part
    Si tu fais un ping seulement pour obtenir l'ip correspondante, tu ferais mieux d'utiliser gethostbyname() ...

    --
    Jedaï

Discussions similaires

  1. Séléction des options dans une seconde liste
    Par vautour29 dans le forum Access
    Réponses: 1
    Dernier message: 04/07/2006, 16h18
  2. [VB6]passer un textbox en dessous d'une ligne
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/05/2006, 15h45
  3. Windows98 première édition pour une seconde édition....
    Par Angeldu74 dans le forum Windows 2000/Me/98/95
    Réponses: 2
    Dernier message: 09/02/2006, 11h08
  4. Ouvrir une seconde fiche "dialog"
    Par firejocker dans le forum MFC
    Réponses: 8
    Dernier message: 16/11/2005, 22h33
  5. Réponses: 3
    Dernier message: 08/08/2005, 02h40

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