如何将数据包作为字节流导入scapy?
How to import a packet to scapy as a byte stream?
假设我有一个数据包作为字节流。我通过“复制为字节流”上下文菜单项从 Wireshark 获取它。像这样:“ 6C410AD2BE80050568A52D60800450004137BBD40004006419C0A0005342D863CD260540540540510A37024A97024A97024A554FF8014B718018011111455555555550ADADADA太平洋从 l2 到 l7 有一个完整的层堆栈。我如何从这些东西在 scapy 中创建正确的数据包?
我能够按如下方式解析您的字符串(或者,至少是您包含的字符串):
from scapy.layers.l2 import Ether
from scapy.all import *
b = "6c410ead2be80050568a52d60800450004137bbd40004006419c0a0005342d863cd260ee0540510a37024a9554ff8018014b7d9100000101080a38cdaa36005e4184524553504d4f4420696361703a2f2f34352e3133342e36302e3231303a313334"
bs = bytes.fromhex(b)
ether = Ether(bs)
ether.show()
我不会在这里显示输出,因为它看起来可能有一些潜在的敏感信息?不过,它似乎解析得很好。它显示了类型为4的IP层,MAC地址对应VMWare计算机和Cisco设备,以及其他敏感信息。
可以通过手动导入您需要的图层来避免通配符导入。
在scapy终端中,可以将其转换为十六进制字符串,保存为数据包,保存为pcap,然后将数据包加载到pcap中。
>>> wireshark_bytes = "6c410ead2be80050568a52d60800450004137bbd40004006419c0a0005342d863cd260ee0540510a37024a9554ff8018014b7d9100000101080a38cdaa36005e4184524553504d4f4420696361703a2f2f34352e3133342e36302e3231303a313334"
>>> pkt = Ether(bytes.fromhex(wireshark_bytes))
>>> pkt
<Packet |<Raw load='lA\x0e\xad+\xe8\x00PV\x8aR\xd6\x08\x00E\x00\x04\x13
{\xbd@\x00@\x06A\x9c\n\x00\x054-
\x86<\xd2`\xee\x05@Q\n7\x02J\x95T\xff\x80\x18\x01K}\x91\x00\x00\x01\x
01\x08\n8\xcd\xaa6\x00^A\x84RESPMOD icap://45.134.60.210:134' |>>
>>> wrpcap('temp.pcap', pkt)
>>> exit()
然后我们可以使用 rdpcap 重新加载以解析数据包:
>>> pkts = rdpcap('temp.pcap')
>>> pkts[0]
<Ether dst=6c:41:0e:ad:2b:e8 src=00:50:56:8a:52:d6 type=IPv4 |<IP
version=4 ihl=5 tos=0x0 len=1043 id=31677 flags=DF frag=0 ttl=64
proto=tcp chksum=0x419c src=10.0.5.52 dst=45.134.60.210 |<TCP
sport=24814 dport=icap seq=1359623938 ack=1251300607 dataofs=8
reserved=0 flags=PA window=331 chksum=0x7d91 urgptr=0 options=
[('NOP', None), ('NOP', None), ('Timestamp', (953002550, 6177156))] |
<Raw load='RESPMOD icap://45.134.60.210:134' |>>>>
假设我有一个数据包作为字节流。我通过“复制为字节流”上下文菜单项从 Wireshark 获取它。像这样:“ 6C410AD2BE80050568A52D60800450004137BBD40004006419C0A0005342D863CD260540540540510A37024A97024A97024A554FF8014B718018011111455555555550ADADADA太平洋从 l2 到 l7 有一个完整的层堆栈。我如何从这些东西在 scapy 中创建正确的数据包?
我能够按如下方式解析您的字符串(或者,至少是您包含的字符串):
from scapy.layers.l2 import Ether
from scapy.all import *
b = "6c410ead2be80050568a52d60800450004137bbd40004006419c0a0005342d863cd260ee0540510a37024a9554ff8018014b7d9100000101080a38cdaa36005e4184524553504d4f4420696361703a2f2f34352e3133342e36302e3231303a313334"
bs = bytes.fromhex(b)
ether = Ether(bs)
ether.show()
我不会在这里显示输出,因为它看起来可能有一些潜在的敏感信息?不过,它似乎解析得很好。它显示了类型为4的IP层,MAC地址对应VMWare计算机和Cisco设备,以及其他敏感信息。
可以通过手动导入您需要的图层来避免通配符导入。
在scapy终端中,可以将其转换为十六进制字符串,保存为数据包,保存为pcap,然后将数据包加载到pcap中。
>>> wireshark_bytes = "6c410ead2be80050568a52d60800450004137bbd40004006419c0a0005342d863cd260ee0540510a37024a9554ff8018014b7d9100000101080a38cdaa36005e4184524553504d4f4420696361703a2f2f34352e3133342e36302e3231303a313334"
>>> pkt = Ether(bytes.fromhex(wireshark_bytes))
>>> pkt
<Packet |<Raw load='lA\x0e\xad+\xe8\x00PV\x8aR\xd6\x08\x00E\x00\x04\x13
{\xbd@\x00@\x06A\x9c\n\x00\x054-
\x86<\xd2`\xee\x05@Q\n7\x02J\x95T\xff\x80\x18\x01K}\x91\x00\x00\x01\x
01\x08\n8\xcd\xaa6\x00^A\x84RESPMOD icap://45.134.60.210:134' |>>
>>> wrpcap('temp.pcap', pkt)
>>> exit()
然后我们可以使用 rdpcap 重新加载以解析数据包:
>>> pkts = rdpcap('temp.pcap')
>>> pkts[0]
<Ether dst=6c:41:0e:ad:2b:e8 src=00:50:56:8a:52:d6 type=IPv4 |<IP
version=4 ihl=5 tos=0x0 len=1043 id=31677 flags=DF frag=0 ttl=64
proto=tcp chksum=0x419c src=10.0.5.52 dst=45.134.60.210 |<TCP
sport=24814 dport=icap seq=1359623938 ack=1251300607 dataofs=8
reserved=0 flags=PA window=331 chksum=0x7d91 urgptr=0 options=
[('NOP', None), ('NOP', None), ('Timestamp', (953002550, 6177156))] |
<Raw load='RESPMOD icap://45.134.60.210:134' |>>>>