I'm parsing a PCAP file and I need to extract TCP flags (SYN, ACK, PSH, URG, ...).
I'm using the packet['TCP'].flags
value to obtain all the flags at once.
pkts = PcapReader(infile)
for p in pkts:
F = bin(p['TCP'].flags)
print F, bin(F), p.summary()
# manual flags extraction from F
Is there a way to obtain a single TCP flag without manually extract it from packet['TCP'].flags
value?
Another option, for the record, which did not exist by the time this question was asked. It works with current Scapy development version (the first release including this change will be 2.4.0; 2.4.0rc* also include it).
You can now use
str()
on the flag value:This also works.
You can use the
Packet.sprintf()
method:If you want the "long" names, use a
dict
instead of a longif
...elif
... expression (dict
are often used in Python when you would use aswitch
in other languages):Normally, the usual way to handle FLAGS is with a bitmap and bitwise operators. If your
Packet
class doesn't have specific method to test for flags, the best thing you can do IMHO is to:And test them like this:
Sadly, python doesn't have a
switch
statement to make this more elegant but it doesn't really matter much.Hope this helps!