0

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

就像是

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

在此先感谢 Wolfgang R。

4

1 回答 1

1

调用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 字符)进行比较;并且还有转换为/从十六进制转换的功能,因此您也可以将其转换为 hex-ascii 等。

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

于 2014-03-08T03:47:27.467 回答