gpt4 book ai didi

python - 如何从 pcap 文件中提取 TCP SYN 标志并使用 Python (Scapy) 检测 SYN Flood 攻击?

转载 作者:可可西里 更新时间:2023-11-01 02:40:42 28 4
gpt4 key购买 nike

我正在解析一个 PCAP 文件,我只需要提取 TCP 标志 (SYN) 来检测 SYN 泛洪攻击。我使用 Python 和 scapy。

主要目标是检测 SYN 洪水攻击的方法!我需要为每个 IP 地址计算一些 TCP 标志 (SYN) 并打印一个列表:{IP: number of SYN flag} 按 SYN flag 数排序。有人可以帮助我吗?

# -*- coding: utf-8 -*-
from scapy.all import *
pkts = PcapReader("test.pcap")
dict_ips = dict()

最佳答案

最好的对象是Counter(来自collections)。

“不那么 Pythonic”(但如果你不习惯 Python 的话更容易阅读)的写法是:

from scapy.all import PcapReader, TCP
from collections import Counter
count = Counter()
for pkt in PcapReader("test.pcap"):
if TCP in pkt and pkt[TCP].flags & 2: # TCP SYN packet
src = pkt.sprintf('{IP:%IP.src%}{IPv6:%IPv6.src%}')
count[src] += 1

把这个写成一个理解很容易:

from scapy.all import PcapReader, TCP
from collections import Counter
count = Counter(
pkt.sprintf('{IP:%IP.src%}{IPv6:%IPv6.src%}')
for pkt in PcapReader('test.pcap')
if TCP in pkt and pkt[TCP].flags & 2
)

然后,Counter 的行为类似于 dict 对象:

>>> count["1.2.3.4"]
12

但是 Counter 有一个方便的 .most_common() 方法:

>>> count.most_common(1)
[('1.2.3.4', 12)]
>>> count.most_common()
[('1.2.3.4', 12), [...]]

作为结论,我不得不提到 Scapy 在解析大量数据包时表现不佳(如果我们谈论的是泛洪,情况可能就是这样)。如果我是你,我仍会使用 Counter,但我会使用 subprocess.Popen() 调用 tcpdump 来生成源代码或 tshark 而不是 Scapy 的 PcapReader

关于python - 如何从 pcap 文件中提取 TCP SYN 标志并使用 Python (Scapy) 检测 SYN Flood 攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38154662/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com