Я довольно новичок в Python, и у меня возникла следующая проблема с использованием библиотеки * scapy **. Здесь вы можете найти весь код (но я думаю, что это не так важно, потому что ошибка находится в указанной строке c: https://github.com/AndreaNobili/replace_download/blob/master/replace_download.py)
В Python 2 проект У меня есть следующие две строки:
modified_packet = set_load(scapy_packet, "HTTP/1.1 301 Moved Permanently\nLocation: https://www.rarlab.com/rar/wrar590.exe\n\n")
# Replace the original packet payload with the packet forget by scapy:
packet.set_payload(str(modified_packet))
Это код моей set_load () функции:
def set_load(packet, load):
#pdb.set_trace()
print("set_load() START")
# When the victim try to download a ".exe" file he\she is redirected to this other ".exe" link:
packet[scapy.Raw].load = load
# The value of the following fields are changed because the file is changed, they will be removed and
# scapy automatically recalculate the values of these fields inserting the correct values:
del packet[scapy.IP].len
del packet[scapy.IP].chksum
del packet[scapy.TCP].chksum
return packet
Таким образом, в основном я подделываю пакет, используя scapy , наконец, я устанавливаю полезную нагрузку оригинальной переменной packet с полезной нагрузкой, подделанной Scapy :
packet.set_payload(str(modified_packet))
ПРИМЕЧАНИЕ: Переменная пакета не является пакетом ** scapy , а пакетом, полученным с использованием netfilterqueue
Запуск моего сценария с Python 2 он работает нормально, но с использованием Python 3 эта последняя строка дает мне следующую ошибку:
TypeError: Argument 'payload' has incorrect type (expected bytes, got str)
> /root/Documents/PycharmWS/replace_download/replace_download.py(61)process_packet()
-> packet.set_payload(str(modified_packet))
Итак, я конвертирую * Пакет 1040 * scapy в строку , а затем я устанавливаю полезную нагрузку исходного пакета netfilterqueue , но кажется, что он ожидаем g байт
Как я могу решить эту проблему? Чего мне не хватает?
Еще одно сомнение: почему Python 2 работает нормально? Я подозреваю, что версия зависимости netfilterqueue , используемая Python 2, немного отличается от версии, используемой Python 3, и в старой версии ожидалась строка вместо байт параметр. Правильно ли это рассуждение или я что-то упустил?