Search code examples
scapypcap

A Question with using scapy.sniff for get the 'Ethernet Frame' in pcap files


Aim: Get the arrival time from the pcap files Language: python3.7 Tools: Scapy.sniff

Above all ,i want get the arrival time data,in the .pcap ,when i use wireshark ,i saw the data in the Ethernet Frame,but when i use #Scapy.sniff(offline='.pcap') ,i just get the Ether,TCP,IP and others ,so how can i get that data? Thanx alot!

>>from scapy.all  import *
>>a = sniff(offline = '***.pcap')
>>a[0]

[out]:
<Ether  dst=*:*:*:*:*:* src=*:*:*:*:*:* type=** |<IP  version=4 ihl=5 tos=0x20 len=52 id=14144 flags=DF frag=0 ttl=109 proto=tcp chksum=0x5e3b src=*.*.*.* dst=*.*.*.* |<TCP  sport=gcsp dport=http seq=1619409885 ack=1905830025 dataofs=8 reserved=0 flags=A window=65535 chksum=0xfdb5 urgptr=0 options=[('NOP', None), ('NOP', None), ('SAck', (1905831477, 1905831485))] |>>>
[ ]:


Solution

  • The packet time from the pcap is available in the time member:

    print(a[0].time)
    

    It's kept as a floating point value (the standard python "timestamp" format). To get it in a form more easily understandable, you may want to use the datetime module:

    >>> from datetime import datetime
    >>> dt = datetime.fromtimestamp(a[0].time)
    >>> print(dt)
    2018-11-12 03:03:00.259780
    

    The scapy documentation isn't great. It can be very instructive to use the interactive help facility. For example, in the interpreter:

    $ python
    >>> from scapy.all import *
    >>> a = sniff(offline='mypcap.pcap')
    >>> help(a[0])
    

    This will show you all the methods and attributes of the object represented by a[0]. In your case, that is an instance of class Ether(scapy.packet.Packet).