web-dev-qa-db-ja.com

rawバイトからScapyパケットを作成する方法

pythonパケット解析/スニッフィングツールScapyを使用して、生のバイト文字列からパケットを作成したいと思います。特定のユースケースの詳細はより現実的ですが、次の例は次の例を示しています。私の問題と私の現在の試み:

# Get an example packet (we won't really have an offline file in production.)
pkt = sniff(offline="./example_packets/example_packets2.pcap")

# Convert it to raw bytes -- oddly __str__ does this.
raw_packet = str(pkt)

# Current, broken, attempt to construct a new packet from the same bytes as the old.
# In truth, there are easier ways to copy packets from existing Scapy packets, but
# we are really just using that offline packet as a convenient example.
new_packet = Packet(_pkt=raw_packet)

# Sadly, while this packet has the bytes internally, it no longer has the
# interpretations of the layers like the original packet did (such as saying that
# the packet is ARP and has these field values, etc.
print repr(new_packet)

Pcapファイルからスニッフィングされたかのように見える生のバイトからnew_packetを生成するにはどうすればよいですか?

11
icfy

Scapyがパケットの最初の層を推測する方法はないので、それを指定する必要があります。

これを行うには、適切なPacketサブクラスを使用します。たとえば、パケットの最初の層がイーサネットである場合、Ether(raw_packet)の代わりにPacket(raw_packet)を使用します。

12
Pierre