2017-01-25 17 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, чтобы проходить через вещи и создавать некоторые простые деревья, но, как я могу судить, мне нужно идти вручную в графическом интерфейсе и сообщать программе «Декодировать как« MyProtocol »для каждого новый адрес назначения, который становится выделенным главным устройством 15.4. Моя потребность сделать мой диссексуал беспорядочным для всех 15.4 адресов назначения. Мне понравились примечания, где disector_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

NB: Я на самом деле не отвечая на ваш вопрос, но обеспечивая аллею для других чтобы решить вопрос.

У меня была очень похожая проблема несколько лет назад. Мы строили продукт, который использовал уровень MAC 802.15.4 непосредственно, и нам нужен инструмент для анализа наших пользовательских полезных нагрузок.

Первоначально я использовал ccsniffpiper (и инструменты, из которых я его построил), и написал диссекторы в LUA, которые я загрузил в Wireshark. Тем не менее, я обнаружил, что этот процесс был медленным и утомительным по ряду причин (выполнение диссеекторов LUA было сложным, загрузка их в wirehark не всегда была прямой, а использование Python было более быстрым).

Вместо этого я разработал инструмент командной строки, который обернулся вокруг pyCCSniffer и предоставил мой пользовательский анализ в python!

Я быстро прочитал код 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) 

Тогда в методе «handleSniffedPacket» нашего ACMEPacketHandler у нас было что-то вроде этого:

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 

Я надеюсь, что это поможет (это все мои два цента).

 Смежные вопросы

  • Нет связанных вопросов^_^