星期四, 11月 02, 2023

2002-08-12 如何擷取如 NETSTAT 指令的網路狀態?(使用 API QTOCLSTNETCNN)


如何擷取如 NETSTAT 指令的網路狀態?(使用 API QTOCLSTNETCNN)

由於指令 NETSTAT 無法直接在程式中直接產生報表,需由人工由指令 NETSTAT 進入 
Work with TCP/IP Network Status 畫面選 '3' 進入  Work with TCP/IP Connection Status 
按功能鍵 F6 才能輸出報表。

但可使用 API QTOCLSTNETCNN,自動產生報表或做某些查詢。


File  : QRPGLESRC
Member: NETSTATR
Type  : RPGLE
Usage : CRTRPGMOD MODULE(NETSTATR) SRCFILE(xxx/QRPGLESRC) SRCMBR(NETSTATR)
        CRTPGM PGM(NETSTATR) BNDSRVPGM(QTOCNETSTS)
        CALL NETSTATR 後,WRKJOB 選 4 再選 5 查看 QSYSPRT 報表內容。


      *http://publib.boulder.ibm.com/html/as400/v5r1/ic2924/index.htm?info/apis/qtoclstnetcnn.htm
      *http://publib.boulder.ibm.com/html/as400/v5r1/ic2924/index.htm?info/apis/qtocrtvnetcnndta.htm
      *
      * CRTRPGMOD MODULE(NETSTATR) SRCFILE(xxx/QRPGLESRC) SRCMBR(NETSTATR)
      * CRTPGM PGM(NETSTATR) BNDSRVPGM(QTOCNETSTS)
      *
     H DEBUG  OPTION(*SRCSTMT:*NODEBUGIO) BNDDIR('QC2LE')

     FQSYSPRT   O    F  198        Printer USROPN

     D uSpaceName      s             20    inz('NETSTAT   QTEMP     ')

     D cmdStr1         s            256    inz('OVRPRTF FILE(QSYSPRT) PAGESIZE(-
     D                                         *N 198) CPI(15) OVRSCOPE(*JOB)')
     D cmdStr2         s            256    inz('DLTOVR FILE(QSYSPRT) LVL(*JOB)')

      *----------------------------------------------------------------
      * Get user space list info from header section.
      *----------------------------------------------------------------
     D                 ds                  based(uHeadPtr)
     D uOffSetToList         125    128i 0
     D uNumOfEntrys          133    136i 0
     D uSizeOfEntry          137    140i 0
      *
     D uListEntry1     ds                  Based(uListPtr )
     D rmtAdr                        15    overlay(uListEntry1:1)
     D Reservedr                      1    overlay(uListEntry1:16)
     D rmtadrb                       10i 0 overlay(uListEntry1:17)
     D lclAdr                        15    overlay(uListEntry1:21)
     D Reserved1                      1    overlay(uListEntry1:36)
     D lcladrb                       10i 0 overlay(uListEntry1:37)
     D rmtPort                       10i 0 overlay(uListEntry1:41)
     D lclPort                       10i 0 overlay(uListEntry1:45)
     D tcpipState                    10i 0 overlay(uListEntry1:49)
     D idletime                      10i 0 overlay(uListEntry1:53)
     D byteIn                        20i 0 overlay(uListEntry1:57)
     D byteOut                       20i 0 overlay(uListEntry1:65)
     D cnnOpenType                   10i 0 overlay(uListEntry1:73)
     D netCnnType                    10a   overlay(uListEntry1:77)
     D Reserved2                      1a   overlay(uListEntry1:87)
      *----------------------------------------------------------------
      * Error return code parm for APIs.
      *----------------------------------------------------------------
     D vApiErrDs       ds
     D  vbytpv                       10i 0 inz(%size(vApiErrDs))
     D  vbytav                       10i 0 inz(0)
     D  vmsgid                        7a
     D  vresvd                        1a
     D  vrpldta                      50a
      *----------------------------------------------------------------
      * NetCnn  selection data structure.
      *----------------------------------------------------------------
     D CnnSelectDS     ds
     D  netCnnTyp...
     D                               10    inz('*ALL')  overlay(CnnSelectDS:1)
     D  lstRqsTyp...
     D                               10    inz('*ALL')  overlay(CnnSelectDS:11)
     D  lstReserved...
     D                               12    overlay(CnnSelectDS:21)
     D  lclAdrLowVal...
     D                               10i 0 inz(0) overlay(CnnSelectDS:33)
     D  lclAdrUpVal...
     D                               10i 0 inz(0) overlay(CnnSelectDS:37)
     D  lclPortLowVal...
     D                               10i 0 inz(0) overlay(CnnSelectDS:41)
     D  lclPortUpVal...
     D                               10i 0 inz(0) overlay(CnnSelectDS:45)
     D  rmtAdrLowVal...
     D                               10i 0 inz(0) overlay(CnnSelectDS:49)
     D  rmtAdrUpVal...
     D                               10i 0 inz(0) overlay(CnnSelectDS:53)
     D  rmtPortLowVal...
     D                               10i 0 inz(0) overlay(CnnSelectDS:57)
     D  rmtPortUpVal...
     D                               10i 0 inz(0) overlay(CnnSelectDS:61)
      *----------------------------------------------------------------
      * Create Prototypes for calls
      *----------------------------------------------------------------
      **-- Create user space: -----------------------------------------
     D quscrtus        PR                  ExtPgm('QUSCRTUS')
     D                               20
     D                               10    const
     D                               10i 0 const
     D                                1    const
     D                               10    const
     D                               50    const
     D                               10    const
     Db                                    like(vApiErrDS)
     **-- Delete user space: ------------------------------------------
     D qusdltus        Pr                  ExtPgm( 'QUSDLTUS' )
     D                               20    Const
     Db                                    like(vApiErrDS)
      **-- Call system command: ---------------------------------------
     D system          PR            10I 0 extproc('system')
     D  i_cmd                          *   value options(*string)
      *
     D EXCP_MSGID      S              7A   import('_EXCP_MSGID')
      **-- List network connections: ----------------------------------
     D LstNetCnn       PR                  ExtProc('QtocLstNetCnn')
     D                               20
     D                                8    const
     Db                                    like(CnnSelectDs)
     D                               10i 0 const
     D                                8    const
     Db                                    like(vApiErrDS)
      **-- Retrieve pointer to user space: ----------------------------
     D qusptrus        PR                  ExtPgm('QUSPTRUS')
     D                               20
     D                                 *
     Db                                    like(vApiErrDS)

     D main            PR                  extpgm('NETSTATR')
     D main            PI
      *----------------------------------------------------------------
      * Create user space
     C                   callp     QUSCRTUS(
     C                             uSpaceName:
     C                             'TEST':
     C                             1500000:
     C                             x'00':
     C                             '*ALL':
     C                             'User Space JCR ':
     C                             '*NO':
     C                             vApiErrDs)
      * Get pointer to user space
     C                   callp     QUSPTRUS(
     C                             uSpaceName:
     C                             uHeadPtr:
     C                             vApiErrDs)
      * call api to load job log into user space.
     C                   callp     LstNetCnn(
     C                             uSpaceName:
     C                             'NCNN0100':
     C                             CnnSelectDS:
     C                             %len(CnnSelectDS):
     C                             'NCLQ0100':
     C                             vApiErrDs)
      * Process elements
      *
     C                   callp     system(cmdStr1)
     C                   open      QSYSPRT
     C                   eval      uListPtr  = uHeadPtr + uOffSetToList

     C                   except    Head

 1B  C                   do        uNumOfEntrys
     C                   exsr      cvtTxtSr
     C                   except    Out
     C                   eval      uListPtr  = uListPtr  + uSizeOfEntry
 1E  C                   enddo

     C                   close     QSYSPRT
     C                   callp     system(cmdStr2)
      * Delete user space
     C                   callp     qusdltus(
     C                             uSpaceName:
     C                             vApiErrDs)
      *
     C                   eval      *inlr = *on
     C                   return
     **-- Convert text : ----------------------------------------------
     C     cvtTxtSr      BegSr
     C                   move      *blanks       tcpipStateC      13
     C                   select
     C                   when      tcpipState = 0
     C                   eval      tcpipStateC = 'Listen'
     C                   when      tcpipState = 1
     C                   eval      tcpipStateC = 'SYN-sent'
     C                   when      tcpipState = 2
     C                   eval      tcpipStateC = 'SYN-receievd'
     C                   when      tcpipState = 3
     C                   eval      tcpipStateC = 'Established'
     C                   when      tcpipState = 4
     C                   eval      tcpipStateC = 'FIN-wait-1'
     C                   when      tcpipState = 5
     C                   eval      tcpipStateC = 'FIN-wait-2'
     C                   when      tcpipState = 6
     C                   eval      tcpipStateC = 'Close-wait'
     C                   when      tcpipState = 7
     C                   eval      tcpipStateC = 'Closing'
     C                   when      tcpipState = 8
     C                   eval      tcpipStateC = 'Last-ACK'
     C                   when      tcpipState = 9
     C                   eval      tcpipStateC = 'Time-wait'
     C                   when      tcpipState = 10
     C                   eval      tcpipStateC = 'Closed'
     C                   when      tcpipState = 11
     C                   eval      tcpipStateC = 'Not Supported'
     C                   endsl

     C                   move      *blanks       cnnOpenTypeC      7
     C                   select
     C                   when      cnnOpenType = 0
     C                   eval      cnnOpenTypeC = 'Passive'
     C                   when      cnnOpenType = 1
     C                   eval      cnnOpenTypeC = 'Active'
     C                   when      cnnOpenType = 2
     C                   eval      cnnOpenTypeC = '      '
     C                   endsl
     C                   EndSr

     OQSYSPRT   E            HEAD           1
     O                                           14 'Remote Address'
     O                                           26 'Remote Port'
     O                                           41 'Local Address'
     O                                           54 'Local Port'
     O                                           61 'State'
     O                                           76 'OpnTyp'
     O                                           84 'CnnTyp'
     O                                          109 'Byte In'
     O                                          131 'Byte Out'
     O          E            OUT            1
     O                       rmtAdr
     O                       rmtPort       L  +   1
     O                       lclAdr           +   1
     O                       lclPort       L  +   1
     O                       tcpipStateC      +   1
     O                       cnnOpenTypeC     +   1
     O                       netCnnType       +   1
     O                       byteIn        L  +   1
     O                       byteOut       L  +   1



沒有留言: