z/OS上でのTCP/IPパケットトレース取得メモ

# はじめに
z/OS上でTCP/IPのパケットトレース取得したときのメモです。
急にz/OS側でパケットトレース取らないといけなくなったのですが、すっごい久しぶりで、大昔のメモを頼りに取得しようと思ったらなんだかうまくいかずに色々手こずりました。
パケットトレース取りたいだけなのに何故だかクソ面倒な手順踏まないといけないし、ググっても分かりやすい情報が出てこない。こういう所がイケてないんだよなぁ...ブツブツ。
ということで、ここにメモをアップしておくことにします。

さらに、なんでパケットトレースくらいコマンド一発で操作できるようになってないんだ！！！と怒りが沸々と湧き上がってきてしまったので、手順を簡素化するためのスクリプトも作りました。

※ここで使用した環境はz/OS V2.3です。

# 事前準備
トレースを指定のデータセットに書き出すためには、どうもExternal Writerというプロシージャーを事前に用意しておいて、そこで出力先のデータセットを指定する必要があるようです。
(絶望的に分かりにくいっ！こんなのオプションで指定できるようにしてくれよと思うのだが。)
これは仕組み上作らないとしょうがなさそうなので、PROCLIBに以下のようなプロシージャーを作っておきます(この例ではCICSWT4という名前で作成)。

```xxx:SYS0.PROCLIB(CICSWT4)
//CICSWT4  PROC                                              
//IEFPROC  EXEC    PGM=ITTTRCWR,REGION=32M                   
//TRCOUT01 DD DSNAME=CICS004.CTRACE.D&YYMMDD..T&HHMMSS.,     
//         UNIT=3390,VOL=SER=ZSPK01,                         
//         SPACE=(4096,(100,10)),DISP=(NEW,CATLG),DSORG=PS   
```

TRCOUT01 DDにて、出力先データセットを指定しています。
この例では、上書きされないように、日付、時刻が付いた名前でデータセットを作成するようにしています。CICS004.CTRACE.D190902.T103811 という感じの名前でデータセットが作成される想定です。

# パケットトレース取得手順
まずは普通にコマンドを手動で打つ場合の手順

## (1) トレース開始
以下のような流れでMVSコマンドを実行していきます。

(1)-1 トレースオプション指定&トレース開始 (VARY TCPIPコマンド)

