@pypyshka

"Обрезаются" данные при работе сниффера. Как исправить?

Всем привет!

Учусь работать с Python 3, пробую с помощью сниффера получать данные с сетевого устройства:

import re
from PyQt5 import QtCore
from scapy.all import *

class TestSniffer(QtCore.QThread):
    def __init__(self, data, parent=None):
        QtCore.QThread.__init__(self, parent)
        self.data = data

    def run(self):
        sniff(prn=self.pkt_callback, filter="tcp", store=0)
    
    def pkt_callback(self, pkt):
        # Фильтруем пакеты по мак-адресу
        if pkt.src == "мак_адрес_устройства": 
            if pkt.getlayer(Raw):
                data_dirty = pkt[Raw].load
                try:
                    # "Расшифровываем" данные пакета
                    data_decoded = data_dirty.decode("utf-8")
                    print(data_decoded)
                    # Ищем текст между тэгами
                    check_data = re.findall("<text .*>(.*?)</text>", data_decoded)
                    for line in check_data:
                        if "Test" not in line:
                            self.data.append(line)
                    print(self.data)
                    if len(self.data) == 6:
                        print("Good")
                        self.data = []
                except Exception as error:
                    print("Error: ", error)


Во время анализа пакетов я непрерывно получаю следующие данные:

print(data_decoded):
<a id="19">
  <text font-family="monospace" font-size="10">001</text>
  <text font-family="monospace" font-size="10">Test</text>
</a>
<a id="20">
  <text font-family="monospace" font-size="10">002</text>
  <text font-family="monospace" font-size="10">Test</text>
</a>
<a id="21">
  <text font-family="monospace" font-size="10">003</text>
  <text font-family="monospace" font-size="10">Test</text>
</a>
<a id="22">
  <text font-family="monospace" font-size="10">0

print(self.data):
["001", "002", "003"]

print(data_decoded):
04</text>
  <text font-family="monospace" font-size="10">Test</text>
</a>
<a id="23">
  <text font-family="monospace" font-size="10">005</text>
  <text font-family="monospace" font-size="10">Test</text>
</a>
<a id="24">
  <text font-family="monospace" font-size="10">006</text>
  <text font-family="monospace" font-size="10">Test</text>
</a>

print(self.data):
["001", "002", "003", "005", "006"]

И так далее... Как видно, часть строки была разделена и соответственно регулярное выражение не смогло её обработать и мы получили неполные данные. Можно ли как-то "объединить" пакеты или может еще еще какие-нибудь варианты? Буду очень благодарен за подсказку, куда копать =)
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 17:06
15000 руб./за проект
19 апр. 2024, в 16:53
1000 руб./за проект
19 апр. 2024, в 16:45
5000 руб./за проект