ストリームデータ処理基盤 uCosminexus Stream Data Platform - Application Framework システム構築・運用ガイド

[目次][索引][前へ][次へ]

9.10.2 HTTPパケット入力コネクター定義

HTTPパケット入力コネクター定義(HttpPacketInputConnectorDefinitionタグ)は,入力用CB定義(InputCBDefinitionタグ)の子要素として定義します。

なお,HTTPパケットの入力の処理については,「11.3 HTTPパケットの入力」を参照してください。

<この項の構成>
(1) 記述形式
(2) 定義の詳細
(3) 記述例
(4) WinDumpを使用する場合のcommandタグの指定内容
(5) tcpdumpを使用する場合のcommandタグの指定内容
(6) フィールド名に指定できる識別子
(7) フィールド値に格納されるデータのJavaのデータ型

(1) 記述形式

<HttpPacketInputConnectorDefinition>
  <input buffersize="<入出力バッファーサイズ>"
   assemblingtime="<分割パケット組み立て時間>">
    <packetdata
     globalheader="<グローバルヘッダー領域長>"
     packetheader="<パケットヘッダー領域長>"
     packetoffset="<パケットデータサイズ領域オフセット>"
     packetlength="<パケットデータサイズ領域長>"
     timeoffset="<タイムスタンプ領域オフセット>"/>
    <command path="<コマンドパス名>"
     parameter="<コマンドパラメーター>"/>
  </input>
  <output unit="<最大出力単位>">
    <record name="<レコード名>" type="{REQUEST|RESPONSE}">
      <field name="<フィールド名>"/>
    </record>
  </output>
</HttpPacketInputConnectorDefinition>

(2) 定義の詳細

HttpPacketInputConnectorDefinitionタグ(全体情報の定義)
HTTPパケット入力コネクター定義の全体情報を定義します。この定義は必ず1個だけ記述します。
inputタグ(読み込み定義)
HTTPパケットの入出力情報を定義します。この定義は必ず1個だけ記述します。
buffersize="<入出力バッファーサイズ>"
入力バッファーに格納できるHTTPパケット(単位:パケット),および出力バッファーに格納できる共通形式レコード(単位:レコード)の最大数を1〜12288の整数で指定します。省略した場合,4096が仮定されます。
assemblingtime="<分割パケット組み立て時間>"
分割パケット組み立て時間(単位:ミリ秒)を1〜5000の整数で指定します。省略した場合,2000が仮定されます。
分割パケットとは,最大セグメント長(MSS:Maximum Segment Size)に従ってTCP階層で分割されたパケットデータのことです。HTTPパケット入力コネクターが取得したデータが分割パケットの場合は,TCPプロトコルヘッダーの情報を基にパケットを組み立てます。分割パケット組み立て時間とは,新たな分割パケットが到着してから,到着済みのパケットと連結して組み立てるまでに掛かる時間のことで,分割パケットが連結されるごとにリセットしてカウントされます。なお,IP階層で分割されるパケットデータの組み立てはしません。
分割パケットの組み立てで,ここで指定した時間を超えた場合は,組み立て中の分割パケットは破棄されます。また,組み立てに使用した分割パケットの最新の時刻情報は,タイムスタンプとして使用されます。
packetdataタグ(HTTPパケット定義)
取得するHTTPパケットのフォーマットを定義します。この定義は必ず1個だけ記述します。
globalheader="<グローバルヘッダー領域長>"
グローバルヘッダー領域の長さ(単位:バイト)を1〜128の整数で指定します。省略した場合,24が仮定されます。
packetheader="<パケットヘッダー領域長>"
パケットヘッダー領域の長さ(単位:バイト)を9〜128の整数で指定します。省略した場合,16が仮定されます。
packetoffset="<パケットデータサイズ領域オフセット>"
パケットヘッダーの先頭からパケットデータサイズ領域までのオフセット(単位:バイト)を0〜127の整数で指定します。省略した場合,8が仮定されます。
packetlength="<パケットデータサイズ領域長>"
パケットデータサイズ領域の長さ(単位:バイト)を1〜4の整数で指定します。省略した場合,4が仮定されます。
timeoffset="<タイムスタンプ領域オフセット>"
パケットヘッダーの先頭からタイムスタンプ領域までのオフセット(単位:バイト)を0〜120の整数で指定します。省略した場合,0が仮定されます。
タイムスタンプ領域とは,パケットアナライザーがHTTPパケットをキャプチャーしたときのタイムスタンプを格納している,パケットヘッダーの領域です。タイムスタンプ領域のフォーマットを次の図に示します。

図9-2 タイムスタンプ領域のフォーマット

