2014-02-19 46 views
0

我開始我的第一個Lua解剖器。在兩個硬編碼的以太網地址 之間,我的負載協議正在運行。如何在解剖器內進行正確的比較?Lua wireshark解剖器:比較以太網地址

喜歡的東西

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

在此先感謝 沃爾夫岡·R.

回答

1

調用上TvbRange ether()(這是你在做什麼)給你回一個地址對象。不幸的是,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(),並將它們作爲數字進行比較。