2016-05-19 41 views
0

私はluaスクリプトでプロトコルのためのdissactorを書いています。ディッサクタは正常に動作しています。しかし、私はdissactorファイルで1つのアップデートを知りたい。luaのdissactorでProtofield.string()関数の引数としてテーブルデータを渡す方法は?

p_abcd = Proto("abcd", "ABCD") 

私はさまざまな種類のメッセージ用にテーブルを作成しました。以下はテーブルです -

local message_types = { 
[1] = "MAC ID", 
[2] = "AP MODEL NAME", 
[3] = "AP SERIAL NUMBER", 
[4] = "CAUSE", 
[5] = "AP STATE", 
[6] = "AP SOFTWARE VERSION", 
[7] = "AP_IP_ADDRESS" 
} 

以下はこのプロトコールのために作成したもので、これをフィールドとして登録しました。

local attribute_type = ProtoField.string("abcd.message_type", "Attribute Type") 
p_abcd.fields = {attribute_type} 
tree_attribute:add(attribute_type, data(index, 2), message_types[data(index, 2):int()]) 

iは、任意のメッセージフィールドにWiresharkのにフィルタを適用する場合、それはすべてのメッセージタイプのフィルタ値として「abcd.message_type = some_valve」を表示します。

Iは、各メッセージタイプに対して別々protofieldを作成せずに、「abcd.mac_id = some_value」MAC IDのためように、異なるメッセージタイプに応じて、このフィルタ値を表示します。

これはmessage_typesテーブルの助けを借りて可能ですか?

答えて

0

私は私はあなたの質問を理解していないが、通常は2バイトのフィールドのために、あなたがそうのようなものだろう:

local attribute type = ProtoField.uint16("abcd.message_type", "Attribute Type", base.DEC, message_types, 0x0000, "Optional Message type description") 
p_abcd.fields = {attribute_type} 

tree_attribute:add(attribute_type, data(index, 2)) 

を(詳細はProtoFieldを参照してください。)

その後MAC IDと等しいメッセージタイプを探している場合は、"abcd.message_type eq 1"のWiresharkディスプレイフィルタを適用します。これがあなたが探していたものでない場合は、あなたの質問を明確にしてください。