2012-05-11 11 views
0

パケット内のデータをintに変換しようとしていますが、動作していません。サブツリーにフィールドを正しく追加することはできましたが、他の作業を行うために整数としてデータにアクセスしたいと思います。Lua Dissectorを使ってWiresharkのパケットから整数にデータを変換するには?

私は以下の変数lenをintとして使うことができますが、 "tonumber"メソッドを使用しようとすると "Nil"が返されます。私はそれを "tostring"を使って文字列に変換できますが、numberメソッドにはどこも行きません。

私は整数に変換するには、次のコードを使用していくつかの例を見ました:

local len = buf(0,4):uint32() 

をしかし、私は私のマシン上でそれを実行したときには、次のエラーを生成します。ここでは

 Lua error: attempt to call method "uint32" (a nil value) 

ですコード私はそれがどこにコメントされた以外のすべてを正しく行う:

{rest of code} 
-- myproto dissector function function 
function (my_proto.dissector (buf, pkt, root) 

    -- create subtree for myproto 
    subtree = root:add(my_proto, buf(0)) 
    -- add protocol fields to subtree 
    subtree:add(f_messageLength, buf(0,4)) 

    -- This line does not work as it returns a nil value 
    local len = tonumber(buf(0,4)) 

    -- This line produces a "bad argument #1 to 'set' (string expected, got nil) error" 
    -- add message len to info column 
    pkt.cols.info:set((tostring(len)))) 
    end 
end 
{rest of code} 

私の質問はどのように私は作業することができます整数にユーザーデータ型を変換するのですか?

答えて

2

bufここにはTvbRangeオブジェクトがあり、TvbRange.uint32()はありません。あなたはTvbRange.uint()を探しています。このアップデートを試してみてください:

function (my_proto.dissector (buf, pkt, root) 
    subtree = root:add(my_proto, buf(0)) 
    subtree:add(f_messageLength, buf(0,4)) 

    local len = buf(0,4):uint() 
    pkt.cols.info:set(len) 
end 
+0

それはうまくいきました。ありがとう、これは私をたくさん助けました。 – Peter

関連する問題