How to extract Raw of TCP packet using Scapy

extract, hex, python, scapy

Solution

You can get the raw bytes of the packet using `scapy.compat.raw`1:

from scapy.all import raw
raw(packet)

The former is cross-version compatible, but if you are guaranteed to run with Python 3 and support for Python 2 is not needed, you can simply invoke `bytes`, which doesn't require an ad-hoc import statement (and is actually how `scapy.compat.raw` is implemented behind the scenes):

bytes(packet)

You can print the raw bytes of the packet in a readable format using `scapy.compat.bytes_hex`2:

from scapy.all import bytes_hex
print(bytes_hex(packet))

1 `scapy.compat.raw`'s implementation can be found here. 2 `scapy.compat.bytes_hex`'s implementation can be found here.

Problem

I use the `sniff` function of scapy module. My `filter` and `prn` function are doing a great job. But now, I would like to extract the `Raw` of the `TCP packet` and handle it using hexadecimal or binary format. Here is the documentation of Packet Class in scapy. How can I do that ? I tried `print packet[Raw]` but it seems to be converted as ASCII or something like that. I want to keep it in hexadecimal or binary.

Original source