Ответ 1
проверьте этот пример
from scapy.all import *
from scapy.utils import rdpcap
pkts=rdpcap("FileName.pcap") # could be used like this rdpcap("filename",500) fetches first 500 pkts
for pkt in pkts:
pkt[Ether].src= new_src_mac # i.e new_src_mac="00:11:22:33:44:55"
pkt[Ether].dst= new_dst_mac
pkt[IP].src= new_src_ip # i.e new_src_ip="255.255.255.255"
pkt[IP].dst= new_dst_ip
sendp(pkt) #sending packet at layer 2
комментарии:
- Использовать методы rdpcap, wrpcap scapy для чтения и записи из файла формата pcap
- вы можете использовать
sniff(offline="filename")
для чтения пакетов, и вы можете использовать параметр prn, подобный этомуsniff(offline="filename",prn=My_Function)
, в этом случае My_Functions будет применен к каждому pkt sniffed - правильный способ написать новый ip или mac - считать его строкой ex:
ip="1.1.1.1"
и т.д., как показано выше. - в примере: метод sendp включен в цикл for, который медленнее, чем другой цикл для отправки пакетов
- подсказка производительности: в python, использующем для циклов, слишком медленно используется map, если вам нужна скорость, например, цикл for в C, Ref
- Используемый выше rdpcap читает файл сразу, если доступная память при чтении составляет 1,5 Гб, и вы читаете файл 2,3,.. Gb, он не работает.
- Если проблема с производительностью имеет решающее значение, вы можете использовать winpcap, но вам нужно написать более сложный код на C; выполнение одной и той же задачи с помощью python/scapy довольно просто, но это не быстрее, чем c
- зависит от того, какой из них следует использовать на уровне требуемой производительности
- Если моя догадка правильная, вы отправляете пакеты видеопотоков, в этом случае я бы использовал winpcap, если я отправляю 1 мегапиксельное видео или scapy в других случаях (меньший размер для каждого кадра).
- в случае использования C/winpcap вы получите отличную производительность при чтении pcaps и изменении данных и повторной отправке, но вы должны знать об одной и той же проблеме (большие файлы), вам нужно создать буфер с соответствующим размером используйте его для чтения, отправляя пакеты с довольно высокой производительностью.
- Если размер пакета является постоянным (что редко бывает в большинстве случаев, я думаю), у вас может быть преимущество получить большую часть вашей доступной памяти
- Если вы хотите использовать python/scapy для всего "проекта/программы", вы можете создать высокопроизводительные функции в C/Wincap и скомпилировать как dll, тогда вы можете импортировать эту DLL в свою программу python, и вы можете использовать ее внутри программа python. Таким образом, вы получаете преимущества замечательного простого python/Scapy, и вы записываете только определенные функции в c, чтобы вы могли быстрее выполнять свою работу, а ваш код был сфокусированным и поддерживаемым.