```
v tcpip,tcpip,pkt,on,portnum=51421 
EZZ0060I PROCESSING COMMAND: VARY TCPIP,TCPIP,PKT,ON,PORTNUM=51421  
EZZ0053I COMMAND VARY PKTTRACE COMPLETED SUCCESSFULLY               
```
上の例だと```portnum=51421```という部分がフィルターをかけるためのオプション指定です。ポート51421の通信のみ取得するイメージです。その他のオプションは以下を参考に。
参考: [VARY TCPIP,,PKTTRACE](https://www.ibm.com/support/knowledgecenter/ja/SSLTBW_2.3.0/com.ibm.zos.v2r3.halu101/varyp1f.htm#varyp1f)

(1)-2 External Writer開始 (TRACEコマンド)

```
TRACE CT,WTRSTART=CICSWT4                                              
ITT038I ALL OF THE TRANSACTIONS REQUESTED VIA THE TRACE CT COMMAND WERE
SUCCESSFULLY EXECUTED.                                                 
IEE839I ST=(ON,0001M,00002M) AS=ON  BR=OFF EX=ON  MO=OFF MT=(ON,024K)  
316                                                                    
        ISSUE DISPLAY TRACE CMD FOR SYSTEM AND COMPONENT TRACE STATUS  
        ISSUE DISPLAY TRACE,TT CMD FOR TRANSACTION TRACE STATUS        
IEF196I         1 //CICSWT4  JOB MSGLEVEL=1                            
IEF196I         2 //STARTING EXEC CICSWT4                              
IEF196I  STMT NO. MESSAGE                                              
IEF196I         2 IEFC001I PROCEDURE CICSWT4 WAS EXPANDED USING SYSTEM 
IEF196I LIBRARY SYS0.PROCLIB                                           
IEF196I         3 XXCICSWT4  PROC                                      
IEF196I         4 XXIEFPROC  EXEC    PGM=ITTTRCWR,REGION=32M           
IEF196I         5 XXTRCOUT01 DD                                        
IEF196I DSNAME=CICS004.CTRACE.D&YYMMDD..T&HHMMSS.,                     
IEF196I           XX         UNIT=3390,VOL=SER=ZSPK01,                 
IEF196I           XX         SPACE=(4096,(100,10)),DISP=(NEW,CATLG),   
IEF196I DSORG=PS                                                       
IEF196I           IEFC653I SUBSTITUTION JCL -                          
IEF196I DSNAME=CICS004.CTRACE.D190905.T045414,UNIT=3390,VOL=SER=ZSPK01,
IEF196I SPACE=(4096,(100,                                              
IEF196I           10)),DISP=(NEW,CATLG),DSORG=PS                       
IEF403I CICSWT4 - STARTED - TIME=13.54.14                              
IEF196I IEFA111I CICSWT4 IS USING THE FOLLOWING JOB RELATED SETTINGS:  
IEF196I          SWA=BELOW,TIOT SIZE=32K,DSENQSHR=DISALLOW,GDGBIAS=JOB 
IEF196I IEF236I ALLOC. FOR CICSWT4 CICSWT4                             
IEF196I IGD100I 5187 ALLOCATED TO DDNAME TRCOUT01 DATACLAS (        )  
IEF196I AHL906I THE OUTPUT BLOCK SIZE OF    27998 WILL BE USED FOR     
IEF196I OUTPUT                                                         
IEF196I         DATA SETS:                                             
IEF196I           CICS004.CTRACE.D190905.T045414                       
AHL906I THE OUTPUT BLOCK SIZE OF    27998 WILL BE USED FOR OUTPUT 338  
        DATA SETS:                                                     
          CICS004.CTRACE.D190905.T045414                               
ITT110I INITIALIZATION OF CTRACE WRITER CICSWT4 COMPLETE.              
```

これでWriterが開始されます。

(1)-3 External Writerと接続 (TRACEコマンド)
ここでWriterを指定します。Writerで指定した宛先にデータが書き出されることになるらしい。ここでのオプション指定はよく調べてないのでナゾですが、とりあえずこれで取得はできた。
("接続"という表現が適切かどうか分からないが、停止時に逆の操作を行う際に"disconnect"というキーワードが出てくるので...)

```
 TRACE CT,ON,COMP=SYSTCPDA,SUB=(TCPIP)                       
*70 ITT006A SPECIFY OPERAND(S) FOR TRACE CT COMMAND.         
```

ここでReply聞かれるので、これに対して返答(この返答でWriterを指定する)

```
R 70,WTR=CICSWT4,END                                                     
IEE600I REPLY TO 70 IS;WTR=CICSWT4,END                                   
ITT038I ALL OF THE TRANSACTIONS REQUESTED VIA THE TRACE CT COMMAND WERE  
SUCCESSFULLY EXECUTED.                                                   
IEE839I ST=(ON,0001M,00002M) AS=ON  BR=OFF EX=ON  MO=OFF MT=(ON,024K)    
418                                                                      
        ISSUE DISPLAY TRACE CMD FOR SYSTEM AND COMPONENT TRACE STATUS    
        ISSUE DISPLAY TRACE,TT CMD FOR TRANSACTION TRACE STATUS          
```

参考:
[TRACE command](https://www.ibm.com/support/knowledgecenter/ja/SSLTBW_2.3.0/com.ibm.zos.v2r3.hald001/trcmd.htm)
[External writer](https://www.ibm.com/support/knowledgecenter/ja/SSLTBW_2.3.0/com.ibm.zos.v2r3.hald001/extwtr.htm)

これで準備が完了です。

※しかし、Replyで指示ださなきゃいけないって、なんなのこれ。分かりにくいし、スクリプト化も面倒になるし、本当にイケてない。こういうものが積み重なっていくと心が折れそうになるんだよなぁ...。

## (2) テストシナリオを流す

ここで、トレースしたいテストシナリオを流します。

## (3) トレース停止

(3)-1 トレース停止 (VARYコマンド)

```
V TCPIP,TCPIP,PKT,OFF                                   
EZZ0060I PROCESSING COMMAND: VARY TCPIP,TCPIP,PKT,OFF   
EZZ0053I COMMAND VARY PKTTRACE COMPLETED SUCCESSFULLY   
```

(3)-2 External Writerを切断 (TRACEコマンド)

```
 TRACE CT,ON,COMP=SYSTCPDA,SUB=(TCPIP)                
*71 ITT006A SPECIFY OPERAND(S) FOR TRACE CT COMMAND.  
```
ここでReply聞かれるので、これに対して返答(この返答でWriterを切り離す)

```
R 71,WTR=DISCONNECT,END                                                
IEE600I REPLY TO 71 IS;WTR=DISCONNECT,END                              
ITT038I ALL OF THE TRANSACTIONS REQUESTED VIA THE TRACE CT COMMAND WERE
SUCCESSFULLY EXECUTED.                                                 
IEE839I ST=(ON,0001M,00002M) AS=ON  BR=OFF EX=ON  MO=OFF MT=(ON,024K)  
464                                                                    
        ISSUE DISPLAY TRACE CMD FOR SYSTEM AND COMPONENT TRACE STATUS  
        ISSUE DISPLAY TRACE,TT CMD FOR TRANSACTION TRACE STATUS        
```

(3)-3 External Writer停止 (TRACEコマンド)

```
TRACE CT,WTRSTOP=CICSWT4 
ITT038I ALL OF THE TRANSACTIONS REQUESTED VIA THE TRACE CT COMMAND WERE   
SUCCESSFULLY EXECUTED.                                                    
IEF196I AHL904I THE FOLLOWING TRACE DATASETS CONTAIN TRACE DATA :         
IEF196I           CICS004.CTRACE.D190905.T045414                          
AHL904I THE FOLLOWING TRACE DATASETS CONTAIN TRACE DATA : 728             
          CICS004.CTRACE.D190905.T045414                                  
IEE839I ST=(ON,0001M,00002M) AS=ON  BR=OFF EX=ON  MO=OFF MT=(ON,024K)     
731                                                                       
        ISSUE DISPLAY TRACE CMD FOR SYSTEM AND COMPONENT TRACE STATUS     
        ISSUE DISPLAY TRACE,TT CMD FOR TRANSACTION TRACE STATUS           
ITT111I CTRACE WRITER CICSWT4 TERMINATED BECAUSE OF A WTRSTOP REQUEST.
-                                      ----TIMINGS (MINUTES)-----     
                   -----PAGING COUNTS----                             
-STEPNAME PROCSTEP    RC   EXCP   CONN       TCB       SRB  CLOCK     
   SERV  WORKLOAD  PAGE  SWAP   VIO SWAPS                             
-         IEFPROC     00     18      2  0.000060  0.000001   24.7     
    385  SYSTEM       0     0     0     0                             
IEF404I CICSWT4 - ENDED - TIME=14.18.58    
-CICSWT4  ENDED.  NAME-                     TOTAL TCB CPU TIME= 0.000060  
 TOTAL ELAPSED TIME=  24.7 SUBSYS=STC                                     
IEF196I IEF142I CICSWT4 CICSWT4 - STEP WAS EXECUTED - COND CODE 0000      
IEF196I IEF285I   CICS004.CTRACE.D190905.T045414               CATALOGED  
IEF196I IEF285I   VOL SER NOS= ZSPK01.                                    
IEF196I IEF373I STEP/IEFPROC /START 2019248.1354                          
IEF196I IEF032I STEP/IEFPROC /STOP  2019248.1418                          
IEF196I         CPU:     0 HR  00 MIN  00.00 SEC    SRB:     0 HR  00     
IEF196I MIN  00.00 SEC                                                    
IEF196I         VIRT:    56K  SYS:   160K  EXT:      604K  SYS:           
IEF196I 10428K                                                            
IEF196I         ATB- REAL:                    16K  SLOTS:                 
IEF196I       0K                                                          
IEF196I              VIRT- ALLOC:       7M SHRD:       0M                 
IEF196I IEF375I  JOB/CICSWT4 /START 2019248.1354                          
IEF196I IEF033I  JOB/CICSWT4 /STOP  2019248.1418                          
IEF196I         CPU:     0 HR  00 MIN  00.00 SEC    SRB:     0 HR  00     
IEF196I MIN  00.00 SEC                                                                                    
```

これで停止完了。

## (4) トレースのフォーマット
ここまでで、(1)-2のメッセージで示されているデータセットCICS004.CTRACE.D190905.T045414 にトレースデータが取得されているはずです。こいつをフォーマットするために以下のようなJCLを流します。

```
//CTRACE  JOB MSGLEVEL=(1,1),MSGCLASS=X
//S EXEC PGM=IKJEFT01,DYNAMNBR=20,REGION=1500K
//SYSPROC DD DSN=SYS1.SBLSCLI0,DISP=SHR
//SYSTSPRT DD SYSOUT=A
//IPCSPRNT DD SYSOUT=A
//IPCSTOC  DD SYSOUT=A
//SYSUDUMP DD SYSOUT=A
//SYSTSIN DD *
PROFILE MSGID
%BLSCDDIR VOLUME (ZSPK01)
IPCS NOPARM
CTRACE COMP(SYSTCPDA) SUB((TCPIP)) FULL +
DSN('CICS004.CTRACE.D190905.T045414')
END
```

このJCLサブミットするとIPCSPRNT DDにフォーマット結果が出力されます。



# パケットトレース取得用スクリプト

## 概要
USS上からトレース開始, 停止, フォーマットをするためのスクリプト/JCL雛形を作成しました。
これらは、以前公開済みの、Lightweight Command Utilityをベースにしていますので、これが動くのが前提です。
[z/OSの新しい管理方法を探る - (4)Lightweight Command Utility on z/OS USS](https://qiita.com/tomotagwork/items/bb7f9592658389d2c5c6)

UtilDirに上のUtilityを配置したパスを設定し、以下のスクリプトでaliasなどを設定する想定です。

```sh:util_env.sh
#!/bin/sh

export PATH=$UtilDir:$PATH

alias sdsf=sdsf.rex
alias d="sdsf d"
alias f="sdsf f"
alias s="sdsf s"
alias p="sdsf p"
alias v="sdsf v"
alias r="sdsf r"
alias trace="sdsf trace"
alias da="da.sh -i"
alias st="st.sh -i"
alias syslog=syslog.sh
alias jl="joblog.sh"
alias sub="submitJcl.sh -i"
alias ds="dsExplorer.sh"

```


## ソース

### パケットトレース開始用シェル・スクリプト

Parameters部分の、各種変数は環境に合わせて変更してください。

- traceOption: 指定するトレースオプション
- writerName: 使用するExternal Writer
- datasetKey: 出力先データセットを識別する名前(HLQ)
- tcpipName: TCPIPスタック名

メッセージが出るまで若干タイムラグがある部分はsleep 3と3秒スリープ入れていますが、この辺りは必要に応じて調整して下さい。

```sh:iptrace_on.sh
#!/bin/sh
. ${UtilDir}/util_env.sh

##################################### Parameters
traceOption="portnum=51421"
writerName=cicswt4
datasetKey="CICS004.CTRACE"
tcpipName=TCPIP

tempDir=/tmp
tempKey=Util
pid=$$
thisDateTime=$(date '+%Y%m%d_%H%M%S')
tempFile=${tempDir}/${tempKey}_iptraceMessage_${pid}_${thisDateTime}.txt


###################################### Trace on
v tcpip,${tcpipName},pkt,on,${traceOption}

###################################### start writer
trace ct,wtrstart=${writerName}

### get datasetName
sleep 3
datasetMessage=$(syslog -l 1 | grep IEF196I | grep ${datasetKey} | tail -n 1)

if [[ ${datasetMessage} == "" ]]; then
        echo "Error: No Dataset Information"
        exit 1
else
        #echo datasetMessage: ${datasetMessage}
        set -A datasetMessageArray $(echo datasetMessage: ${datasetMessage})
        #echo datasetMessageArray: ${datasetMessageArray[@]} ${#datasetMessageArray[@]}
        datasetName=${datasetMessageArray[8]}
        #echo datasetName: ${datasetName}
fi

###################################### connect writer
trace "ct,on,comp=systcpda,sub=(${tcpipName})" > ${tempFile}

cat ${tempFile}

### get reply number
replyMessage=$(grep ITT006A ${tempFile})
rc=$?

if [[ ${rc} -gt 0 ]] ; then
        echo "Error: No Reply Message"
        exit 1
else
        #echo replyMessage: ${replyMessage}
        set -A replyMessageArray $(echo ${replyMessage} | tr -s "*" " ")
        #echo replyMessageArray: ${replyMessageArray[@]} ${#replyMessageArray[@]}
        replyNumber=${replyMessageArray[3]}
        echo replyNumber: ${replyNumber}
fi

rm ${tempFile}


### reply
r ${replyNumber},wtr=${writerName},end


####################################### display datasetName

echo ${datasetName}
```

### パケットトレース停止用シェル・スクリプト

Parameters部分の、各種変数は環境に合わせて変更してください。

- writerName: 使用するExternal Writer
- tcpipName: TCPIPスタック名

Writer切断するのに若干タイムラグがあるのでWriterを停止させる前にsleep 5と5秒スリープ入れていますが、この辺りは必要に応じて調整して下さい。(disconectが完了しないとwriterの停止がうまくいかないようで、writer稼働中のままフォーマットのJCL流すとデータセット"使用中"ということでフォーマットできないので注意！)

```sh:iptrace_off.sh
#!/bin/sh
. ${UtilDir}/util_env.sh

##################################### Parameters
writerName=cicswt4
tcpipName=TCPIP

tempDir=/tmp
tempKey=Util
pid=$$
thisDateTime=$(date '+%Y%m%d_%H%M%S')
tempFile=${tempDir}/${tempKey}_iptraceMessage_${pid}_${thisDateTime}.txt


###################################### Trace off
v tcpip,${tcpipName},pkt,off

###################################### disconnect writer
trace "ct,on,comp=systcpda,sub=(${tcpipName})" > ${tempFile}
cat ${tempFile}

### get reply number
replyMessage=$(grep ITT006A ${tempFile})
rc=$?

if [[ ${rc} -gt 0 ]] ; then
        echo "Error: No Reply Message"
else
        #echo replyMessage: ${replyMessage}
        set -A replyMessageArray $(echo ${replyMessage} | tr -s "*" " ")
        #echo replyMessageArray: ${replyMessageArray[@]} ${#replyMessageArray[@]}
        replyNumber=${replyMessageArray[3]}
        echo replyNumber: ${replyNumber}
fi

rm ${tempFile}

### reply
r ${replyNumber},wtr=disconnect,end


###################################### stop writer
sleep 5
trace ct,wtrstop=${writerName}
```

### フォーマット用JCLテンプレート

VOLUME名やTCPIPスタック名、SYSPROCなどは環境に合わせて適宜変更して下さい。フォーマット対象のデータが入っているデータセット名だけ変数(```@datasetName@```)にしています。

```jcl:iptrace.jcl
//CTRACE  JOB MSGLEVEL=(1,1),MSGCLASS=X
//S EXEC PGM=IKJEFT01,DYNAMNBR=20,REGION=1500K
//SYSPROC DD DSN=SYS1.SBLSCLI0,DISP=SHR
//SYSTSPRT DD SYSOUT=A
//IPCSPRNT DD SYSOUT=A
//IPCSTOC  DD SYSOUT=A
//SYSUDUMP DD SYSOUT=A
//SYSTSIN DD *
PROFILE MSGID
%BLSCDDIR VOLUME (ZSPK01)
IPCS NOPARM
CTRACE COMP(SYSTCPDA) SUB((TCPIP)) FULL +
DSN('@datasetName@')
END
```


## スクリプトによるパケットトレース取得例

さてさて、上に挙げたスクリプトを使ってパケットトレースする一連の手順例を示します。

### (1) トレース開始

コマンド一発でOK!

```
[CICS004@EPLEX1:/u/cics004/Shell] ./iptrace_on.sh
RC:  0
ISFMSG:   COMMAND ISSUED
ISFMSG2.1 : ISF776I Processing started for action 1 of 1.
ISFMSG2.2 : ISF769I System command issued, command text: v tcpip,TCPIP,pkt,on,portnum=51421.
ISFMSG2.3 : ISF766I Request completed, status: COMMAND ISSUED.
ZOS1      2019248  14:55:19.98             ISF041I CONSOLE NAME CICS004 MODIFIED
ZOS1      2019248  14:55:19.98             ISF031I CONSOLE CICS004$ ACTIVATED
ZOS1      2019248  14:55:19.98            -v tcpip,TCPIP,pkt,on,portnum=51421
ZOS1      2019248  14:55:19.98  STC00011   EZZ0060I PROCESSING COMMAND: VARY TCPIP,TCPIP,PKT,ON,PORTNUM=51421
ZOS1      2019248  14:55:19.99  STC00011   EZZ0053I COMMAND VARY PKTTRACE COMPLETED SUCCESSFULLY
RC:  0
ISFMSG:   COMMAND ISSUED
ISFMSG2.1 : ISF776I Processing started for action 1 of 1.
ISFMSG2.2 : ISF769I System command issued, command text: trace ct,wtrstart=cicswt4.
ISFMSG2.3 : ISF766I Request completed, status: COMMAND ISSUED.
ZOS1      2019248  14:55:21.10             ISF041I CONSOLE NAME CICS004 MODIFIED
ZOS1      2019248  14:55:21.10             ISF031I CONSOLE CICS004$ ACTIVATED
ZOS1      2019248  14:55:21.10            -trace ct,wtrstart=cicswt4
ZOS1      2019248  14:55:21.12             ITT038I ALL OF THE TRANSACTIONS REQUESTED VIA THE TRACE CT COMMAND WERE SUCCESSFULLY EXECUTED.
ZOS1      2019248  14:55:21.12             IEE839I ST=(ON,0001M,00002M) AS=ON  BR=OFF EX=ON  MO=OFF MT=(ON,024K)
                                                   ISSUE DISPLAY TRACE CMD FOR SYSTEM AND COMPONENT TRACE STATUS
                                                   ISSUE DISPLAY TRACE,TT CMD FOR TRANSACTION TRACE STATUS
ZOS1      2019248  14:55:21.25             ITT110I INITIALIZATION OF CTRACE WRITER CICSWT4 COMPLETE.
RC:  0
ISFMSG:   COMMAND ISSUED
ISFMSG2.1 : ISF776I Processing started for action 1 of 1.
ISFMSG2.2 : ISF769I System command issued, command text: trace ct,on,comp=systcpda,sub=(TCPIP).
ISFMSG2.3 : ISF766I Request completed, status: COMMAND ISSUED.
ZOS1      2019248  14:55:25.99             ISF041I CONSOLE NAME CICS004 MODIFIED
ZOS1      2019248  14:55:25.99             ISF031I CONSOLE CICS004$ ACTIVATED
ZOS1      2019248  14:55:25.99            -trace ct,on,comp=systcpda,sub=(TCPIP)
ZOS1      2019248  14:55:26.00            *81 ITT006A SPECIFY OPERAND(S) FOR TRACE CT COMMAND.
replyNumber: 81
RC:  0
ISFMSG:   COMMAND ISSUED
ISFMSG2.1 : ISF776I Processing started for action 1 of 1.
ISFMSG2.2 : ISF769I System command issued, command text: r 81,wtr=cicswt4,end.
ISFMSG2.3 : ISF766I Request completed, status: COMMAND ISSUED.
ZOS1      2019248  14:55:27.19             ISF041I CONSOLE NAME CICS004 MODIFIED
ZOS1      2019248  14:55:27.19             ISF031I CONSOLE CICS004$ ACTIVATED
ZOS1      2019248  14:55:27.19            -r 81,wtr=cicswt4,end
ZOS1      2019248  14:55:27.19             IEE600I REPLY TO 81 IS;WTR=CICSWT4,END
ZOS1      2019248  14:55:27.20             ITT038I ALL OF THE TRANSACTIONS REQUESTED VIA THE TRACE CT COMMAND WERE SUCCESSFULLY EXECUTED.
ZOS1      2019248  14:55:27.20             IEE839I ST=(ON,0001M,00002M) AS=ON  BR=OFF EX=ON  MO=OFF MT=(ON,024K)
                                                   ISSUE DISPLAY TRACE CMD FOR SYSTEM AND COMPONENT TRACE STATUS
                                                   ISSUE DISPLAY TRACE,TT CMD FOR TRANSACTION TRACE STATUS
CICS004.CTRACE.D190905.T055521
```

最後の行に、作成されるデータセット名を表示しています。フォーマット時に使います。

### (2) テストシナリオを流す

ここで、トレースしたいテストシナリオを流します。

### (3)トレース停止

コマンド一発でOK!

```
[CICS004@EPLEX1:/u/cics004/Shell] ./iptrace_off.sh
RC:  0
ISFMSG:   COMMAND ISSUED
ISFMSG2.1 : ISF776I Processing started for action 1 of 1.
ISFMSG2.2 : ISF769I System command issued, command text: v tcpip,TCPIP,pkt,off.
ISFMSG2.3 : ISF766I Request completed, status: COMMAND ISSUED.
ZOS1      2019248  14:55:41.38             ISF041I CONSOLE NAME CICS004 MODIFIED
ZOS1      2019248  14:55:41.38             ISF031I CONSOLE CICS004$ ACTIVATED
ZOS1      2019248  14:55:41.38            -v tcpip,TCPIP,pkt,off
ZOS1      2019248  14:55:41.38  STC00011   EZZ0060I PROCESSING COMMAND: VARY TCPIP,TCPIP,PKT,OFF
ZOS1      2019248  14:55:41.38  STC00011   EZZ0053I COMMAND VARY PKTTRACE COMPLETED SUCCESSFULLY
RC:  0
ISFMSG:   COMMAND ISSUED
ISFMSG2.1 : ISF776I Processing started for action 1 of 1.
ISFMSG2.2 : ISF769I System command issued, command text: trace ct,on,comp=systcpda,sub=(TCPIP).
ISFMSG2.3 : ISF766I Request completed, status: COMMAND ISSUED.
ZOS1      2019248  14:55:42.46             ISF041I CONSOLE NAME CICS004 MODIFIED
ZOS1      2019248  14:55:42.46             ISF031I CONSOLE CICS004$ ACTIVATED
ZOS1      2019248  14:55:42.46            -trace ct,on,comp=systcpda,sub=(TCPIP)
ZOS1      2019248  14:55:42.47            *82 ITT006A SPECIFY OPERAND(S) FOR TRACE CT COMMAND.
replyNumber: 82
RC:  0
ISFMSG:   COMMAND ISSUED
ISFMSG2.1 : ISF776I Processing started for action 1 of 1.
ISFMSG2.2 : ISF769I System command issued, command text: r 82,wtr=disconnect,end.
ISFMSG2.3 : ISF766I Request completed, status: COMMAND ISSUED.
ZOS1      2019248  14:55:43.70             ISF041I CONSOLE NAME CICS004 MODIFIED
ZOS1      2019248  14:55:43.70             ISF031I CONSOLE CICS004$ ACTIVATED
ZOS1      2019248  14:55:43.70            -r 82,wtr=disconnect,end
ZOS1      2019248  14:55:43.70             IEE600I REPLY TO 82 IS;WTR=DISCONNECT,END
RC:  0
ISFMSG:   NO RESPONSE RECEIVED
ISFMSG2.1 : ISF776I Processing started for action 1 of 1.
ISFMSG2.2 : ISF769I System command issued, command text: trace ct,wtrstop=cicswt4.
ISFMSG2.3 : ISF766I Request completed, status: NO RESPONSE RECEIVED.
ZOS1      2019248  14:55:49.81             ISF041I CONSOLE NAME CICS004 MODIFIED
ZOS1      2019248  14:55:49.81             ISF031I CONSOLE CICS004$ ACTIVATED
ZOS1      2019248  14:55:49.81            -trace ct,wtrstop=cicswt4
```

SYSLOGでWriterが停止されたことを確認してください。
(SYSLOG見るのもLightweight Command Utilityが使えるよ)

### (4) トレースのフォーマット

Lightweight Command UtilityのJCLサブミットの仕組みを使えばラクチン！

```
[CICS004@EPLEX1:/u/cics004/JCL] sub -f iptrace.jcl -l "@datasetName@=CICS004.CTRACE.D190905.T055521"
JobID: JOB05067
waiting..
Max-RC: CC 0000
-----------------------
JOBNAME: CTRACE
JOBID:   JOB05067
OWNER:   CICS004
Max-RC:  CC 0000
-----------------------
No.  DDNAME    StepName  ProcStep  DSID Owner     Rec-Cnt   Byte-cnt  CrDate-CrTime
========================================================================================
1    JESMSGLG  JES2      -         2    CICS004   20        1186      2019.248 14:57:46
2    JESJCL    JES2      -         3    CICS004   9         435       2019.248 14:57:46
3    JESYSMSG  JES2      -         4    CICS004   42        2257      2019.248 14:57:46
4    SYSTSPRT  S         -         102  CICS004   19        731       2019.248 14:57:46
5    IPCSPRNT  S         -         103  CICS004   714       47650     2019.248 14:57:46
6    IPCSTOC   S         -         104  CICS004   3         382       2019.248 14:57:46

-------------------------
Select 0 for All DDs or DD Number (with file name optionally), or Input quit
 subcommand usage
   0              :Display Whole JOBLOG
   <num>          :Display JOBLOG of selected DD
   <num> <file>   :Output selected JOBLOG to file
   r              :Refresh DD list
   q|quit         :Quit this shell script

CTRACE/JOB05067 >>> 5
IPCSPRNT

1IPCS PRINT LOG FOR USER CICS004                                                                                 1  14:57:50 09/05/19
+____________________________________________________________________________________________________________________________________
0 COMPONENT TRACE FULL FORMAT
  COMP(SYSTCPDA)SUBNAME((TCPIP))
  z/OS TCP/IP Packet Trace Formatter, Copyright IBM Corp. 2000, 2017; 2018.073
  DSNAME('CICS004.CTRACE.D190905.T055521')
0**** 2019/09/05
 RcdNr Sysname  Mnemonic Entry Id   Time Stamp    Description
 ----- -------- -------- -------- --------------- --------------------------------
0173144 ZOS1     PACKET   00000004 05:55:35.073364 Packet Trace
  From Interface    : OSA240LINK       Device: QDIO Ethernet    Full=52
   Tod Clock        : 2019/09/05 05:55:35.073362                Intfx: 4
   Segment #        : 0                Flags:  In
   Source           : xx.xx.xx.xx
   Destination      : xx.xx.xx.xx
   Source Port      : 51942            Dest Port: 51421 Asid: 0030 TCB: 00000000
   QID              : 1
  IpHeader: Version : 4                Header Length: 20
   Tos              : 00               QOS: Routine Normal Service
   Packet Length    : 52               ID Number: 4EA9
   Fragment         : DontFragment     Offset: 0
   TTL              : 123              Protocol: TCP            CheckSum: C732 FFFF
   Source           : xx.xx.xx.xx
   Destination      : xx.xx.xx.xx
0 TCP
   Source Port      : 51942 ()         Destination Port: 51421 ()
   Sequence Number  : 714852181        Ack Number: 0
   Header Length    : 32               Flags: Syn
   Window Size      : 64240            CheckSum: 0522 FFFF Urgent Data Pointer: 0000
    Option          : Max Seg Size     Len: 4 MSS: 1300
    Option          : NOP
    Option          : Window Scale OPT Len: 3 Shift: 8
    Option          : NOP
    Option          : NOP
    Option          : SACK Permitted
0Ip Header          : 20               IP: xx.xx.xx.xx, xx.xx.xx.xx Offset:  0
 000000 45000034 4EA94000 7B06C732 0944FE1B  09BCD8CC
0Protocol Header    : 32               Port: 51942, 51421       Offset: 14
 000000 CAE6C8DD 2A9BC755 00000000 8002FAF0  05220000 02040514 01030308 01010402
 -------------------------------------------------------------------------------
0173145 ZOS1     PACKET   00000004 05:55:35.073453 Packet Trace
  To Interface      : OSA240LINK       Device: QDIO Ethernet    Full=48
   Tod Clock        : 2019/09/05 05:55:35.073453                Intfx: 4
   Segment #        : 0                Flags:  Out
   Source           : xx.xx.xx.xx
   Destination      : xx.xx.xx.xx
   Source Port      : 51421            Dest Port: 51942 Asid: 0030 TCB: 00000000
   Next Hop         : xx.xx.xx.xx
  IpHeader: Version : 4                Header Length: 20
   Tos              : 00               QOS: Routine Normal Service
   Packet Length    : 48               ID Number: 55B5
   Fragment         :                  Offset: 0
   TTL              : 64               Protocol: TCP            CheckSum: 3B2B FFFF
   Source           : xx.xx.xx.xx
1IPCS PRINT LOG FOR USER CICS004                                                                                 2  14:57:50 09/05/19
+____________________________________________________________________________________________________________________________________
0  Destination      : xx.xx.xx.xx
0 TCP
   Source Port      : 51421 ()         Destination Port: 51942 ()
   Sequence Number  : 501647975        Ack Number: 714852182
   Header Length    : 28               Flags: Ack Syn
   Window Size      : 65535            CheckSum: 6C26 FFFF Urgent Data Pointer: 0000
    Option          : Max Seg Size     Len: 4 MSS: 1452
    Option          : NOP
    Option          : Window Scale OPT Len: 3 Shift: 5
--More--
```

こんな感じで見られます。(IPアドレス部分はxx.xx.xx.xxでマスク)
ファイルに落とすのもカンタン！

ふー、これでだいぶマシにはなった気がする。