Ошибка кодирования байта всякий раз, когда я пытаюсь запустить многопроцессорную обработку данных со scapy - PullRequest
0 голосов
/ 09 ноября 2019

Я читаю данные журнала из csv в pandas, часть данных - данные полезной нагрузки UDP, которые я передаю в пользовательский класс пакетов Scapy, экземпляры объекта scapy затем сохраняются в столбце во фрейме данных pandas, который я позжедалее процесс конвейера.

Это прекрасно работает, когда я запускаю однопотоковый / однопоточный или многопоточный процесс, но всякий раз, когда я пытаюсь использовать многопроцессорную обработку или многопроцессорную обработку через DASK, она сразу завершается с ошибкой:

File "C:\miniconda3\envs\py37\lib\site-packages\scapy\packet.py", line 825, in do_dissect
    s = bytes_encode(s)
  File "C:\miniconda3\envs\py37\lib\site-packages\scapy\compat.py", line 60, in bytes_encode
    return bytes(x)
TypeError: 'bytes' object cannot be interpreted as an integer

Кто-нибудь с подобной проблемой и / или предложениями по ее решению?

Пользовательский класс пакетов scapy очень прост и имеет только поля типа BitField.

Я работаю: windows 10python 3.7.5 scapy 2.4.3

ОБНОВЛЕНИЕ: Попытка создать небольшой воспроизводимый пример после запроса в комментариях:

В пользовательском пакете scapy использовался мультиплексор, этот мультиплексорBitField был случайно установлен на длину 2, когда он должен был быть только 1.

Между мультиплексором и следующим полемВместо этого ds должен был быть пробел в 1 бит.

Два следующих поля, где условные битовые поля основаны на мультиплексоре

Мультиплексор сделал, из-за этого в некоторых выборках данных получают значение> 1,не вызывая добавление ни одного из двух условных полей. По какой-то причине это вызвало ранее описанную ошибку при запуске многопроцессорной обработки.

fields_desc = [
            scapy.BitField("multiplexor", 0, 2),
            #scapy.BitField("gap", 0, 1),
            scapy.ConditionalField(scapy.BitField("A20", 0, 10), lambda p: p.multiplexor == 0),
            scapy.ConditionalField(scapy.BitField("A20_X", 0, 10), lambda p: p.multiplexor == 1),
            scapy.BitField("A21",0, 10)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...