0

私は最初の Lua ディセクタを開始しています。2 つのハードコードされたイーサネット アドレスの間で、私のペイロード プロトコルが実行されています。ディセクタ内で正しい比較を行うには?

何かのようなもの

if buf(0,6):ether() == ??? and buf(6,6):ether() == ??? then
...

よろしくお願いします Wolfgang R.

4

1 に答える 1

1

TvbRangeを呼び出すether()と (これはあなたが行っていることです)、Address オブジェクトが返されます。残念ながら、Address オブジェクトはそれ自体ではそれほど有用ではありません。できることは、呼び出しtostring(addr)て文字列表現を取得し、それを期待するものと比較することだけです。このような:

if tostring(buf(0,6):ether()) == "00:12:34:56:78:9a" then
    -- do stuff
end

ただし、注意すべき点が 1 つあります。wireshark の設定で名前解決が有効になっている場合、返される文字列のイーサネット MAC アドレスの OUI 部分が、割り当てられている組織/会社名に置き換えられている可能性があります。つまり、「cisco:56:78:9a」などのようなものかもしれません。

最新の(ナイトリー)wireshark 1.11ビルドでは、バッファの生の文字列を生のLua文字列として取得し、それをイーサネットアドレスと比較するだけです(ASCII文字ではなく、バイナリのLua文字列として)。また、16進数に/から変換する関数もあるため、16進数ASCIIに変換することもできます.

もちろん、別の方法として、各バイトまたはバイトのペアを取得し、buf(0,2):uint()buf(2,2):uint()buf(4,2):uint()を数値として比較することもできます。

于 2014-03-08T03:47:27.467 に答える