我正在开始我的第一个 Lua 解析器。在两个硬编码的以太网地址之间,我的有效负载协议正在运行。如何在解剖器内进行正确的比较?
就像是
if buf(0,6):ether() == ??? and buf(6,6):ether() == ??? then
...
在此先感谢 Wolfgang R。
我正在开始我的第一个 Lua 解析器。在两个硬编码的以太网地址之间,我的有效负载协议正在运行。如何在解剖器内进行正确的比较?
就像是
if buf(0,6):ether() == ??? and buf(6,6):ether() == ??? then
...
在此先感谢 Wolfgang R。
调用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()
然后将它们作为数字进行比较。