gpt4 book ai didi

python - python3 http请求中的TypeError : a bytes-like object is required,不是 'str'

转载 作者:可可西里 更新时间:2023-11-01 16:31:43 26 4
gpt4 key购买 nike

当我运行这段代码时:

#!/usr/bin/env python

import scapy.all as scapy
from scapy_http import http


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


def process_sniffed_packet(packet):
if packet.haslayer(http.HTTPRequest):
print(packet)


sniff("eth0")

我得到了:

Traceback (most recent call last):   File "packet_sniffer.py", line 16, in <module>
sniff("eth0") File "packet_sniffer.py", line 8, in sniff
scapy.sniff(iface=interface, store=False, prn=process_sniffed_packet) File "/usr/local/lib/python3.7/dist-packages/scapy/sendrecv.py", line 886, in sniff
r = prn(p) File "packet_sniffer.py", line 13, in process_sniffed_packet
print(packet) File "/usr/local/lib/python3.7/dist-packages/scapy/packet.py", line 438, in
__str__
return str(self.build()) File "/usr/local/lib/python3.7/dist-packages/scapy/packet.py", line 556, in build
p = self.do_build() File "/usr/local/lib/python3.7/dist-packages/scapy/packet.py", line 541, in do_build
pay = self.do_build_payload() File "/usr/local/lib/python3.7/dist-packages/scapy/packet.py", line 528, in do_build_payload
return self.payload.do_build() File "/usr/local/lib/python3.7/dist-packages/scapy/packet.py", line 541, in do_build
pay = self.do_build_payload() File "/usr/local/lib/python3.7/dist-packages/scapy/packet.py", line 528, in do_build_payload
return self.payload.do_build() File "/usr/local/lib/python3.7/dist-packages/scapy/packet.py", line 541, in do_build
pay = self.do_build_payload() File "/usr/local/lib/python3.7/dist-packages/scapy/packet.py", line 528, in do_build_payload
return self.payload.do_build() File "/usr/local/lib/python3.7/dist-packages/scapy/packet.py", line 541, in do_build
pay = self.do_build_payload() File "/usr/local/lib/python3.7/dist-packages/scapy/packet.py", line 528, in do_build_payload
return self.payload.do_build() File "/usr/local/lib/python3.7/dist-packages/scapy/packet.py", line 538, in do_build
pkt = self.self_build() File "/usr/local/lib/python3.7/dist-packages/scapy_http/http.py", line 179, in self_build
return _self_build(self, field_pos_list) File "/usr/local/lib/python3.7/dist-packages/scapy_http/http.py", line 101, in _self_build
val = _get_field_value(obj, f.name) File "/usr/local/lib/python3.7/dist-packages/scapy_http/http.py", line 74, in _get_field_value
headers = _parse_headers(val) File "/usr/local/lib/python3.7/dist-packages/scapy_http/http.py", line 18, in _parse_headers
headers = s.split("\r\n") TypeError: a bytes-like object is required, not 'str'

我该怎么办?

最佳答案

您可以使用 python2 而不是 python3 来解决这个问题。如果您不想更改 Python 版本,则需要对 scapy-http 的库代码进行一些更改。从你的回溯中我可以看到该文件位于:/usr/local/lib/python3.7/dist-packages/scapy_http/http.py。现在使用任何文本编辑器打开该文件。

更改第 18 行:

headers = s.split("\r\n")

到:

try:
headers = s.split("\r\n")
except TypeError as err:
headers = s.split(b"\r\n")

然后将第 109 行更改为:

p = f.addfield(obj, p, val + separator)

到:

try:
p = f.addfield(obj, p, val + separator)
except TypeError as err:
p = f.addfield(obj, p, str(val) + str(separator))

关于python - python3 http请求中的TypeError : a bytes-like object is required,不是 'str',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56303279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com