2017-01-25 81 views
2

所有目的地我在開始創建一個IEEE 802.15.4分組剝離。我正在使用TI cc2531加密狗和python腳本ccsniffpip將數據導入Wireshark。到目前爲止,我可以將數據包看作是原始的802.15.4數據包,這很好。我的問題是用我的自定義協議解析有效負載。看來Wireshark的設計假定802.15.4目的地地址意義重大,因爲端口旨在暗示數據包的類型。對於15.4,通常情況並非如此。對於15.4,目的地更類似於IP地址。我想解碼每15.4我看到的數據包。在我的情況下,我的協議隱藏在15.4數據包的「數據」部分內,數據的第一個字節表示數據包類型。我創建一個簡單的Lua解析器來解決問題並構建一些簡單的樹是沒有問題的,但是我可以看到,我必須手動進入GUI並告訴程序解碼爲每個「MyProtocol」由主15.4設備分配的新目標地址。我需要讓我的解剖器對所有15.4個目標地址都混雜。我一直喜歡的筆記,其中dissector_add for_decode_as暴露到Lua("Wireshark-commits: [Wireshark-commits] master 016769d: Expose dissector_add_for_decode_as() to Lua"),但我不能找到如何使用它在Lua 15.4任何例子。Wireshark的802.15.4剝離了在Lua

而且任何高層體系結構的建議,將不勝感激。我寫的簡單剖析器似乎無法突出底部數據窗格中的特定數據,因此我假設我沒有以正確的方式使用Wireshark。

FYI我開始使用這種SO注意相關:Wireshark Lua Dissector for IEEE 802.15.4 - DissectorTable name?

回答

1

注:沒有真正回答你的問題,而是提供了一個途徑爲不同的方式解決問題。

我幾年前有一個非常類似的問題。我們正在構建一個直接使用802.15.4 MAC層的產品,並且我們需要一個工具來剖析我們的定製有效載荷。

原來我用ccsniffpiper(和工具,我建它),並在LUA我加載到Wireshark的解剖寫道。然而,我發現這個過程很慢且乏味,原因很多(做LUA解析器非常棘手,將它們加載到wireshark中並不總是直截了當,而且使用Python的速度更快)。

相反,我公司開發的「命令行」工具,纏pyCCSniffer和蟒蛇提供我的自定義解剖!

我已經快速閱讀了pyCCSniffer的代碼,現在認爲它有點混亂......但我認爲它可能對您的問題非常方便。因此,我會解釋我們如何更詳細地使用它。

我們有一個自定義的「PacketHandler」我們公司的種類(例如「ACMEPacketHandler」),類似於pyCCSniffer.py文件中定義的一個。而我們在腳本的「主」方法進行註冊的:

def main(): 
    packetHandler = ACMEPacketHandler() 
    packetHandler.enable() 

    # Create a list of handlers to dispatch to 
    # NB: handlers must have a "handleSniffedPacket" method 
    handlers = [packetHandler] 
    def handlerDispatcher(timestamp, macPDU): 
     if len(macPDU) > 0: 
      packet = SniffedPacket(macPDU, timestamp) 
      for handler in handlers: 
       handler.handleSniffedPacket(packet) 

    snifferDev = CC2531EMK(handlerDispatcher, args.channel) 
我們ACMEPacketHandler的「handleSniffedPacket」的方法

然後,我們有這樣的事情:

class ACMEPacketHandler: 
    ... 
    def handleSniffedPacket(self, sniffedPacket): 
     ...check errors etc... 

     # parse as 802.15.4 frame 
     frame = ieee.IEEE15dot4FrameFactory.parse(sniffedPacket) 

     # parse contents of frames to our custom representation 
     our_frame = ACMEFrameFactory.parse(frame) 

     print(our_frame) 

然後在「ACMEFrameFactory '我們有邏輯來解析我們從特定802.15所需的信息。4幀:

class ACMEFrameFactory(object): 
    @staticmethod 
    def parse(ieee15dot4Frame): 

     if noe ieee15dot4Frame.fcf.frametype is ieee.FrameType.DATA: 
      return ieee15dot4Frame # we only use payloads in DATA frames 
     byteStream = ieee15dot4Frame.msdu 

     offset = 0 
     fmt = "<B" 
     (packet_type,) = ieee.checkAndUnpack(fmt, byteStream, offset, (0, 0)) 

     if packet_type == 1: 
      return WilyCoyotePlotFrame(...) 
     if packet_type == 2: 
      return RoadRunnerMeepMeepFrame(...) 

     # unknown packet_type 
     return ieee15dot4Frame 

我希望有幫助(這是我的兩美分無論如何)。