Не работает код при открытии в другом браузере и не загружает информацию с HTTP страниц
У меня не работает скрипт сниффера пакетов, когда я использую MicrosoftEdge всё работает прекрасно, HTTP загружаются, но страница просто пустая (если это возможно, то объясните, почему так происходит. Как сделать так чтобы страницы открывались в HTTP, так как я понизил им уровень с HTTPS до HTTP). Ещё у меня возникает сложность, при использовании браузера Firefox мой скрипт перестает работать и выдаёт ошибку:
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
in get_login_info if keyword in load: TypeError: a bytes-like object is required, not 'str'
Ответы (1 шт):
Здесь ошибка не в логике, описанной в вопросе, а в том, что вы сравниваете два значения с разными типами данных.
Воспроизведу вашу ошибку
keywords = ['username', 'user', 'login', 'password', 'pass']
load = b"login may be or not, how can I check?"
for keyword in keywords:
if keyword in load:
print(f"Founded {keyword}")
Ну, и результат:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
TypeError: a bytes-like object is required, not 'str'
Из вашего кода абсолютно понятно, что вы имеете тип str для сущности keyword. А из ошибки можно сделать вывод, что сущность load имеет тип данных bytes. Для проверки всегда можно вывести их тип
>>> type(load)
<class 'bytes'>
>>> type(keywords[0])
<class 'str'>
Как решить. Очевидно привести сравниваемые данные к одному типу. Метод decode() позволяет привести данные из байтовой последовательности к строке
keywords = ['username', 'user', 'login', 'password', 'pass']
load = b"login may be or not, how can I check?"
for keyword in keywords:
if keyword in load.decode(): # здесь преобразование
print(f"Founded: {keyword}")
Вывод
Founded: login
Это пример для понимания и нахождения ошибки. Естественно, load может содержать данные в другом виде. Покажу пример для json, который приходит в виде байтовой последовательности
import json
keywords = ['username', 'user', 'login', 'password', 'pass']
load = b'{"login":"loginsnts","user":"Bradly Cooper"}'
load_dict = json.loads(load)
for keyword in keywords:
if keyword in load_dict.keys():
print(f"Founded: {keyword}")
вывод
Founded: user
Founded: login