[図データ]
commandタグ(コマンド定義)
使用するパケットアナライザーの起動コマンドの情報を定義します。この定義は必ず1個だけ記述します。
Stream Data Platform - AFでは,パケットアナライザーとしてWindowsの場合はWinDump,Linuxの場合はtcpdumpを使用できます。
WinDump,またはtcpdumpを使用する場合に,この定義で指定する内容については,「(4) WinDumpを使用する場合のcommandタグの指定内容」,または「(5) tcpdumpを使用する場合のcommandタグの指定内容」を参照してください。
path="<コマンドパス名>"
パケットアナライザーの起動コマンドの絶対パス名を1〜100文字の半角文字(ASCIIコードの32〜126)で指定します。
parameter="<コマンドパラメーター>"
パケットアナライザーの起動コマンドに渡すパラメーターを1〜100文字の半角文字(ASCIIコードの32〜126)で指定します。
outputタグ(出力定義)
HTTPパケット入力コネクターがHTTPパケットを共通形式レコードに変換する際の,共通形式レコードの出力情報を定義します。この定義は必ず1個だけ記述します。
unit="<最大出力単位>"
共通形式レコードの最大出力単位(単位:レコード)を1〜1000の整数で指定します。省略した場合,100が仮定されます。
recordタグ(レコード定義)
共通形式レコードのレコード情報を定義します。この定義は1〜2個記述します。
name="<レコード名>"
共通形式レコードのレコード名を1〜100文字の半角英数字,およびアンダーライン(_)で指定します。先頭の文字に指定できるのは,半角英字だけです。この属性は省略できません。レコード名は,recordタグ内で一意となるように指定してください。
type="{REQUEST|RESPONSE}"
共通形式レコードの種類を指定します。この属性は省略できません。
指定できる値を次に示します。
  • "REQUEST"
    リクエストレコードです。HTTPプロトコル通信で,クライアントからホストへのリクエスト送信時に発生したデータを格納する共通形式レコードです。
  • "RESPONSE"
    レスポンスレコードです。HTTPプロトコル通信で,ホストからクライアントへのレスポンス送信時に発生したデータを格納する共通形式レコードです。
fieldタグ(フィールド定義)
共通形式レコードを構成するフィールドの情報を定義します。この定義は1〜16個記述します。
name="<フィールド名>"
フィールド名を指定します。
フィールド名には,HTTPパケットから抽出したいデータの識別子を指定します。ここで指定した識別子に対応したデータが,各フィールドの値に格納されます。
フィールド名は,レコード定義内で一意となるように指定します。
フィールド名に指定できる識別子は,recordタグのtype属性で指定する共通形式のレコードの種類によって異なります。フィールド名に指定できる識別子については,「(6) フィールド名に指定できる識別子」を参照してください。
抽出されたデータは,Javaのデータ型に変換されてフィールド値に格納されます。フィールド値に格納されるデータのJavaのデータ型については,「(7) フィールド値に格納されるデータのJavaのデータ型」を参照してください。

(3) 記述例

<?xml version="1.0" encoding="UTF-8"?>
<root:AdaptorCompositionDefinition
 xmlns:hpicon="http://www.hitachi.co.jp/soft/xml/sdp/adaptor/definition/callback/HttpPacketInputConnectorDefinition">
<!-- 途中略 -->
 
<!-- 入力用CB定義 -->
<cb:InputCBDefinition
 class="jp.co.Hitachi.soft.sdp.adaptor.callback.io.packetinput.HttpPacketInputCBImpl" name="inputer2">
  <!-- HTTPパケット入力コネクター定義 -->
  <hpicon:HttpPacketInputConnectorDefinition>
    <!-- 読み込み定義 -->
    <hpicon:input buffersize="096" assemblingtime="2000">
      <!-- HTTPパケット定義 -->
      <hpicon:packetdata globalheader="24" packetheader="16" packetoffset="8"
       packetlength="4" timeoffset="0"/>
      <!-- コマンド定義 -->
      <hpicon:command path="C:\Program Files\WinDump\WinDump.exe"
       parameter=" -i 1 -s 2048 -w - -n &quot;tcp port 80 and host 133.145.224.19&quot;"/>
    </hpicon:input>
    <!-- 出力定義 -->
    <hpicon:output unit="100">
      <!-- レコード定義 -->
      <hpicon:record name="RECORD1" type="REQUEST">
        <!-- フィールド定義 -->
        <hpicon:field name="SEND_IP"/>
        <hpicon:field name="RECEIVE_IP"/>
        <hpicon:field name="SEND_PORT"/>
        <hpicon:field name="RECEIVE_PORT"/>
        <hpicon:field name="MESSAGE_TYPE"/>
        <hpicon:field name="TARGET_URI"/>
      </hpicon:record>
    </hpicon:output>
  </hpicon:HttpPacketInputConnectorDefinition>
</cb:InputCBDefinition>

(4) WinDumpを使用する場合のcommandタグの指定内容

