Forum iSeries, hébergé par xdocs400.com

As400, iSeries, i5, System i, une machine qui évolue pour être de plus en plus puissante.

Vous n'êtes pas identifié(e).

Annonce

ATTENTION : Le système anti-spam est à nouveau opérationnel. Nous avons réactivé les inscriptions.

#1 2011-11-28 08:33:42

Fabrice
Membre
Inscription : 2009-11-27
Messages : 58

[Résolu] Récupérer dans un CLP ou RPGLE le résultat d'un Ping

Bonjour,

Quelqu'un aurait il une idée du moyen pour récupérer dans un CLP ou RPG (peu importe) le résultat positif ou négatif de la commande PING RMTSYS ('xxx.xxx.xxx.xxx')

Merci pour vos réponses

Fabrice

Dernière modification par Fabrice (2011-12-13 12:32:41)

Hors ligne

#2 2011-11-28 08:54:24

GAPIII
Membre
Inscription : 2010-08-13
Messages : 719

Re : [Résolu] Récupérer dans un CLP ou RPGLE le résultat d'un Ping

Programme que j'avais fait en 2004 :

PGM        (&HOST &RET)                                                 
                                                                        
/* ----------------------------------------------------------------- */ 
/*    PROGRAMME DE TEST D'UNE ADRESSE IP                             */ 
/* Ce programme retourne '0' si OK                                   */ 
/* Ce programme retourne '1' si Erreur                               */ 
/* ----------------------------------------------------------------- */ 
/*   Date   !Auteur! Nature des modifications                        */ 
/* ---------!------!------------------------------------------------ */ 
/*   /  /   !      !                                                 */ 
/* ----------------------------------------------------------------- */ 
                                                                        
DCL        &HOST    *CHAR  20                                           
DCL        &RET     *CHAR   1                                           
                                                                        
DCL        &DTAID   *CHAR   7                                           
DCL        &DTAMSG  *CHAR  80                                           
DCL        &DTADTA  *CHAR  20                                           
DCL        &CHAR3   *CHAR   3                                           
DCL        &POUR1   *CHAR   4                                           
DCL        &POUR2   *DEC  ( 4 0)            
DCL        &POUR3   *DEC  ( 4 0)            
DCL        &MSGQ    *CHAR  10               
                                            
/* RECUP % MINI DE REUSSITE DE  1 A  3  */  
/* RECUP MSGQ D'ENVOI       DE  4 A 13  */  
                                            
RTVDTAARA  (SGSPNGC1 ( 1  3)) &CHAR3        
MONMSG     CPF0000 *N  CHGVAR &CHAR3 '075'  
RTVDTAARA  (SGSPNGC1 ( 4 10)) &MSGQ         
MONMSG     CPF0000                          
                                            
/* SI % = *NO, PAS DE CONTROLE  */          
                                            
IF         (&CHAR3 = '*NO') DO              
                            CHGVAR &RET '0' 
                            RETURN          
                            ENDDO           
                                            
CHGVAR     &POUR3  &CHAR3                   
MONMSG     CPF0000                          

/* TESTE L'ADRESSE IP */                                         
                                                                 
PING       &HOST                                                 
MONMSG     (TCP0000 CPF0000)                                     
                                                                 
/* CONTROLE LE POURCENTAGE DE REUSSITE */                        
                                                                 
RCVMSG     PGMQ(*SAME) MSGTYPE(*LAST) RMV(*NO) +                 
                       MSGID(&DTAID) MSG(&DTAMSG) MSGDTA(&DTADTA)
MONMSG     CPF0000 *N GOTO ERREUR                                
IF         (&DTAID ^= 'TCP3210') GOTO ERREUR                     
                                                                 
CHGVAR     &POUR1 %BIN(&DTADTA 9 4)                              
CHGVAR     &POUR2 &POUR1                                         
IF         (&POUR2 < &POUR3) GOTO ERREUR                         
                                                                 
/* Fin de programme */                                           
                                                                 
CHGVAR     &RET '0'                                              
RETURN                                                           
                                                                   
ERREUR:                                                            
                                                                   
IF         (&MSGQ = '*PGMQ') DO                                    
           SNDPGMMSG  MSGID(TCP3204) MSGF(QTCPMSG) MSGDTA(&HOST)   
           MONMSG     CPF0000                                      
           SNDPGMMSG  MSG(&DTAMSG)                                 
           MONMSG     CPF0000                                      
