カスタム TCP/IP ベース プロトコル

次の例は、完全なカスタム TCP/IP ベース プロトコルを使用するアプリケーションからのものです。このプロトコルで、クライアント リクエストとサーバー レスポンス データの両方が、固定長フィールドで構成される事前定義メッセージのテレグラム構造のセットに従います。いくつかのフィールドはバイナリであり (よって、0 バイトの可能性があります),いくつかのフィールドは文字列型になります。

記録したトラフィックからの典型的なリクエスト/レスポンス ペアを示します:

WebTcpipConnect(hWeb0, "10.9.96.81", 3311);
WebTcpipSendBin(hWeb0, 
"\h00000280000000000000000000000000" // ················ 
"\h000100000000000000004F4B36302020" // ··········OK60  
... 
"\h303030302B3030303030303030303030" // 0000+00000000000
"\h30303030000000000000000000000000" // 0000············
, 640);
WebTcpipRecvExact(hWeb0, NULL, 80);
WebTcpipShutdown(hWeb0);

記録ログからのサーバー レスポンスを示します。上記のスクリプトで、WebTcpipRecvExact 関数の 3 番目の引数を元に、80 バイトが含まれていることが既にわかっています。

00 00 00 00  ···P············  00 00 00 50 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 10  ··········OK60    00 01 00 00 00 00 00 00 00 00 4F 4B 36 30 20 20
00 00 00 20    ··U60OKS1 SILK  20 20 00 00 55 36 30 4F 4B 53 31 20 53 49 4C 4B
00 00 00 30  01  ············  30 31 20 20 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 40  ················  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
注: 最初の 4 バイト (0x00 00 00 50) は、4 バイト整数を表しており、10 進数値 80 (5 * 16 = 80) になります。パケット全体の長さは 80 バイトであり、つまり、最初の 4 バイトは「パケット サイズ」変数に含まれることに注意してください。利用可能な場合、テスト対象カスタム アプリケーションに関するプロトコル ドキュメントを参照してください。そうでない場合、このようなプロトコルの動作を自分で発見するために実験しなければなりません。
注: クライアント リクエスト テレグラムには同じ情報が含まれます。最初の 4 バイトは、0x00 00 02 80 であり、2*256 + 8*16 = 640 と同等です。これはサーバーに送信するバイト数です。

カスタマイズ後のスクリプトを以下に示します。次にご注意ください。

結果を以下に示します。

ResetRequestData();
AppendRequestData("\h00000280000000000000000000000000" 
                 "\h00010000000000000000", 26);
AppendRequestData("OK60    ");
AppendRequestData("\h0000", 2);
AppendRequestData(sUser + sPassword);    
// ... (some more lines not displayed here)

MeasureStart("Write Journal");  
WebTcpipConnect(hWeb0, "10.9.96.81", 3311);
SendTcpipRequest(hWeb0);
WebTcpipRecvProto(hWeb0, 0, 4, TCP_FLAG_INCLUDE_PROTO, 
               sResponse, sizeof(sResponse), nReceived);
// ... (response verification not displayed here)
WebTcpipShutdown(hWeb0);
MeasureStop("Write Journal");  

記録ルール設定ファイル

次の記録ルール XML ファイルは、Silk Performer Rcorder を、WebTcpipRecvExact の場所に正しい WebTcpipRecvProto 呼び出しを生成するように設定します。Identify ノードの設定は、上記のスクリプトで WebTcpipRecvProto の引数にマップします。

<?xml version="1.0" encoding="UTF-8"?>
<RecordingRuleSet>
  <TcpRuleRecvProto>
    <Name>My custom TCP protocol</Name>
    <Identify>
      <LengthOffset>0</LengthOffset>
      <LengthLen>4</LengthLen>
      <OptionFlags>ProtoIncluded</OptionFlags>
    </Identify>
  </TcpRuleRecvProto>
</RecordingRuleSet>