将 scapy "IP" 类型转换为 "Bytes"
Convert a scapy "IP" type to "Bytes"
我正在使用 python3 和 nfqueue 即时修改数据包。
背景
Scapy 版本:2.4.1
Python 的 NetfilterQueue (PyPi) 有方法将数据包转换为 "scapy-compatible" strings/bytes,反之亦然,这些是:
get_payload
, returns scapy 兼容 string in python 2, BYTES 在 python 3.
set_payload
,在我们完成 scapy 后设置数据包的有效负载。
问题
在我使用了get_payload
之后,我可以使用scapy的IP()
方法来愉快地修改数据包的各个部分。但是,当我完成后,我剩下一个 "IP" 类型的对象,我想将其转换为 "bytes" 类型(以便能够在其上使用 set_payload
)。
打印 IP 属性时的代码输出
('nnnn' 是本例中的实际数据包数据)
running...
<class 'scapy.layers.inet.IP'>
b'E\x00\x008\x82\x00@\x00@\x06\xba\xbd\x7f\x00\x00\x01\x7f\x00\x00\x01\xeaj\x1f\x91(\x02\xb9\xffq\xa4\xd6\xbe\x80\x18\x02\x00\xf2W\x00\x00\x01\x01\x08\n\xa8b\x11*\xa8b\x11*nnnn'
b'nnnn'
Argument 'payload' has incorrect type (expected bytes, got IP)
Q
如何在 python3 中将类型 scapy.layers.inet.IP
转换为类型 "bytes"?
从源代码中,您可以调用 build method or you can pass your IP
object to bytes
directly as IP
implements __bytes__
dunder 方法:
from scapy.layers.inet import IP
p = IP(dst="github.com")
print(p) # b'E\x00\x00\x14\x00\x01\x00\x00@\x00l\x82\n\x0c\x02\x05\x8cRv\x04'
print(p.build()) # b'E\x00\x00\x14\x00\x01\x00\x00@\x00l\x82\n\x0c\x02\x05\x8cRv\x04'
print(bytes(p)) # b'E\x00\x00\x14\x00\x01\x00\x00@\x00l\x82\n\x0c\x02\x05\x8cRv\x04'
我正在使用 python3 和 nfqueue 即时修改数据包。
背景
Scapy 版本:2.4.1
Python 的 NetfilterQueue (PyPi) 有方法将数据包转换为 "scapy-compatible" strings/bytes,反之亦然,这些是:
get_payload
, returns scapy 兼容 string in python 2, BYTES 在 python 3.set_payload
,在我们完成 scapy 后设置数据包的有效负载。
问题
在我使用了get_payload
之后,我可以使用scapy的IP()
方法来愉快地修改数据包的各个部分。但是,当我完成后,我剩下一个 "IP" 类型的对象,我想将其转换为 "bytes" 类型(以便能够在其上使用 set_payload
)。
打印 IP 属性时的代码输出
('nnnn' 是本例中的实际数据包数据)
running...
<class 'scapy.layers.inet.IP'>
b'E\x00\x008\x82\x00@\x00@\x06\xba\xbd\x7f\x00\x00\x01\x7f\x00\x00\x01\xeaj\x1f\x91(\x02\xb9\xffq\xa4\xd6\xbe\x80\x18\x02\x00\xf2W\x00\x00\x01\x01\x08\n\xa8b\x11*\xa8b\x11*nnnn'
b'nnnn'
Argument 'payload' has incorrect type (expected bytes, got IP)
Q
如何在 python3 中将类型 scapy.layers.inet.IP
转换为类型 "bytes"?
从源代码中,您可以调用 build method or you can pass your IP
object to bytes
directly as IP
implements __bytes__
dunder 方法:
from scapy.layers.inet import IP
p = IP(dst="github.com")
print(p) # b'E\x00\x00\x14\x00\x01\x00\x00@\x00l\x82\n\x0c\x02\x05\x8cRv\x04'
print(p.build()) # b'E\x00\x00\x14\x00\x01\x00\x00@\x00l\x82\n\x0c\x02\x05\x8cRv\x04'
print(bytes(p)) # b'E\x00\x00\x14\x00\x01\x00\x00@\x00l\x82\n\x0c\x02\x05\x8cRv\x04'