1. 需求分析
DDoS攻击通过海量请求耗尽服务器资源。本文使用 Python + Scapy 实时监控流量,自动触发IP封禁。
2. 核心代码实现
2.1 依赖安装
pip install scapy psutil
2.2 流量监控脚本(ddos_detector.py)
import time
from scapy.all import sniff, IP
import psutil
import subprocess# 阈值配置
SYN_THRESHOLD = 100 # 每秒SYN包数量阈值
BAN_TIME = 600 # 封禁时长(秒)syn_counter = {}
last_cleanup = time.time()def analyze_packet(packet):global syn_counter, last_cleanupif IP in packet:src_ip = packet[IP].srcif packet.haslayer('TCP') and packet['TCP'].flags == 'S':syn_counter[src_ip] = syn_counter.get(src_ip, 0) + 1# 每10秒清理旧记录if time.time() - last_cleanup > 10:for ip in list(syn_counter.keys()):if syn_counter[ip] > SYN_THRESHOLD:print(f"[!] DDoS detected from {ip}. Blocking...")subprocess.call(f"iptables -A INPUT -s {ip} -j DROP", shell=True)del syn_counter[ip]syn_counter.clear()last_cleanup = time.time()if __name__ == "__main__":print("[*] Starting DDoS detector...")sniff(prn=analyze_packet, filter="tcp", store=0)
2.3 脚本后台运行
nohup sudo python3 ddos_detector.py > /var/log/ddos.log 2>&1 &
3. 攻击模拟与防御测试
# 使用 hping3 模拟SYN洪水攻击(测试机执行)
sudo hping3 -S --flood -p 80 your_server_ip# 查看iptables规则(服务器执行)
sudo iptables -L INPUT -n
4. 优化方向
- 集成SNMP实现网络设备联动
- 添加HTTP/HTTPS层特征分析(如User-Agent异常)
- 结合机器学习模型识别新型攻击