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

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

类似于

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

提前感谢 Wolfgang R.

点赞
用户3395060
用户3395060

调用 ether() 方法可以从一个 TvbRange 对象中得到一个 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 字符比较)。此外,还有一些可以进行十六进制转换的函数,可以将其转换为十六进制 ASCII 码等。

当然,你还可以获取每个字节或一对字节,比如 buf(0,2):uint()buf(2,2):uint()buf(4,2):uint(),然后将它们作为数字进行比较。

2014-03-08 03:47:27