ネットワーク

61. PING をプログラムでモニターするには

普段は PING というと、DOS コマンドとして DOS 上で使用されることが多いが

System i 上でも PING コマンド が IBM によって提供されており、

System i に用意されている PING コマンドを使えば、次のように

外部の TCP/IP サーバーが現在、起動されているかどうかを検査することができる。

これとは別にプログラムの中から PING でTCP/IP サーバーが起動されているかどうかを

検査したい場合がある。

TCP/IP サーバーが起動されていれば、ファイルをプログラムによって転送したい、等の

要求がある場合である。

ここでは PING コマンドをモニターして PING が成功裡に終わったのかどうかを

判定するための手法を紹介する。

【コマンド: CHKPING】
0001.00              CMD        PROMPT('CHECK PING')                        
0002.00              PARM       KWD(URL) TYPE(*CHAR) LEN(128) PROMPT(URL)   
【コンパイル】
CRTCMD CMD(MYLIB/CHKPING) PGM(MYLIB/CHKPINGCL) SRCFILE(MYSRCLIB/QCMDSRC) AUT(*ALL)

【CLP: CHKPINGCL】
0001.00              PGM        PARM(&URL)
0002.00 /*---------------------------------------------------------*/
0003.00 /*  CHKPING :  CHECK PING                                  */
0004.00 /*---------------------------------------------------------*/
0005.00              DCL        VAR(&URL) TYPE(*CHAR) LEN(128)
0006.00              DCL        VAR(&STATUS) TYPE(*CHAR) LEN(4) VALUE(UP)
0007.00              DCL        VAR(&MSG) TYPE(*CHAR) LEN(132)
0008.00              DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)
0009.00              DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10)
0010.00              DCL        VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)
0011.00              DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(132)
0012.00              MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
0013.00
0014.00              PING       RMTSYS(&URL) MSGMODE(*QUIET *ESCAPE)
0015.00              MONMSG     MSGID(TCP3210) EXEC(DO)
0016.00              CHGVAR     VAR(&STATUS) VALUE(DOWN)
0017.00              ENDDO
0018.00              CHGVAR     VAR(&MSG) VALUE(&URL *TCAT ' = ' *CAT &STATUS)
0019.00              GOTO       SNDMSG
0020.00              RETURN
0021.00
0022.00  ERROR:      RCVMSG     MSGTYPE(*LAST) RMV(*NO) MSG(&MSG)
0023.00  SNDMSG:
0024.00              SNDPGMMSG  MSG(&MSG) TOMSGQ(*TOPGMQ) MSGTYPE(*DIAG)
0025.00              ENDPGM
【コンパイル】
CRTCLPGM PGM(MYLIB/CHKPINGCL) SRCFILE(MYSRCLIB/QCLSRC) AUT(*ALL)

【解説】

PING コマンドは

0014.00              PING       RMTSYS(&URL) MSGMODE(*QUIET *ESCAPE) 

のようにして リモート・システム (RMTSYS) によって PING の検査をしているが

IP アドレスを検査したい場合は リモート IP アドレス (INTNETADR) を指定するようにすればよい。

0015.00              MONMSG     MSGID(TCP3210) EXEC(DO)

によって TCP3210 メッセージ ID をモニターすることによって PING が成功であったか、

それとも失敗であったかを判断することができる。

このPING による検査手法は、また、System i がインターネットに接続可能であるかを

判断することもできる。

通常では、ほぼインターネットで接続できるはずのサイト: WWW.YAHOO.CO.JP に PING でテストして

もし、エラーとなるのであれば その System i がインターネットに繋がらない状態であると

判断することができる。

つまり PING コマンドは PING 先のサーバーの起動状態を検査するだけでなく、自分自身の

状態を検査することに利用することができるのである。