私は最初の Lua ディセクタを開始しています。2 つのハードコードされたイーサネット アドレスの間で、私のペイロード プロトコルが実行されています。ディセクタ内で正しい比較を行うには?
何かのようなもの
if buf(0,6):ether() == ??? and buf(6,6):ether() == ??? then
...
よろしくお願いします Wolfgang R.
私は最初の Lua ディセクタを開始しています。2 つのハードコードされたイーサネット アドレスの間で、私のペイロード プロトコルが実行されています。ディセクタ内で正しい比較を行うには?
何かのようなもの
if buf(0,6):ether() == ??? and buf(6,6):ether() == ??? then
...
よろしくお願いします Wolfgang R.
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()
を数値として比較することもできます。