Мне нужно прочитать файл PCAP, изменить некоторые поля (на самом деле источник и адреса IPv4 и источник и место назначения Ethernet). PCAP предварительно фильтруется, чтобы включать только IPv4 через Ethernet-пакеты.Изменение PCAP с помощью Python
До сих пор я пытался сделать это с помощью scapy, который, однако, имеет серьезную проблему с памятью. Моя память объемом 16 ГБ полностью заполняется при чтении файла PCAP емкостью 350 МБ. Собственно, просто чтение. Я еще ничего не делал с этим файлом. У меня также есть found this answer, и с этими изменениями чтение происходит очень быстро. Как только я начну изменять пакет, память снова раздувается. Scapy на самом деле не используется в этом контексте.
Я также подумал об использовании других инструментов, таких как tcprewrite, но это не может служить моим целям. MAC-адрес источника всегда одинаковый для каждого пакета, это также можно сделать с помощью tcprewrite. Исходный IP-адрес должен быть случайным в заданном диапазоне подсети, например, равномерно распределенном в 10.0.0.0/16. Не слишком легко. Еще более сложным является IP-адрес назначения, который необходимо вычислить из заданной матрицы трафика.
Вопрос: как я могу прочитать в файле PCAP, изменить четыре основных поля (Ethernet src + dst, IP src + dst) с помощью специальной функции и записать их обратно в (другой) файл PCAP?
На самом деле, остальная часть моей структуры написана на Python, поэтому я бы предпочел решение на основе python. Однако, поскольку я мог просто вызвать другие скрипты, это не обязательно. Спасибо!
Спасибо! Я смог выполнить требуемую операцию вручную по байтовым данным. После изменения файла я использую [один проход с tcprewrite] (http://tcpreplay.synfin.net/wiki/tcprewrite) для исправления контрольных сумм снова, это намного быстрее, чем использование Scapy для этого. –