パケットアナライザーとしてWinDumpを使用する場合に,commandタグで指定する内容について説明します。なお,ここでは,WinDumpのバージョン3.9.5を使用する場合の例を示します。WinDumpの起動コマンドの詳細については,WinDumpのドキュメントを参照してください。

HTTPパケット入力コネクターでは,次の書式で記述されたWinDumpの起動コマンド(WinDump.exe)をサポートします。

WinDump.exe△-i△<ネットワークデバイスの番号>△-s△<内部バッファーサイズ>△-w△-△-n△"tcp△port△<ポート番号>△and△host△<IPアドレス>"

書式の「△」は半角スペースを表します。commandタグのparameter属性では,半角スペースを省略しないで記述してください。

書式に示した値について説明します。

WinDump.exe
WinDumpの起動コマンドです。commandタグのpath属性で,WinDump.exeのパスを絶対パスで指定してください。
-i△<ネットワークデバイスの番号>
解析対象のコンピュータに接続されているネットワークデバイスの番号を指定するオプションです。このオプションと値は,commandタグのparameter属性で指定します。
-s△<内部バッファーサイズ>
キャプチャーしたパケットデータを格納する内部バッファーのサイズ(単位:バイト)を指定します。HTTPではTCPのパケットサイズ以上を指定する必要があり,通常は,2,048バイトを指定すれば十分です。このオプションと値は,commandタグのparameter属性で指定します。
-w△-
キャプチャーしたパケットの出力先として,ファイル,または標準出力を指定するオプションです。HTTPパケット入力コネクターを使用する場合には,パケットを標準出力するため,「-w△-」と指定します。このオプションと値は,commandタグのparameter属性で指定します。
-n△"tcp△port△<ポート番号>△and△host△<IPアドレス>"
パケットキャプチャーライブラリー(libpcap)のフィルター書式でキャプチャーフィルターを指定するオプションです。HTTPパケット入力コネクターを使用する場合には,HTTPプロトコルで使用するポート番号と,解析対象のコンピュータのIPアドレスを指定します。このオプションと値は,commandタグのparameter属性で指定します。
なお,ダブルクォーテーション(")は特殊文字に該当するため,「&quot;」と置換して記述してください。

(5) tcpdumpを使用する場合のcommandタグの指定内容

パケットアナライザーとしてtcpdumpを使用する場合に,commandタグで指定する内容について説明します。なお,ここでは,tcpdumpのバージョン3.9.4を使用する場合の例を示します。tcpdumpの起動コマンドの詳細については,tcpdumpのドキュメントを参照してください。

HTTPパケット入力コネクターでは,次の書式で記述されたtcpdumpの起動コマンドをサポートします。

/usr/sbin/tcpdump△-i△<LANインタフェース名>△-s△<内部バッファーサイズ>△-w△-△-n△tcp△port△<ポート番号>△and△host△<IPアドレス>

書式の「△」は半角スペースを表します。commandタグのparameter属性では,半角スペースを省略しないで記述してください。

書式に示した値について説明します。

tcpdump
tcpdumpの起動コマンドです。commandタグのpath属性で,tcpdumpのパスを絶対パスで指定してください。
-i△<LANインタフェース名>
解析対象のコンピュータに接続されているLANインタフェース名を指定するオプションです。このオプションと値は,commandタグのparameter属性で指定します。
-s△<内部バッファーサイズ>
キャプチャーしたパケットデータを格納する内部バッファーのサイズ(単位:バイト)を指定します。HTTPではTCPのパケットサイズ以上を指定する必要があり,通常は,65,535バイトを指定します。このオプションと値は,commandタグのparameter属性で指定します。
-w△-
キャプチャーしたパケットの出力先として,ファイル,または標準出力を指定するオプションです。HTTPパケット入力コネクターを使用する場合には,パケットを標準出力するため,「-w△-」と指定します。このオプションと値は,commandタグのparameter属性で指定します。
-n△tcp△port△<ポート番号>△and△host△<IPアドレス>
パケットキャプチャーライブラリー(libpcap)のフィルター書式でキャプチャーフィルターを指定するオプションです。HTTPパケット入力コネクターを使用する場合には,HTTPプロトコルで使用するポート番号と,解析対象のコンピュータのIPアドレスを指定します。このオプションと値は,commandタグのparameter属性で指定します。

(6) フィールド名に指定できる識別子

fieldタグのname属性のフィールド名として指定できる識別子を次の表に示します。

表9-9 fieldタグのname属性のフィールド名として指定できる識別子

項番 識別子 データ 内容 プロトコル レコードの種類ごとの指定可否
リクエスト レスポンス
1 TIME 時刻※1 パケットデータが到着した時刻
2 PACKET_LENGTH パケットサイズ※2 パケットデータの長さ(単位:バイト)
3 SEND_MAC 送信元MACアドレス パケット送信元のMACアドレス Ethernet
4 SEND_IP 送信元IPアドレス パケット送信元のIPアドレス IP
5 RECEIVE_IP 送信先IPアドレス パケット送信先のIPアドレス IP
6 SEND_PORT 送信元ポート番号 パケット送信元のポート番号 TCP
7 RECEIVE_PORT 送信先ポート番号 パケット送信先のポート番号 TCP
8 MESSAGE_TYPE メッセージ種別 Request,Responseの種別 HTTP
9 METHOD_NAME メソッド情報 GET,POSTなどのメソッド情報 HTTP ×
10 TARGET_URI URI情報※3 アクセス先のURI情報 HTTP ×
11 REFERER Referer※3 リンク元のURI情報 HTTP ×
12 COOKIE Cookie※3 ※4 クッキー情報※5 HTTP
13 STATUS_CODE ステータスコード 要求の処理結果 HTTP ×
14 CONNECTION Connection 接続の永続性情報 HTTP
15 CONTENT_LENGTH Content-Length コンテンツの長さ(単位:バイト) HTTP
16 CONTENT_TYPE Content-Type コンテンツの種類 HTTP
17 MESSAGE_BODY メッセージ・ボディ※3 実データ HTTP ※6 ×
(凡例)
○:識別子を指定できます。
×:識別子を指定できません。
−:該当しません。
注※1
時刻は,パケットヘッダーのタイムスタンプから取得します。
注※2
パケットサイズは,HTTPメッセージの開始行,ヘッダーサイズ,およびHTTPヘッダー"Content-Length"が参照する値の合計値です。"Content-Length"がない場合,"Content-Length"が参照する値は0とします。
注※3
パーセントエンコードされている文字列は,UTF-8でデコードします。
注※4
リクエストレコードとレスポンスレコードでCookieデータの取得方法が異なります。
リクエストレコードの場合は,HTTPヘッダー"Cookie"が参照するデータを取得します。
レスポンスレコードの場合は,HTTPヘッダー"Set-Cookie"が参照するデータを取得します。HTTPヘッダー"Cookie2"と"Set-Cookie2"が参照するデータは取得しません。
注※5
クッキー情報には複数のクッキーが含まれている場合があります。それぞれのクッキーをフィールドとして扱いたい場合は,マッピング定義のmapタグのfunction属性でregexsubstringを指定して,正規表現の文字列を取得するようにしてください。
注※6
メッセージ・ボディは,メソッド情報がPOST,Content-Typeのメディアタイプがtextで(サブタイプの値は問わない),かつContent-Lengthが存在する場合だけ取得できます。

(7) フィールド値に格納されるデータのJavaのデータ型

fieldタグのname属性で指定した識別子に従って抽出された各プロトコルデータは,次の表に示すJavaのデータ型に変換されます。Javaのデータ型への変換の際に,プロトコルデータの値が値の範囲の上限を超えている場合は,上限値までがフィールド値に格納されます。指定した識別子に対応するデータがプロトコルデータにない場合,フィールド値には,String型のときは空文字,Integer型のときは-1が格納されます。

表9-10 フィールド値に格納されるデータのJavaのデータ型

項番 データ プロトコル Javaのデータ型 値の範囲
1 時刻 Timestamp 1970/01/01 00:00:00.000000 〜 2261/12/31 23:59:59.999999
2 パケットサイズ Integer 0〜2,147,483,647
3 送信元MACアドレス Ethernet String 17文字(00:00:00:00:00:00 〜 FF:FF:FF:FF:FF:FF)
4 送信元ポート番号 TCP Integer 0〜65,535
5 送信先ポート番号 TCP Integer
6 送信元IPアドレス IP String
  • IPv4の場合
    7〜15文字(0.0.0.0 〜255.255.255.255)
  • IPv6の場合
    40文字(0000:0000:0000:0000: 0000:0000:0000:0000 〜FFFF:FFFF:FFFF:FFFF: FFFF:FFFF:FFFF:FFFF)
7 送信先IPアドレス IP String
8 データ種別 HTTP String 7〜8文字(RequestまたはResponse)
9 メソッド情報 HTTP String 1〜127文字(GET,CONNECTなど)
10 URI情報 HTTP String 1〜255文字
11 Referer HTTP String
12 Cookie HTTP String 1〜4,096文字
13 ステータスコード HTTP String 3文字(200,404など)
14 Connection HTTP String 1〜127文字(closeまたはKeep-Alive)
15 Content-Length HTTP Integer 0〜2,147,483,647
16 Content-Type HTTP String 3〜255文字
17 メッセージ・ボディ HTTP String 0〜2,048文字
(凡例)
−:該当しません。
注※
フィールドに時刻データを指定する場合は,クエリ定義ファイルのCQLデータ型(TIMESTAMP)の有効けた数も合わせて6けた以上を指定するようにしてください。