';旗帜';pcap中tcp数据包的属性表示何时被python中的dpkt读取?
我使用dpkt python包解析pcap文件,并执行以下操作以获取tcp数据包:';旗帜';pcap中tcp数据包的属性表示何时被python中的dpkt读取?,python,tcp,tcp-ip,tcpdump,dpkt,Python,Tcp,Tcp Ip,Tcpdump,Dpkt,我使用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_a
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值是数据包中所有标志值的总和吗?有什么我做错了吗?这可能是因为您假设pcap中的所有数据包都是TCP。在解析数据包头的
标志之前,需要确保数据包实际上是TCP。这可以通过检查ip
标题中的p
字段是否为6
(dpkt.ip.ip_PROTO_TCP
):
我刚刚在可用的http.pcap
文件中尝试了这一点,结果如下:
Packet #0 : 10 = 0x2
Found TCP SYN & ACK in Packet #1
Packet #1 : 10010 = 0x12
Packet #2 : 10000 = 0x10
Packet #3 : 11000 = 0x18
对它的16 | 2
,即18
。您可以共享您正在使用的pcap文件吗?或者你能把pcap的结果发布在@KiranBandla上吗对不起,我不能分享pcap文件,但是你的回答解决了我的问题。谢谢
Packet #0 : 10 = 0x2
Found TCP SYN & ACK in Packet #1
Packet #1 : 10010 = 0x12
Packet #2 : 10000 = 0x10
Packet #3 : 11000 = 0x18