目的
私は次のことを達成しようとしています:
- FIXプロトコルで会話を含むネットワークトラフィックをキャプチャする
- ネットワークトラフィックから個々のFIXメッセージを「素敵な」形式(CSVなど)に抽出します
- エクスポートされた「適切な」形式のデータに対してデータ分析を行います
私はこれを次のように達成しました:
- pcapを使用してネットワークトラフィックをキャプチャする
- tsharkを使用して関連データをCSVとして印刷する
- Python(パンダ)を使用してデータを分析する
問題
問題は、キャプチャされたTCPパケットの一部に複数のFIXメッセージが含まれていることです。つまり、tsharkを使用してCSVにエクスポートすると、1行にFIXメッセージが表示されません。これにより、CSVの使用が困難になります。
これは、CSVとして関連するFIXフィールドを抽出するために使用しているtsharkコマンドラインです。
tshark -r dump.pcap \
-R \'(fix.MsgType[0]=="G" or fix.MsgType[0]=="D" or fix.MsgType[0]=="8" or \ fix.MsgType[0]=="F") and fix.ClOrdID != "0"\' \
-Tfields -Eseparator=, -Eoccurrence=l -e frame.time_relative \
-e fix.MsgType -e fix.SenderCompID \
-e fix.SenderSubID -e fix.Symbol -e fix.Side \
-e fix.Price -e fix.OrderQty -e fix.ClOrdID \
-e fix.OrderID -e fix.OrdStatus'
パケット内にフィールドが複数出現する場合に、現在「-Eoccurrence = l」を使用して、名前付きフィールドの最後の出現のみを取得していることに注意してください。パケットに複数のFIXメッセージがあると情報が破棄されるため、これは許容できる解決策ではありません。
これは、エクスポートされたCSVファイル(1つのFIXメッセージのフィールド)の1行に表示されるものです。
16.508949000,D,XXX,XXX,YTZ2,2,97480,34,646427,,
これは、TCPパケットに複数のFIXメッセージ(この場合は3つ)があり、コマンドラインフラグ「-Eoccurrence=a」が使用されている場合に表示されます。
16.515886000,F,F,G,XXX,XXX,XXX,XXX,XXX,XXX,XTZ2,2,97015,22,646429,646430,646431,323180,323175,301151,
質問
pcapファイルから個々のプロトコル固有のメッセージを抽出する方法(必ずしもtsharkを使用する必要はありません)はありますか?