Lua wireshark解剖器:比较以太网地址

时间:2014-02-19 19:37:55

标签: lua wireshark wireshark-dissector

我正在开始我的第一个Lua解剖器。在两个硬编码的以太网地址之间 我的有效载荷协议正在运行如何在解剖器内进行正确的比较?

这样的东西
if buf(0,6):ether() == ??? and buf(6,6):ether() == ??? then
...
提前谢谢 Wolfgang R.

1 个答案:

答案 0 :(得分:1)

在TvbRange上调用ether()(这就是你正在做的事情)会给你一个Address对象。遗憾的是,Address对象本身并没有那么有用 - 你唯一可以做的就是调用tostring(addr)来获取字符串表示,然后将其与你期望的进行比较。像这样:

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

但有一点需要注意:如果您的wireshark首选项设置设置为启用名称解析,那么您获取的字符串可能会将以太网MAC地址的OUI部分替换为其分配的组织/公司名称至。即,它可能类似于“cisco:56:78:9a”或其他什么。

在最新的(夜间)wireshark 1.11版本中,您可以将缓冲区的原始字符串作为原始Lua字符串,并将其与您的以太网地址进行比较(作为二进制Lua字符串,而不是ASCII字符);并且还有转换为/从十六进制转换的函数,因此您可以将其转换为hex-ascii等。

当然,您可以做的另一件事是获取每个字节或字节对,例如buf(0,2):uint()buf(2,2):uint()以及buf(4,2):uint(),并将它们作为数字进行比较。