我使用 dpkt python 包来解析 pcap 文件,并执行以下操作来获取 tcp 数据包:
f = open(fname)
pcap = dpkt.pcap.Reader(f)
tcps = []
for ts, buff in pcap_in:
eth = dpkt.ethernet.Ethernet(buff)
ip = eth.data
tcp = ip.data
现在我想看看哪些有 SYN 和 ACK 标志。我试图将具有这两个标志的那些放在一个列表中,如下所示:
syn_plus_ack = []
for tcp in tcps:
if ((tcp.flags & dpkt.tcp.TH_SYN) and (tcp.flags & dpkt.tcp.TH_ACK)):
syn_plus_ack.append(tcp)
我不确定这是否符合我的要求,因为我在一个示例 pcap 文件上进行了尝试,并且有很多数据包具有大量 SYN 但没有 ACK+SYN。
我注意到syn_plus_ack中tcp.flags的值是18,dpkt.tcp.TH_SYN是2,dpkt.tcp.TH_ACK是16。tcp.flags的值是数据包中所有标志值的总和吗?有什么我做错了吗?