linux中识别syn泛洪需用tcpdump抓取syn=1且ack=0的tcp包,配合ss -s监控syn-recv状态上升,并统计高频源ip;命令为sudo tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn' -nn -s 0 -w syn_flood.pcap。

Linux 中使用 tcpdump 抓取 SYN 泛洪,核心是精准过滤出大量 TCP SYN 包(即未完成三次握手的连接请求),并配合合理参数避免漏包或性能干扰。这不是单纯“抓 SYN”,而是要识别异常流量模式。
如何识别 SYN 泛洪特征
SYN 泛洪的本质是:攻击者发送大量 TCP SYN 包,但不响应服务端返回的 SYN-ACK,导致服务端维持大量半连接(SYN_RECV 状态),耗尽资源。因此抓包关键点是:
- 协议为 TCP
- TCP 标志位中 SYN = 1,ACK = 0(即纯 SYN 包)
- 可选:排除本机已建立连接的回包(如避免抓到自己发的 ACK),或限制源 IP 分布广度(如
src net 192.168.0.0/16不匹配,暗示外部随机源)
抓取纯 SYN 包的命令
sudo tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn' -nn -s 0 -w syn_flood.pcap
说明:
-
-i eth0:替换为实际网卡(可用tcpdump -D查看) -
'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn':BPF 过滤表达式,只匹配 SYN=1 且 ACK=0 的包(标准写法,兼容性强) -
-nn:禁用域名和端口解析,提升实时性与准确性 -
-s 0:捕获完整数据帧,确保 TCP 头部标志位完整(必须加,否则可能截断) -
-w syn_flood.pcap:保存为 pcap 文件,便于后续用 Wireshark 或ss -s对比连接状态
✅ 补充验证方式:运行该命令同时,在另一终端执行
watch -n1 'ss -s | grep "SYN-RECV"',若SYN-RECV数量持续上升,且tcpdump持续输出大量不同源 IP 的 SYN 包,基本可确认 SYN 泛洪存在。
快速筛查高频率 SYN 源(辅助定位攻击源)
如果想边抓包边统计可疑源 IP,可组合使用:
sudo tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn' -nn -c 1000 | awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | sort -nr | head -10
该命令抓前 1000 个 SYN 包,提取源 IP(第 3 列),去重计数并列出 Top 10 频次最高的源 —— 若某 IP 出现数百次,极可能是攻击源。
注意事项
- 必须用
sudo或 root 权限,否则无法访问原始套接字 - 避免在高负载生产环境长时间全量抓包;建议限定
-c数量或搭配-G定时轮转(如-G 60 -W 5表示每 60 秒新建文件,最多存 5 个) -
tcpdump本身不防御 SYN 泛洪,它只是观测工具;确认后需通过iptables、sysctl net.ipv4.tcp_syncookies=1或防火墙策略应对
不复杂但容易忽略。