ENDDO                                                              
IF         (&MSGQ ^= '*PGMQ' *AND &MSGQ ^= ' ') DO                 
           SNDUSRMSG  MSGID(TCP3204) MSGF(QTCPMSG) MSGDTA(&HOST) + 
                      TOMSGQ(&MSGQ) MSGTYPE(*INFO)                 
           MONMSG     CPF0000                                      
           SNDUSRMSG  MSG(&DTAMSG) TOMSGQ(&MSGQ) MSGTYPE(*INFO)    
           MONMSG     CPF0000                                      
ENDDO                                                              
                                                                   
CHGVAR     &RET '1'                                                
                                                                   
ENDPGM

Hors ligne

#3 2011-11-28 09:37:03

k2r400
Membre
Lieu : Montpellier (34)
Inscription : 2007-05-07
Messages : 1 807
Site Web

Re : [Résolu] Récupérer dans un CLP ou RPGLE le résultat d'un Ping

Maintenant si tu veux tester un service particulier/port, car peut-être ta machine distante est présente mais que le service attendu n'est pas démarré, dans ce cas tu peux t'appuyer sur l'utilitaire CHKTCPSVR qu'à réalisé Scott :
http://www.systeminetwork.com/article/s … s-up-63863


Patrick

Hors ligne

#4 2011-11-28 10:51:58

Fabrice
Membre
Inscription : 2009-11-27
Messages : 58

Re : [Résolu] Récupérer dans un CLP ou RPGLE le résultat d'un Ping

Merci à tous ; j'ai trouvé mes réponses !

Hors ligne

#5 2011-11-29 14:05:33

Fabrice
Membre
Inscription : 2009-11-27
Messages : 58

Re : [Résolu] Récupérer dans un CLP ou RPGLE le résultat d'un Ping

Bonjour,

Dans le CLP en exemple, le dernier message est récupéré pour retrouver le %.
Est il envisageable de retrouver les messages précédents envoyé suite au PING ?

Merci

Fabrice

Hors ligne

#6 2011-11-29 14:44:00

GAPIII
Membre
Inscription : 2010-08-13
Messages : 719

Re : [Résolu] Récupérer dans un CLP ou RPGLE le résultat d'un Ping

Il suffit d'effectuer plusieurs RCVMSG pour récupérer les messages TCP3203 ou TCP3204 et suivants.
Mais le but de ce programme était justement de retourner un simple indicateur OK ou non ...

Hors ligne

#7 2011-11-29 16:52:12

Fabrice
Membre
Inscription : 2009-11-27
Messages : 58

Re : [Résolu] Récupérer dans un CLP ou RPGLE le résultat d'un Ping

J'ai une difficulté à récupérer précisément le message PING reply 1 from x.x.x.x took 1 ms. 256 bytes. TTL 128. pour récupérer le nombre de ms
L'ID est TCP3215.

Est ce possible ?
Merci

Hors ligne

#8 2011-11-29 17:53:39

Fabrice
Membre
Inscription : 2009-11-27
Messages : 58

Re : [Résolu] Récupérer dans un CLP ou RPGLE le résultat d'un Ping

J'ai trouvé ; avec recup de KEY et RCVMSG en *PRV

Hors ligne

#9 2011-11-29 18:12:33

GAPIII
Membre
Inscription : 2010-08-13
Messages : 719

Re : [Résolu] Récupérer dans un CLP ou RPGLE le résultat d'un Ping

Programme modifié pour ressortir le temps

PGM        (&HOST &RET &TEMPS)                                                 
                                                                        
/* ----------------------------------------------------------------- */ 
/*    PROGRAMME DE TEST D'UNE ADRESSE IP                             */ 
/* Ce programme retourne '0' si OK                                   */ 
/* Ce programme retourne '1' si Erreur                               */ 
/* ----------------------------------------------------------------- */ 
/*   Date   !Auteur! Nature des modifications                        */ 
/* ---------!------!------------------------------------------------ */ 
/* 29/11/11 ! GAP3 ! Temps récupéré                                  */ 
/* ----------------------------------------------------------------- */ 
                                                                        
DCL        &HOST    *CHAR  20                                           
DCL        &RET     *CHAR   1                                           
DCL        &TEMPS   *CHAR   3
                                                                        
DCL        &DTAID   *CHAR   7                                           
DCL        &DTAMSG  *CHAR  80                                           
DCL        &DTADTA  *CHAR  20                                           
DCL        &CHAR3   *CHAR   3                                           
DCL        &POUR1   *CHAR   4                                           
DCL        &POUR2   *DEC  ( 4 0)            
DCL        &POUR3   *DEC  ( 4 0)            
DCL        &MSGQ    *CHAR  10
DCL        &MSGK1  *CHAR  4
DCL        &MSGK2  *CHAR  4               
                                            
