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

Lazarus Pascal Discussion :

Commandes ping et arp [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 14
    Points : 14
    Points
    14
    Par défaut Commandes ping et arp
    Bonjour,

    Je désire récupérer l'adresse MAC d'un équipement réseau dans une appli Lazarus.
    Je pense donc faire un ping puis une commande arp pour l'adresse ip obtenue au ping.
    Je fais un ping par un TProcess mais une fenêtre noire reste à l'écran. Et si l'utilisateur la tue alors l'appli Lazarus se ferme.

    Une idée ????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      cmd:=TProcess.Create(nil);
      ret:=TStringList.Create;
      cmd.executable:='ping';
      cmd.Parameters.Text:='192.168.1.15' + lineending;
      log('-----------------------------------'+cmd.executable);
      cmd.options:=cmd.options+[poUsePipes,poWaitOnExit];
      cmd.ShowWindow:=swoHIDE;
      cmd.execute;
      ret.LoadFromStream(cmd.output);
      for i:=0 to ret.Count-1 do
      log('-----------------------------------'+ret[i]);

  2. #2
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par _willou Voir le message
    Bonjour,

    Je desire recuperer l'adresse MAC d'un equipement reseau dans une appli Lazarus.
    Je pense donc faire un ping puis une commande arp pour l'adresse ip obtenue au ping.
    Je fais un ping par un TProcess mais une fenetre noire reste à l'écran. Et si l'utilisateur la tue alors l appli Lazarus se ferme.

    Une idée ????
    Bonjour,

    Tu trouveras ici une discussion en anglais sur le sujet (Jurassic Pork, un habitué du forum y a participé). Va voir vers la fin de la discussion : avec Linux, tout paraît facile ; autrement, le code est plutôt long...

    Gilles
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  3. #3
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    hello,
    Gilles , mon code c'est pour une adresse MAC locale, willou cherche à avoir une adresse MAC distante et effectivement on peut utiliser la commande arp pour avoir cette info.
    En adaptant mon code pour cette commande voilà ce que cela donne pour Windows :
    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
    // J.P code pour trouver adresse MAC  d'une adresse I.P distante
    // à rajouter si besoin
    uses Regexpr,process;
    // ===========================================
     var reponse : string;
        re: TRegExpr;
        i: integer;
        adresseDistante : string;
    begin
    adresseDistante := '192.168.0.1';
    RunCommand('ping',['-n','1',adresseDistante],reponse);
    //ShowMessage(reponse);
    if pos('Impossible',reponse) > 0 then ShowMessage('Adresse non joignable')else
    begin
    RunCommand('arp',['-a',adresseDistante],reponse);
    //ShowMessage(reponse);
    try
      re := TRegExpr.Create;
      // motif qui correspond à une adresse MAC sous windows
      re.Expression := '[0-9a-f]{2}-[0-9a-f]{2}-[0-9a-f]{2}-' +
                       '[0-9a-f]{2}-[0-9a-f]{2}-[0-9a-f]{2}';
      if re.Exec(reponse) then
         showMessage('adresse MAC de ' + adresseDistante  + ' : ' + re.Match[0]) else
         ShowMessage('adresse MAC non trouvée');
    finally
      re.Free;
    end; 
    end;
    end;
    Pour linux il faut adapter la syntaxe et mettre le chemin complet des commandes ping et arp et adapter le code aux réponses.
    Attention il y a des cas où ce n'est pas Impossible qui est répondu quand une adresse n'est pas joignable (exemple "Délai d'attente dépassé")
    L'arp ne fonctionne pas toujours si il y a des équipements intermédiaires.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    hello,
    et voici la version linux :
    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
    var reponse : string;
        re: TRegExpr;
        i: integer;
        adresseDistante : string;
    begin
    adresseDistante := '192.168.0.1';
    RunCommand('ping',['-c','1',adresseDistante],reponse);
    //ShowMessage(reponse);
    if pos('Unreachable',reponse) > 0 then ShowMessage('Adresse non joignable')else
    begin
    RunCommand('arp',['-a',adresseDistante],reponse);
    //ShowMessage(reponse);
    try
      re := TRegExpr.Create;
      re.Expression := '[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:' +
                       '[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}';
      if re.Exec(reponse) then
         showMessage('adresse MAC de ' + adresseDistante  + ' : ' + re.Match[0]) else
         ShowMessage('adresse MAC non trouvée');
    finally
      re.Free;
    end;
    end;
    testé sous Ubuntu 14.04 64 bits Lazarus 1.4

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    hello,
    je ne sais pas qui a mis résolu, mais c'est si toi _willou, il est d'usage de dire dans le forum comment le problème a été résolu.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

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

Discussions similaires

  1. commande ping et domaine
    Par groovyroe dans le forum Développement
    Réponses: 2
    Dernier message: 26/02/2007, 12h32
  2. commande ping: signification de 56(84)
    Par sala|-| dans le forum Réseau
    Réponses: 3
    Dernier message: 15/12/2006, 17h38
  3. Réponses: 2
    Dernier message: 20/09/2006, 15h28
  4. [Réseau] Cibler la commande « Ping » sur tout le réseau
    Par Furius dans le forum Développement
    Réponses: 4
    Dernier message: 08/09/2006, 20h11
  5. Code source commande "ping"
    Par sir_gcc dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 20/09/2004, 21h29

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