Код Python kismetdb выдает ошибку с более новым kismet, использующим db версии 8, но работает со старым kismet, использующим db версии 6

У меня есть скрипт Python, который извлекает данные из сгенерированного файла kismet, чтобы информация была представлена ​​в обобщенном формате. Этот файл kismet создается, когда вы прекращаете работу kismet, и имеет расширение .kismet. Этот файл kismet на самом деле является базой данных SQLite. Однако у меня есть проблема, из-за которой, когда я пытаюсь запустить свой скрипт python в файле kismet, сгенерированном в более новых версиях kismet, я получаю довольно много ошибок, тогда как если я запускаю более старую версию kismet, которую я использовал до того, как она работает нормально. Я также должен отметить, что я также обновил все остальные библиотеки и программное обеспечение в своей системе. Мой скрипт python использует библиотеку оболочки kismetdb python и несколько других для извлечения данных SQLite.

Я провел небольшое расследование и проверил несколько вещей. Во-первых, я проверил версию SQLite, которую я использовал раньше, и ту, которая у меня есть сейчас. Раньше я использовал версию SQLite 3027002 , а сейчас использую SQLite 3038002. Я протестировал обе версии SQLite с новой версией kismet, и это не имело никакого значения. Затем я протестировал разные версии Python. Моя исходная версия Python была python 3.7.3 , а моя новая — python 3.9.2. Я запустил свой скрипт с новой версией kismet и снова получил те же ошибки.

Новая версия kismet, которую я использую сейчас, — 2022-01-R3 , а та, которую я использовал раньше, — 2020-12-R3. Просмотр журнала изменений на самом деле не дал мне информации, которую я нашел полезной. Я также посмотрел версию фактического kismet db_versions на обеих версиях kismet. Более новый kismet использует версию 8 , тогда как более старый kismet использует версию 6 , и, согласно этой информации, версия 8 вводит атрибуты hash и packageid в таблицу пакетов в сгенерированном файле kismet.

Это мой код скрипта Python, большую часть которого я закомментировал, чтобы сузить круг причин, вызывающих ошибку в новой версии kismet. Мне удалось определить, что это когда я звоню get_all()функцию, в которой возникает ошибка. Когда я запускаю этот код со старой версией kismet, print(KIS_DEVICES.get_all(**query_args))выводит все устройства, обнаруженные kismet, что соответствует таблице устройств в сгенерированном файле kismet SQLite, которая слишком длинная для отображения. Но это то, что я пытаюсь сделать, но с новой версией kismet, которая использует kismetdb версии 8 .

      import json, sys, kismetdb
from datetime import datetime

# Check if KismetDB is Specified as an Argument
if not len(sys.argv) == 2:
    print("[!] No KismetDB Specified")
    sys.exit(0)

# Set Input and Output Files
KIS_IN = sys.argv[1]
KIS_OUT = "%ssummary" % (KIS_IN[:-6])

query_args = {}
# Get Kismet Devices from DB
KIS_DEVICES = kismetdb.Devices(KIS_IN)
print(KIS_DEVICES.get_all(**query_args))

KIS_DB = [row["device"] for row in KIS_DEVICES.get_all(**query_args)]

sys.exit(0)

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

      sudo python3 KismetDB_to_Summary\ copy.py new\ pi\ build/Kismet-20220411-23-01-06-1.kismet 
Traceback (most recent call last):
  File "/Users/user/Desktop/Apolloo /KismetDB_to_Summary copy.py", line 53, in <module>
    print(KIS_DEVICES.get_all(**query_args))
  File "/usr/local/lib/python3.9/site-packages/kismetdb/base_interface.py", line 155, in get_all
    return self.get_rows(self.column_names, sql, replacements)
  File "/usr/local/lib/python3.9/site-packages/kismetdb/base_interface.py", line 325, in get_rows
    for row in cur.fetchall():
  File "/usr/local/lib/python3.9/site-packages/kismetdb/utility.py", line 473, in device_field_parser
    retval = json.dumps(json.loads(device))
  File "/usr/local/Cellar/python@3.9/3.9.7/Frameworks/Python.framework/Versions/3.9/lib/python3.9/json/__init__.py", line 341, in loads
    s = s.decode(detect_encoding(s), 'surrogatepass')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf5 in position 1286: invalid start byte

Я попытался просмотреть код библиотеки, на который указывают ошибки, но большая часть этого выходит за рамки моей головы, и я действительно не уверен, что может быть причиной ошибок. У меня есть ощущение, что это как-то связано с тем фактом, что более новая версия kismetdb ( версия 8 ) вводит новые атрибуты в таблицу пакетов, но я на самом деле не уверен, в чем проблема.

Любая помощь будет оценена, так как я действительно хочу использовать более новую версию kismet, но при этом иметь возможность извлекать и фильтровать сгенерированные данные SQLite в мой итоговый вывод.

0 ответов

Другие вопросы по тегам