/* RECUP % MINI DE REUSSITE DE  1 A  3  */  
/* RECUP MSGQ D'ENVOI       DE  4 A 13  */  
                                            
RTVDTAARA  (SGSPNGC1 ( 1  3)) &CHAR3        
MONMSG     CPF0000 *N  CHGVAR &CHAR3 '075'  
RTVDTAARA  (SGSPNGC1 ( 4 10)) &MSGQ         
MONMSG     CPF0000                          
                                            
/* SI % = *NO, PAS DE CONTROLE  */          
                                            
IF         (&CHAR3 = '*NO') DO              
                            CHGVAR &RET '0' 
                            RETURN          
                            ENDDO           
                                            
CHGVAR     &POUR3  &CHAR3                   
MONMSG     CPF0000                          

/* TESTE L'ADRESSE IP */                                         
                                                                 
PING       &HOST                                                 
MONMSG     (TCP0000 CPF0000)                                     
                                                                 
/* CONTROLE LE POURCENTAGE DE REUSSITE */                        
                                                                 
RCVMSG     PGMQ(*SAME) MSGTYPE(*LAST) RMV(*NO) KEYVAR(&MSGK1) +                 
           MSGID(&DTAID) MSG(&DTAMSG) MSGDTA(&DTADTA)
MONMSG     CPF0000 *N GOTO ERREUR                                
IF         (&DTAID ^= 'TCP3210') GOTO ERREUR                     
                                                                 
CHGVAR     &POUR1 %BIN(&DTADTA 9 4)                              
CHGVAR     &POUR2 &POUR1                                         
IF         (&POUR2 < &POUR3) GOTO ERREUR                         
                                                                 
/* Récupère le temps du ping */                        
                                                                 
RCVMSG     PGMQ(*SAME) MSGTYPE(*PRV) RMV(*NO) +
           MSGKEY(&MSGK1) KEYVAR(&MSGK2) +                 
           MSGID(&DTAID) MSG(&DTAMSG) MSGDTA(&DTADTA)
MONMSG     CPF0000 *N GOTO ERREUR                                
IF         (&DTAID ^= 'TCP3211') GOTO ERREUR                     

CHGVAR     &MSGK1  &MSGK2                                                                 
RCVMSG     PGMQ(*SAME) MSGTYPE(*PRV) RMV(*NO) +
           MSGKEY(&MSGK1) KEYVAR(&MSGK2) +                 
           MSGID(&DTAID) MSG(&DTAMSG) MSGDTA(&DTADTA)
MONMSG     CPF0000 *N GOTO ERREUR                                
IF         (&DTAID ^= 'TCP3215') GOTO ERREUR                     
                                                                 
CHGVAR     &TEMPS %BIN(&DTADTA 1 4)                              

/* Fin de programme */                                           
                                                                 
CHGVAR     &RET '0'                                              
RETURN                                                           

ERREUR:                                                            
                                                                   
IF         (&MSGQ = '*PGMQ') DO                                    
           SNDPGMMSG  MSGID(TCP3204) MSGF(QTCPMSG) MSGDTA(&HOST)   
           MONMSG     CPF0000                                      
           SNDPGMMSG  MSG(&DTAMSG)                                 
           MONMSG     CPF0000                                      
ENDDO                                                              
IF         (&MSGQ ^= '*PGMQ' *AND &MSGQ ^= ' ') DO                 
           SNDUSRMSG  MSGID(TCP3204) MSGF(QTCPMSG) MSGDTA(&HOST) + 
                      TOMSGQ(&MSGQ) MSGTYPE(*INFO)                 
           MONMSG     CPF0000                                      
           SNDUSRMSG  MSG(&DTAMSG) TOMSGQ(&MSGQ) MSGTYPE(*INFO)    
           MONMSG     CPF0000                                      
ENDDO                                                              
                                                                   
CHGVAR     &RET '1'                                                
                                                                   
ENDPGM

Note : J'ai copié/collé mon post précédent et modifié directement en tapant ma réponse.
J'ai peut-être fait une erreur quelquepart, mais le principe est là.
RCVMSG *LAST pour récupérer le TCP3210,
RCVMSG *PRV 2 fois pour récupérer le TCP3215

Dernière modification par GAPIII (2011-11-29 18:17:05)

Hors ligne

Pied de page des forums