我正在开始我的第一个Lua解剖器。在两个硬编码的以太网地址之间 我的有效载荷协议正在运行如何在解剖器内进行正确的比较?
像
这样的东西if buf(0,6):ether() == ??? and buf(6,6):ether() == ??? then
...
提前谢谢
Wolfgang R.
答案 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()
,并将它们作为数字进行比较。